Advertisement
Guest User

Untitled

a guest
Feb 9th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.37 KB | None | 0 0
  1. package testing.readdle.framework;
  2.  
  3. import org.openqa.selenium.OutputType;
  4. import org.openqa.selenium.TakesScreenshot;
  5. import org.openqa.selenium.WebDriver;
  6. import org.testng.*;
  7. import org.testng.annotations.ITestAnnotation;
  8. import ru.yandex.qatools.allure.Allure;
  9. import ru.yandex.qatools.allure.annotations.Attachment;
  10. import ru.yandex.qatools.allure.annotations.Step;
  11. import ru.yandex.qatools.allure.events.TestCaseFinishedEvent;
  12. import ru.yandex.qatools.allure.events.TestCasePendingEvent;
  13. import testing.readdle.framework.retries.IAllureRetryAnalyzer;
  14. import testing.readdle.post.JSONHelper;
  15. import testing.readdle.post.RequestExecutor;
  16. import testing.readdle.selenium.common.CommonFunctions;
  17. import testing.readdle.selenium.pages.ConfigurationFlags;
  18.  
  19. import java.io.IOException;
  20. import java.lang.reflect.Constructor;
  21. import java.lang.reflect.Method;
  22. import java.util.Iterator;
  23. import java.util.Map;
  24.  
  25. import static testing.readdle.framework.TestGlobalsManager.getDriver;
  26. import static testing.readdle.framework.TestGlobalsManager.hasDriver;
  27.  
  28. /**
  29. * Created by Gennady Dmitriev on 1/5/15.
  30. */
  31.  
  32. public class WebDriverListener extends TestListenerAdapter implements ITestListener, IAnnotationTransformer {
  33.  
  34. Allure lifecycle = Allure.LIFECYCLE;
  35.  
  36. public void transform(ITestAnnotation annotation, Class testClass,
  37. Constructor testConstructor, Method testMethod) {
  38.  
  39. IRetryAnalyzer retry = annotation.getRetryAnalyzer();
  40. if (retry == null) {
  41. annotation.setRetryAnalyzer(Retry.class);
  42. }
  43. }
  44.  
  45. @Step("Test failed, see screenshot")
  46. @Override
  47. public void onTestFailure(ITestResult tr) {
  48. TestRailHelper.getTestRail().setTestStatus(tr);
  49. TestGlobalsManager.resetErrors();
  50. attachScreenshot("failure_" + tr.getName());
  51. String trace = "Class Name: " + Thread.currentThread().getStackTrace()[1].getClassName()
  52. + "Method: " + " " + Thread.currentThread().getStackTrace()[1].getMethodName()
  53. + "Line: " + " " + Thread.currentThread().getStackTrace()[1].getLineNumber();
  54. CommonFunctions.log("trace", trace);
  55.  
  56. try {
  57. logSettings(Config.MWFL_COMPANY_LOGIN);
  58. logSettings(Config.MULTI_COMPANY_LOGIN);
  59. } catch (Exception fuckup) {
  60. logFuckup(fuckup);
  61. }
  62. fireRetryTest("The test has been failed then retried.", tr);
  63. }
  64.  
  65. @Attachment(value = "{0}", type = "image/png")
  66. public static byte[] attachScreenshot(String name) {
  67. return ((TakesScreenshot) getDriver()).getScreenshotAs(OutputType.BYTES);
  68. }
  69.  
  70. @Attachment("< {0} > company settings")
  71. public static String logSettings(String login) throws Exception {
  72. RequestExecutor executor = new RequestExecutor(Config.CONFIG_URL, String.format("?access_token=%s&email=%s", Config.RECREATE_TOKEN, "gennady%2B" + login + "@readdle.com"));
  73. String raw = executor.doGet();
  74. Map<String, Object> settings = JSONHelper.jsonToMap(raw);
  75. StringBuilder bldr = new StringBuilder("Settings for ").append(login.toUpperCase()).append(" company:");
  76. for (Map.Entry<String, Object> setting : settings.entrySet()) {
  77. bldr.append("\n\t")
  78. .append(ConfigurationFlags.getByConfig(setting.getKey())).append(": ").append(setting.getValue());
  79. }
  80. return bldr.toString();
  81. }
  82.  
  83. @Attachment("Exception log:")
  84. public static String logFuckup(Throwable fuckup) {
  85. return new StringBuilder("Failed to fetch settings:\n").append("\t").append(fuckup.getClass().getSimpleName())
  86. .append(": ").append(fuckup.getMessage()).toString();
  87. }
  88.  
  89. @Override
  90. public void onTestStart(ITestResult result) {
  91. if (!hasDriver()) {
  92. WebDriver driver = null;
  93. try {
  94. driver = LocalDriverFactory.createInstance();
  95. } catch (IOException e) {
  96. e.printStackTrace();
  97. }
  98. TestGlobalsManager.setDriver(driver);
  99. }
  100. }
  101.  
  102. @Override
  103. public void onTestSuccess(ITestResult result) {
  104. TestRailHelper.getTestRail().setTestStatus(result);
  105. }
  106.  
  107. @Override
  108. public void onTestSkipped(ITestResult result) {
  109. TestRailHelper.getTestRail().setTestStatus(result);
  110. }
  111.  
  112. @Override
  113. public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
  114. TestRailHelper.getTestRail().setTestStatus(result);
  115. TestGlobalsManager.resetErrors();
  116. attachScreenshot(result.getName());
  117. fireRetryTest("The test has been failed (within success percentage) then retried.", result);
  118. }
  119.  
  120. @Override
  121. public void onStart(ITestContext context) {
  122. TestRailHelper.getTestRail().createRun();
  123. createDriver();
  124. }
  125.  
  126. @Override
  127. public void onFinish(ITestContext context) {
  128. Iterator<ITestResult> listOfFailedTests = context.getFailedTests().getAllResults().iterator();
  129. while (listOfFailedTests.hasNext()) {
  130. ITestResult failedTest = listOfFailedTests.next();
  131. ITestNGMethod method = failedTest.getMethod();
  132. if (context.getPassedTests().getResults(method).size() > 0) {
  133. listOfFailedTests.remove();
  134. }
  135. }
  136.  
  137. TestGlobalsManager.resetErrors();
  138. WebDriver driver = getDriver();
  139. if (driver != null) {
  140. driver.quit();
  141. }
  142. }
  143.  
  144. /**
  145. * Fires Retry test if it allowed by <code>RetryAnalyzer</code>
  146. * and set 'Pending' status for test result.
  147. *
  148. * @param message <code>String</code> message which will thrown like explanation
  149. * @param result <code>ITestResult</code> containing information about the run test
  150. */
  151. protected void fireRetryTest(String message, ITestResult result) {
  152. if (((IAllureRetryAnalyzer) result.getMethod().getRetryAnalyzer()).retry(result, false)) {
  153. getLifecycle().fire(new TestCasePendingEvent().withMessage(message));
  154. getLifecycle().fire(new TestCaseFinishedEvent());
  155. }
  156. }
  157.  
  158. /**
  159. * Get current Allure lifecycle
  160. *
  161. * @return current Allure lifecycle
  162. */
  163. protected Allure getLifecycle() {
  164. return lifecycle;
  165. }
  166.  
  167. private void createDriver() {
  168. WebDriver driver = null;
  169. try {
  170. driver = LocalDriverFactory.createInstance();
  171. } catch (IOException e) {
  172. e.printStackTrace();
  173. }
  174. TestGlobalsManager.setDriver(driver);
  175. }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement