{"id":269880,"date":"2015-12-08T13:54:02","date_gmt":"2015-12-08T10:54:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=269880"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=269880","title":{"rendered":"\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 failed-\u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u0438 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0435\u0434"},"content":{"rendered":"<p>       \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 testNG, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u2014 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0435\u043c \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445: IRetryAnalyzer, ITestListener, IReporter. \u041d\u043e \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<p>  \u0412\u0435\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u201d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e. \u0418 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043d\u0435 \u043e \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c (\u0442.\u0435. \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u0438\u043b\u0438 \u0436\u0435 \u0441\u0430\u043c \u0442\u0435\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e), \u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0447\u0443\u0434\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442. \u041f\u0440\u0438\u0447\u0438\u043d \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0430\u0441\u0441\u0430: \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 CPU \/ \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 RAM \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0438 \u0434\u0440. \u0412\u043e\u043f\u0440\u043e\u0441 \u2014 \u043a\u0430\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432?<\/p>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0432\u043e\u0437\u043d\u0438\u043a \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445:<\/p>\n<p>  <b>1)<\/b> \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (CI);<br \/>  <b>2)<\/b> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0438\u0437 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432 mustHave (\u0432 \u0432\u0438\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430).<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u043b\u0438\u0447\u043d\u043e \u044f \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0431\u0443\u0434\u044c \u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0438\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043a\u0430\u0441\u0441\u0435 \u0432 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u0435: \u0447\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043d\u044f\u0442\u0438\u0439 \u0447\u0435\u043c-\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c). \u0422\u0430\u043a \u0432\u043e\u0442, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0442\u0443\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u044b \u0438 \u0438\u0445 \u0437\u043d\u0430\u043d\u0438\u0435 jenkins) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0438\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u0442\u0443\u0442 \u0443\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043d\u0430\u0448\u0430 \u0443\u0441\u0438\u0434\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 testng.xml), \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0438\u0437 100 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e 18, \u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 &gt;2 \u0440\u0430\u0437\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0432\u0443\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f):<br \/>  <a name=\"habracut\"><\/a><br \/>  <b>3) <\/b> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  \u041e\u0431\u044a\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u0438\u0441\u044c, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 testng \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <a href=\"http:\/\/testng.org\/javadoc\/org\/testng\/IRetryAnalyzer.html\">IRetryAnalyzer<\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c boolean-\u043c\u0435\u0442\u043e\u0434 retry, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u043c true, \u0438\u043b\u0438 \u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438 false. \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430 (ITestResult result).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u0431\u044b\u043b\u0430 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430 \u043d\u0435\u043c\u0438\u043d\u0443\u0435\u043c\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043e\u0442\u0447\u0435\u0442\u043d\u0438\u043a\u0438 (\u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u0430\u0448 \u0442\u0435\u0441\u0442, \u043f\u0443\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 \u2014 \u043f\u043e \u043d\u0435\u043c\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043e\u0442\u0447\u0435\u0442). \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442\u0447\u0435\u0442 \u0432\u044b \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435, \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0435\u0433\u043e \u0442\u0435\u0445\u043b\u0438\u0434\u0430\u043c, \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c \u0438 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430\u043c). \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f maven-surefire-report-plugin \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u043b\u0438\u0442\u044c\u0441\u044f, \u043b\u043e\u043c\u0430\u044f \u0433\u043b\u0430\u0437\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d \u0432\u0430\u0448 \u0442\u0435\u0441\u0442 \u0438\u043b\u0438 \u0442\u0430\u043a\u0438 \u043d\u0435\u0442.<\/p>\n<p>  \u041c\u043d\u0435 \u044f\u0432\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0430 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430 \u043a\u0440\u0438\u0432\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u044b.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 html-\u043e\u0442\u0447\u0435\u0442\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0438 \u043c\u0435\u0440\u0436\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0432 1 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439. \u041f\u043e\u0434\u0443\u043c\u0430\u0432, \u0447\u0442\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0430\u0443\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430\u043c, \u043a\u043e\u0433\u0434\u0430 \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c report-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0445 html\/xml \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043b\u044e\u0441\u043e\u0432 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2014 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c. \u041e\u0442\u0447\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0438\u043b\u0438 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u0430\u043c. \u0412\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u043e\u043b\u044f, \u043c\u0435\u0442\u0440\u0438\u043a\u0438.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0432 \u043e\u0442\u0447\u0435\u0442 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u2014 \u044d\u0442\u043e \u0431\u043b\u043e\u043a retry-\u043c\u0435\u0442\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u043e. \u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <a href=\"http:\/\/testng.org\/javadoc\/org\/testng\/ITestListener.html\">ITestListener<\/a>. \u0418\u0437 \u0441\u0435\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043d\u0430\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043e\u0448\u0435\u043b onTestSuccess, \u0442.\u043a. \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u044f\u0442 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0418\u0442\u043e\u0433\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u043a \u043d\u0430\u043c \u0432 \u043e\u0442\u0447\u0435\u0442 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b. <\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0448 \u043e\u0442\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b. \u0422\u0443\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 <a href=\"http:\/\/testng.org\/javadoc\/org\/testng\/IReporter.html\">IReporter<\/a> \u0438 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 generateReport. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c:<\/p>\n<p>   \u2014 \u043c\u0435\u0442\u043e\u0434, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0442\u0447\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b;<br \/>   \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b;<br \/>   \u2014 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u201c\u0434\u0435\u0440\u043d\u0443\u0442\u044c\u201d \u043d\u0430\u0448 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 (\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u0442).<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 html \u0432 java \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/code.google.com\/p\/gagawa\/\">gagawa<\/a>. \u0422\u0443\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c \u043e\u0442\u0447\u0435\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a \u0432\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044f\u0441\u044c \u043a\u0430\u043a \u043e\u0442 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0443 \u0432\u0430\u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0442\u0430\u043a \u0438 \u043e\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445, \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435, \u043c\u0435\u0442\u0440\u0438\u043a \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e css-\u043a\u0443 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0438\u043b\u044f\u043c\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0438\u0447 \u0443 \u043c\u0435\u043d\u044f (\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438).<\/p>\n<h5>RetryAnalyzer:<\/h5>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 retryCount \u0438 retryMaxCount \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u0441\u0442\u0430. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c, \u0441\u0447\u0438\u0442\u0430\u044e \u043a\u043e\u0434 \u0432\u043f\u043e\u043b\u043d\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<pre><code class=\"java\">public class RetryAnalyzer implements IRetryAnalyzer {     private int retryCount = 0;     private int retryMaxCount = 3;      \/\/ \u0440\u0435\u0448\u0430\u0435\u043c, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438 \u0442\u0435\u0441\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430     @Override     public boolean retry(ITestResult testResult) {         boolean result = false;         if (testResult.getAttributeNames().contains(&quot;retry&quot;) == false) {             System.out.println(&quot;retry count = &quot; + retryCount + &quot;\\n&quot; +&quot;max retry count = &quot; + retryMaxCount);             if(retryCount &lt; retryMaxCount){                 System.out.println(&quot;Retrying &quot; + testResult.getName() + &quot; with status &quot;                         + testResult.getStatus() + &quot; for the try &quot; + (retryCount+1) + &quot; of &quot;                         + retryMaxCount + &quot; max times.&quot;);                  retryCount++;                 result = true;             }else if (retryCount == retryMaxCount){                 \/\/ \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u043c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0442\u0447\u0435\u0442 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b                 \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u0441\u0442\u0430                 String testName = testResult.getName();                 String className = testResult.getTestClass().toString();                 String resultOfTest = resultOfTest(testResult);                 String stackTrace = testResult.getThrowable().fillInStackTrace().toString();                 System.out.println(stackTrace);                 \/\/ \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u0441\u0442\u043e\u0432                 ReportCreator.addTestInfo(testName, className, resultOfTest, stackTrace);             }         }         return result;     }     \/\/ \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0435\u0441\u0442\u0430  saccess \/ failure     public String resultOfTest (ITestResult testResult) {         int status = testResult.getStatus();         if (status == 1) {             String TR = &quot;Success&quot;;             return TR;         }         if (status == 2) {             String TR = &quot;Failure&quot;;             return TR;         }         else {             String unknownResult = &quot;not interested for other results&quot;;             return unknownResult;         }     } } <\/code><\/pre>\n<p>  <\/p>\n<h5>TestListener<\/h5>\n<p>  \u0422\u0443\u0442 \u043b\u043e\u0432\u0438\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b, \u043a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442\u0435.<\/p>\n<pre><code class=\"java\">public class TestListener extends TestListenerAdapter {      \/\/ \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0434\u044f\u0442 \u0432 onSuccess \u044e\u0437\u0430\u0435\u043c \u0435\u0433\u043e     @Override     public void onTestSuccess(ITestResult testResult) {         System.out.println(&quot;on success&quot;);         \/\/ \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432  \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b         String testName = testResult.getName();         String className = testResult.getTestClass().toString();         String resultOfTest = resultOfTest(testResult);         String stackTrace = &quot;&quot;;         ReportCreator.addTestInfo(testName, className, resultOfTest, stackTrace);     }      \/\/ \u0435\u0449\u0435 1 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0435\u0441\u0442\u0430  saccess \/ failure     public String resultOfTest (ITestResult testResult) {         int status = testResult.getStatus();         if (status == 1) {             String TR = &quot;Success&quot;;             return TR;         }         if (status == 2) {             String TR = &quot;Failure&quot;;             return TR;         }         else {             String unknownResult = &quot;not interested for other results&quot;;             return unknownResult;         }     } } <\/code><\/pre>\n<p>  <\/p>\n<h5>Reporter <\/h5>\n<p>  \u0414\u0435\u0440\u0433\u0430\u0435\u043c \u043d\u0430\u0448 \u043e\u0442\u0447\u0435\u0442, \u0442.\u043a. \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0443\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b.<\/p>\n<pre><code class=\"java\">public class Reporter implements IReporter {  \/\/ \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u043d\u0430\u0448 getReport \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f html \u0432 string     @Override     public void generateReport(List&lt;XmlSuite&gt; xmlSuites, List&lt;ISuite&gt; suites, String outputDirectory) {         PrintWriter saver = null;         try {              saver = new PrintWriter(new File(&quot;report.html&quot;));              saver.write(ReportCreator.getReport());         } catch (FileNotFoundException e) {             e.printStackTrace();         } finally {             if (saver != null) {                 saver.close();             }         }     } } <\/code><\/pre>\n<p>  <\/p>\n<h5>ReportCreator <\/h5>\n<p>  \u0421\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0448\u0435\u0433\u043e html-\u043e\u0442\u0447\u0435\u0442\u0430.<\/p>\n<pre><code class=\"java\">public class ReportCreator {     public static Document document;     public static Body body;     public static ArrayList&lt;TestData&gt; list = new ArrayList&lt;TestData&gt;();      \/\/ \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0445\u0435\u0434\u0435\u0440\u0430 \u043e\u0442\u0447\u0435\u0442\u0430     public static void headerImage (){          Img headerImage = new Img(&quot;&quot;, &quot;src\/main\/resources\/baad.jpeg&quot;);         headerImage.setCSSClass(&quot;headerImage&quot;);         body.appendChild(headerImage);      }      \/\/ \u043e\u0431\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u043e\u0442\u0447\u0435\u0442\u0430 (\u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b: \u0443\u0441\u043f\u0435\u0445 + \u043d\u0435\u0443\u0441\u043f\u0435\u0445)     public static void addTestReport(String className, String testName, String status) {          if (status == &quot;Failure&quot;){             Div failedDiv = new Div().setCSSClass(&quot;AllTestsFailed&quot;);             Div classNameDiv = new Div().appendText(className);             Div testNameDiv = new Div().appendText(testName);             Div resultDiv = new Div().appendText(status);             failedDiv.appendChild(classNameDiv);             failedDiv.appendChild(testNameDiv);             failedDiv.appendChild(resultDiv);             body.appendChild(failedDiv);         }else{             Div successDiv = new Div().setCSSClass(&quot;AllTestsSuccess&quot;);             Div classNameDiv = new Div().appendText(className);             Div testNameDiv = new Div().appendText(testName);             Div resultDiv = new Div().appendText(status);             successDiv.appendChild(classNameDiv);             successDiv.appendChild(testNameDiv);             successDiv.appendChild(resultDiv);             body.appendChild(successDiv);         }     }      \/\/ \u0442\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043e\u0442\u0447\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0430\u043d\u0430 (\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u043b-\u0432\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u0438 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432)     public static void addCommonRunMetrics (int totalCount, int successCount, int failureCount) {         Div total = new Div().setCSSClass(&quot;HeaderTable&quot;);         total.appendText(&quot;Total tests count: &quot; + totalCount);         Div success = new Div().setCSSClass(&quot;HeaderTable&quot;);         success.appendText(&quot;Passed tests: &quot; + successCount);         Div failure = new Div().setCSSClass(&quot;HeaderTable&quot;);         failure.appendText(&quot;Failed tests: &quot; + failureCount);         body.appendChild(total);         body.appendChild(success);         body.appendChild(failure);     }      \/\/ \u0442\u0443\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0441 \u0443\u043f\u0430\u0432\u0448\u0438\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u0445\u0435\u0434\u0435\u0440 \u043e\u0442\u0447\u0435\u0442\u0430 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438     public static void addFailedTestsBlock (String className, String testName, String status) {         Div failed = new Div().setCSSClass(&quot;AfterHeader&quot;);         Div classTestDiv = new Div().appendText(className);         Div testNameDiv = new Div().appendText(testName);         Div statusTestDiv = new Div().appendText(status);         failed.appendChild(classTestDiv);         failed.appendChild(testNameDiv);         failed.appendChild(statusTestDiv);         body.appendChild(failed);     }      \/\/ \u0442\u0443\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u0444\u0443\u0442\u0442\u0435\u0440 \u043e\u0442\u0447\u0435\u0442\u0430 \u0441\u043e \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441\u0430\u043c\u0438 \u0437\u0430\u0444\u0435\u0439\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432     public static void addfailedWithStacktraces (String className, String testName, String status, String stackTrace) {         Div failedWithStackTraces = new Div().setCSSClass(&quot;Lowest&quot;);         failedWithStackTraces.appendText(className + &quot; &quot; + testName + &quot; &quot; + status + &quot;\\n&quot;);         Div stackTraceDiv = new Div();         stackTraceDiv.appendText(stackTrace);         body.appendChild(failedWithStackTraces);         body.appendChild(stackTraceDiv);     }      \/\/ \u0442\u0443\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432 arraylist \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438     public static void addTestInfo(String testName, String className, String status, String stackTrace) {         TestData testData = new TestData();         testData.setTestName(testName);         testData.setClassName(className);         testData.setTestResult(status);         testData.setStackTrace(stackTrace);         list.add(testData);     }        \/\/ \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f html-\u043e\u0442\u0447\u0435\u0442\u0430     public static String getReport() {         document = new Document(DocumentType.XHTMLTransitional);         Head head = document.head;         Link cssStyle= new Link().setType(&quot;text\/css&quot;).setRel(&quot;stylesheet&quot;).setHref(&quot;src\/main\/resources\/site.css&quot;);         head.appendChild(cssStyle);         body = document.body;          \/\/ \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432         int totalCount = list.size();         \/\/ \u0442\u0443\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u0430\u0444\u0435\u0439\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432         ArrayList failedCountArray = new ArrayList();         for (int f=0; f &lt; list.size(); f++) {             if (list.get(f).getTestResult() == &quot;Failure&quot;) {                 failedCountArray.add(f);             }         }         int failedCount = failedCountArray.size();         \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432         int successCount = totalCount - failedCount;         \/\/ \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432    html \u043d\u0430\u0448\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0445\u0435\u0434\u0435\u0440\u0435         headerImage();         \/\/ \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432    html \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438         addCommonRunMetrics(totalCount, successCount, failedCount);         \/\/ \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 html \u0437\u0430\u0444\u0435\u0439\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b         for (int s = 0; s &lt; list.size(); s++){             if (list.get(s).getTestResult() == &quot;Failure&quot;){                 addFailedTestsBlock(list.get(s).getClassName(), list.get(s).getTestName(), list.get(s).getTestResult());             }         }         \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u043d\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442         if(list.isEmpty()){             System.out.println(&quot;ERROR: TEST LIST IS EMPTY&quot;);             return &quot;&quot;;         }         \/\/ \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u043c (\u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430) + \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 html         String currentTestClass = &quot;&quot;;         ArrayList constructedClasses = new ArrayList();         for(int i=0; i &lt; list.size();i++){             currentTestClass = list.get(i).getClassName();             \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043b\u0438 \u043c\u044b \u0445\u0442\u043c\u043b \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430             boolean isClassConstructed=false;             for(int j=0;j&lt;constructedClasses.size();j++){                 if(currentTestClass.equals(constructedClasses.get(j))){                     isClassConstructed=true;                 }             }             if(!isClassConstructed){                 for (int k=0;k&lt;list.size();k++){                     if(currentTestClass.equals(list.get(k).getClassName())){                         addTestReport(list.get(k).getClassName(), list.get(k).getTestName(),list.get(k).getTestResult());                     }                 }                 constructedClasses.add(currentTestClass);             }         }         \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0444\u0435\u0439\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 + \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 html         for (int z = 0; z &lt; list.size(); z++){             if (list.get(z).getTestResult() == &quot;Failure&quot;){                 addfailedWithStacktraces(list.get(z).getClassName(), list.get(z).getTestName(), list.get(z).getTestResult(), list.get(z).getStackTrace());             }         }         return document.write();     }      \/\/ \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0441\u0442\u0430 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 + getter'\u044b \/ setter'\u044b     public static class TestData{         String testName;         String className;         String testResult;         String stackTrace;          public TestData() {}          public String getTestName() {             return testName;         }          public String getClassName() {             return className;         }          public String getTestResult() {             return testResult;         }          public String getStackTrace() {             return stackTrace;         }          public void setTestName(String testName) {             this.testName = testName;         }          public void setClassName(String className) {             this.className = className;         }          public void setTestResult(String testResult) {             this.testResult = testResult;         }          public void setStackTrace(String stackTrace) {             this.stackTrace = stackTrace;         }     } } <\/code><\/pre>\n<p>  <\/p>\n<h5>\u0421\u0430\u043c \u043a\u043b\u0430\u0441\u0441 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h5>\n<p>  <\/p>\n<pre><code class=\"java\">@Listeners(TestListener.class) \/\/ \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u043d\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c TestListener public class Test {     private static WebDriver driver;      @BeforeClass     public static void init () {         driver = new FirefoxDriver();         driver.get(&quot;http:\/\/www.last.fm\/ru\/&quot;);     }      @AfterClass     public static void close () {         driver.close();     }      @org.testng.annotations.Test (retryAnalyzer = RetryAnalyzer.class) \/\/ \u0434\u0430\u043d\u043d\u0430\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f RetryAnalyzer \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0443     public void findLive () {         driver.findElement(By.cssSelector(&quot;[href=\\&quot;\/ru\/dashboard\\&quot;]&quot;)).click();     } } <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b testng.xml \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u0433 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0442\u0438 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 Reporter:<\/p>\n<pre><code class=\"xml\"> &lt;listeners&gt;         &lt;listener class-name= &quot;retry.Reporter&quot; \/&gt;     &lt;\/listeners&gt; <\/code><\/pre>\n<p>  \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043e\u0442\u0447\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2fc\/578\/dbe\/2fc578dbe7284250965081c66f8a6031.png\" alt=\"image\"\/><\/p>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c \u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439, \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437\u044f\u0449\u043d\u043e\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u044f \u0432\u0438\u0436\u0443 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c: \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c java+testng-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c.<\/p>\n<p>  \u041c\u043e\u0439 <a href=\"https:\/\/github.com\/dkravchenko11\/\">github<\/a> \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c.       <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/272643\/\"> http:\/\/habrahabr.ru\/post\/272643\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 testNG, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u2014 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0435\u043c \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445: IRetryAnalyzer, ITestListener, IReporter. \u041d\u043e \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<p>  \u0412\u0435\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u201d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e. \u0418 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043d\u0435 \u043e \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c (\u0442.\u0435. \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u0438\u043b\u0438 \u0436\u0435 \u0441\u0430\u043c \u0442\u0435\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e), \u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0447\u0443\u0434\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442. \u041f\u0440\u0438\u0447\u0438\u043d \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0430\u0441\u0441\u0430: \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 CPU \/ \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 RAM \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0438 \u0434\u0440. \u0412\u043e\u043f\u0440\u043e\u0441 \u2014 \u043a\u0430\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432?<\/p>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0432\u043e\u0437\u043d\u0438\u043a \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445:<\/p>\n<p>  <b>1)<\/b> \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (CI);<br \/>  <b>2)<\/b> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0438\u0437 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0432 mustHave (\u0432 \u0432\u0438\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430).<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u043b\u0438\u0447\u043d\u043e \u044f \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0431\u0443\u0434\u044c \u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0438\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043a\u0430\u0441\u0441\u0435 \u0432 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u0435: \u0447\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043d\u044f\u0442\u0438\u0439 \u0447\u0435\u043c-\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c). \u0422\u0430\u043a \u0432\u043e\u0442, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u0442\u0443\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u044b \u0438 \u0438\u0445 \u0437\u043d\u0430\u043d\u0438\u0435 jenkins) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0438\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u0442\u0443\u0442 \u0443\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043d\u0430\u0448\u0430 \u0443\u0441\u0438\u0434\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 testng.xml), \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0438\u0437 100 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e 18, \u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 &gt;2 \u0440\u0430\u0437\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0432\u0443\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f):  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-269880","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=269880"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269880\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=269880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=269880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=269880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}