Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package testing.readdle.framework;
- import org.openqa.selenium.OutputType;
- import org.openqa.selenium.TakesScreenshot;
- import org.openqa.selenium.WebDriver;
- import org.testng.*;
- import org.testng.annotations.ITestAnnotation;
- import ru.yandex.qatools.allure.Allure;
- import ru.yandex.qatools.allure.annotations.Attachment;
- import ru.yandex.qatools.allure.annotations.Step;
- import ru.yandex.qatools.allure.events.TestCaseFinishedEvent;
- import ru.yandex.qatools.allure.events.TestCasePendingEvent;
- import testing.readdle.framework.retries.IAllureRetryAnalyzer;
- import testing.readdle.post.JSONHelper;
- import testing.readdle.post.RequestExecutor;
- import testing.readdle.selenium.common.CommonFunctions;
- import testing.readdle.selenium.pages.ConfigurationFlags;
- import java.io.IOException;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.util.Iterator;
- import java.util.Map;
- import static testing.readdle.framework.TestGlobalsManager.getDriver;
- import static testing.readdle.framework.TestGlobalsManager.hasDriver;
- /**
- * Created by Gennady Dmitriev on 1/5/15.
- */
- public class WebDriverListener extends TestListenerAdapter implements ITestListener, IAnnotationTransformer {
- Allure lifecycle = Allure.LIFECYCLE;
- public void transform(ITestAnnotation annotation, Class testClass,
- Constructor testConstructor, Method testMethod) {
- IRetryAnalyzer retry = annotation.getRetryAnalyzer();
- if (retry == null) {
- annotation.setRetryAnalyzer(Retry.class);
- }
- }
- @Step("Test failed, see screenshot")
- @Override
- public void onTestFailure(ITestResult tr) {
- TestRailHelper.getTestRail().setTestStatus(tr);
- TestGlobalsManager.resetErrors();
- attachScreenshot("failure_" + tr.getName());
- String trace = "Class Name: " + Thread.currentThread().getStackTrace()[1].getClassName()
- + "Method: " + " " + Thread.currentThread().getStackTrace()[1].getMethodName()
- + "Line: " + " " + Thread.currentThread().getStackTrace()[1].getLineNumber();
- CommonFunctions.log("trace", trace);
- try {
- logSettings(Config.MWFL_COMPANY_LOGIN);
- logSettings(Config.MULTI_COMPANY_LOGIN);
- } catch (Exception fuckup) {
- logFuckup(fuckup);
- }
- fireRetryTest("The test has been failed then retried.", tr);
- }
- @Attachment(value = "{0}", type = "image/png")
- public static byte[] attachScreenshot(String name) {
- return ((TakesScreenshot) getDriver()).getScreenshotAs(OutputType.BYTES);
- }
- @Attachment("< {0} > company settings")
- public static String logSettings(String login) throws Exception {
- RequestExecutor executor = new RequestExecutor(Config.CONFIG_URL, String.format("?access_token=%s&email=%s", Config.RECREATE_TOKEN, "gennady%2B" + login + "@readdle.com"));
- String raw = executor.doGet();
- Map<String, Object> settings = JSONHelper.jsonToMap(raw);
- StringBuilder bldr = new StringBuilder("Settings for ").append(login.toUpperCase()).append(" company:");
- for (Map.Entry<String, Object> setting : settings.entrySet()) {
- bldr.append("\n\t")
- .append(ConfigurationFlags.getByConfig(setting.getKey())).append(": ").append(setting.getValue());
- }
- return bldr.toString();
- }
- @Attachment("Exception log:")
- public static String logFuckup(Throwable fuckup) {
- return new StringBuilder("Failed to fetch settings:\n").append("\t").append(fuckup.getClass().getSimpleName())
- .append(": ").append(fuckup.getMessage()).toString();
- }
- @Override
- public void onTestStart(ITestResult result) {
- if (!hasDriver()) {
- WebDriver driver = null;
- try {
- driver = LocalDriverFactory.createInstance();
- } catch (IOException e) {
- e.printStackTrace();
- }
- TestGlobalsManager.setDriver(driver);
- }
- }
- @Override
- public void onTestSuccess(ITestResult result) {
- TestRailHelper.getTestRail().setTestStatus(result);
- }
- @Override
- public void onTestSkipped(ITestResult result) {
- TestRailHelper.getTestRail().setTestStatus(result);
- }
- @Override
- public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
- TestRailHelper.getTestRail().setTestStatus(result);
- TestGlobalsManager.resetErrors();
- attachScreenshot(result.getName());
- fireRetryTest("The test has been failed (within success percentage) then retried.", result);
- }
- @Override
- public void onStart(ITestContext context) {
- TestRailHelper.getTestRail().createRun();
- createDriver();
- }
- @Override
- public void onFinish(ITestContext context) {
- Iterator<ITestResult> listOfFailedTests = context.getFailedTests().getAllResults().iterator();
- while (listOfFailedTests.hasNext()) {
- ITestResult failedTest = listOfFailedTests.next();
- ITestNGMethod method = failedTest.getMethod();
- if (context.getPassedTests().getResults(method).size() > 0) {
- listOfFailedTests.remove();
- }
- }
- TestGlobalsManager.resetErrors();
- WebDriver driver = getDriver();
- if (driver != null) {
- driver.quit();
- }
- }
- /**
- * Fires Retry test if it allowed by <code>RetryAnalyzer</code>
- * and set 'Pending' status for test result.
- *
- * @param message <code>String</code> message which will thrown like explanation
- * @param result <code>ITestResult</code> containing information about the run test
- */
- protected void fireRetryTest(String message, ITestResult result) {
- if (((IAllureRetryAnalyzer) result.getMethod().getRetryAnalyzer()).retry(result, false)) {
- getLifecycle().fire(new TestCasePendingEvent().withMessage(message));
- getLifecycle().fire(new TestCaseFinishedEvent());
- }
- }
- /**
- * Get current Allure lifecycle
- *
- * @return current Allure lifecycle
- */
- protected Allure getLifecycle() {
- return lifecycle;
- }
- private void createDriver() {
- WebDriver driver = null;
- try {
- driver = LocalDriverFactory.createInstance();
- } catch (IOException e) {
- e.printStackTrace();
- }
- TestGlobalsManager.setDriver(driver);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement