Экстренный отчет Выпуск Параллельное тестирование - PullRequest
0 голосов
/ 15 октября 2018

У меня есть следующий код сообщения:

public class Reporting {
    private ExtentHtmlReporter extentHtmlReporter;

    private static ThreadLocal<ExtentReports> extentReports = new ThreadLocal<>();
    private static ThreadLocal<ExtentTest> extentTest = new ThreadLocal<>();

    public synchronized ExtentTest createInstanceReport(String testCaseName) {
        System.out.println(extentReports.get());

        new File(Constants.userDir + "/Reports/").mkdirs();

        // To generate report with name
        extentHtmlReporter = new ExtentHtmlReporter(
                Constants.userDir + "/Reports/" +
                        "ExecutionReport_" + new SimpleDateFormat(
                        Constants.date).format(new Date()) + ".html");

        // Setting Document Title
        extentHtmlReporter.config().setDocumentTitle("Demo");
        // Setting Report Name
        extentHtmlReporter.config().setReportName("Demo Automation");
        // Setting Theme
        extentHtmlReporter.config().setTheme(Theme.STANDARD);
        // Setting Chart location
        extentHtmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
        // Setting Chart visibility
        extentHtmlReporter.config().setChartVisibilityOnOpen(false);
        // Setting Time stamp
        extentHtmlReporter.config().setTimeStampFormat("yyyy-MM-dd HH:mm:ss");
        // Setting append exist as true
        extentHtmlReporter.setAppendExisting(true);
        ExtentReports extentReports = new ExtentReports();
        extentReports.attachReporter(extentHtmlReporter);

        // Setting system info
        extentReports.setSystemInfo("Name",
                BaseTest.prop.getProperty(Constants.testerName));
        extentReports.setSystemInfo("Environment",
                BaseTest.prop.getProperty(Constants.environment));
        extentReports.setSystemInfo("Browser",
                BaseTest.prop.getProperty(Constants.browser));
        Reporting.extentReports.set(extentReports); // Instead of using here extentReport thread like this, Can anyone suggest to use it directly

        // Add test case name in report
        ExtentTest extentTest = Reporting.extentTest.get();
        extentTest = Reporting.extentReports.get().createTest(testCaseName);
        Reporting.extentTest.set(extentTest);

        // Assigning categories
        extentTest.assignCategory(MultiFunction.getProp()
                .getProperty(Constants.browser));

        System.out.println(Reporting.extentReports.get());
        System.out.println(Reporting.extentTest.get());

        return extentTest;
    }

    public synchronized ExtentTest getExtentTest() {
        return extentTest.get();
    }

    public synchronized ExtentReports getInstanceReport() {
        return extentReports.get();
    }

    public synchronized void remove() {
        extentReports.remove();
        extentTest.remove();
    }
}

Я пробовал параллельное тестирование с использованием TestNG (и в будущем мне придется использовать решетку и соус Selenium).Я выполнить 2 теста , затем только один тест результат теста добавлен в отчет.

Я выделилextentTest, extentReporter и WebDriver экземпляры, использующие threadPool.

Пробовал ниже с extentHtmlReporter экземпляром:

1) Tried to make it static(no luck)  
2) Tried to make it local (the same behaviour, getting only 1 test case result)
3) Tried as a non-static global variable ( no luck)

CouldВы предлагаете решить эту проблему?

Обратите внимание: создается только один отчет.Но когда я пытался запустить параллельные тестовые случаи в режиме отладки, отчеты генерировались для обоих тестовых случаев.Я думаю, потому что один тестовый пример преодолевает убийство некоторого экземпляра (при работе в режиме без отладки)

Кроме того, я хочу изменить следующее место в моем коде:

Для extentRpeortЯ использую:

Reporting.extentReports.set (stretReports);

Чтобы добавить extentReport экземпляр в мою extentReport тему.
Вместо того, чтобы добавлять подобное, я хочу использовать его напрямую, чтобы уменьшить строку кода.

Ответы [ 5 ]

0 голосов
/ 01 сентября 2019

Я несколько раз использовал отчеты об объемах, но потом нашел хороший SDK от TestProject платформы автоматизации.Это бесплатно, поэтому я бы порекомендовал его всем, кто устал от всех этих настроек с отчетами.Вот как это выглядит

 reporter.step("Outbound date selected", selectedMonth.equals(months[monthFromIndex]), TakeScreenshotConditionType.Always);

и снимок экрана с отчетом о шагах

Результаты

0 голосов
/ 20 августа 2019

Я уже использую приведенный ниже код в моей платформе. Вам нужно написать набор строк в прослушивателях TestNG с помощью метода onTestStart (), некоторые примеры кода вставлены ниже.

public void onStart(ITestContext context) {
    System.out.println("*** Test Suite " + context.getName() + " started ***");
}

public void onFinish(ITestContext context) {
    System.out.println(("*** Test Suite " + context.getName() + " ending ***"));
    ExtentTestManager.endTest();
    ExtentManager.getInstance().flush();
}

public void onTestStart(ITestResult result) {
    System.out.println(("*** Running test method " + result.getMethod().getMethodName() + "..."));
    ExtentTestManager.startTest(result.getMethod().getMethodName());
}

public void onTestSuccess(ITestResult result) {
    System.out.println("*** Executed " + result.getMethod().getMethodName() + " test successfully...");
}

public void onTestFailure(ITestResult result) {
    System.out.println("*** Test execution " + result.getMethod().getMethodName() + " failed...");
    /*WebDriver driver = (WebDriver) result.getTestContext().getAttribute("driver"); // accessing driver here
    try {
        String screenShot = ExtentManager.captureScreenShot(driver);
        ExtentTestManager.getTest().addScreenCaptureFromPath(screenShot);
    } catch (IOException ex) {
    }
    ExtentTestManager.getTest().log(Status.FAIL, "Test Failed");
    ExtentTestManager.getTest().fail(result.getThrowable());
    driver.quit();*/
}

public void onTestSkipped(ITestResult result) {
    System.out.println("*** Test " + result.getMethod().getMethodName() + " skipped...");
    ExtentTestManager.getTest().log(Status.SKIP, "Test Skipped");
}

public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
    System.out.println("*** Test failed but within percentage % " + result.getMethod().getMethodName());
}

Также вы ссылаетесьссылка ниже для получения дополнительной информации.https://www.youtube.com/watch?v=8Gi6smxpU8g&list=PLUeDIlio4THEKL1t1tLBsyB6nsWAJMXOp&index=42

0 голосов
/ 15 октября 2018

Если я правильно понимаю, вы должны сгенерировать отчет из всех выполненных TestNG случаев.

Однако из кода, которым вы поделились, очень хорошо видно, что у вас будут некоторые проблемы с ним,Вы делаете несколько критических ошибок, и результат очевиден:

  • Для создания отчетов с TestNG Я предложу получить информацию о выполнении теста из Слушатель TestNG .Что-то вроде:

    public final class TestNGListener extends TestListenerAdapter implements IInvokedMethodListener, ISuiteListener {
    
    @Override
    public void onStart(ITestContext context) {
        Logger.info(buildMessage(Logger.PREFIX_TEST_STARTED, context.getName()));
    }
    
    @Override
    public void onFinish(ITestContext context) {
        Logger.info(buildMessage(Logger.PREFIX_TEST_FINISHED, context.getName()));
    }
    
    @Override
    public void onTestStart(ITestResult result) {
        Logger.info(buildMessage(Logger.PREFIX_METHOD_STARTED, getMethodName(result)));
    }
    
    @Override
    public void onTestSuccess(ITestResult result) {
        Logger.info(buildMessage(Logger.PREFIX_METHOD_SUCCESS, getMethodName(result)));
        processTestResult(result);
    }
    
    @Override
    public void onTestFailure(ITestResult result) {
        Logger.info(buildMessage(Logger.PREFIX_METHOD_FAILED, getMethodName(result)));
    }
    
  • Вы не можете делать все одним способом!Вы нарушили Принцип единой ответственности .Ваш createInstanceReport() выполняет все задания (устанавливает детали отчета, устанавливает системную информацию, прикрепляет выполненный тестовый пример к отчету) в одном месте.Вы должны перепроектировать эту логику для некоторых логических отдельных операций.После изменения вашей проблемы со следующей строкой:

Reporting.extentReports.set (stretReports)

Может успешно исчезнуть.

  • Вы должны рассмотреть случай, почему вам нужно использовать именно Extent, Reports Version 3. TestNG имеет протоколы испытаний из коробки.Они бедны, но представлены из коробки.Если вы хотите просто немного его улучшить, вы можете использовать ReportNG поверх TestNG.

Настроить довольно просто: Настройка ReportNG с TestNG для отчетов HTML .

Не поддерживается, но делает отчеты TestNG действительно приятнымии понятно.

В любом случае, я предлагаю использовать TestNGListener для получения информации о выполнении тестовых случаев.И читайте больше о хорошей практике программирования.

0 голосов
/ 16 октября 2018

Проблема была связана со сбросом экземпляра отчета об экстентах.Я использовал ThreadLocal для хранения экземпляра отчета экстента и сбрасывал неправильный экземпляр.

0 голосов
/ 15 октября 2018

Работа с прослушивателем TestNG / jUnit (или другой используемой средой выполнения), вот хороший пример, как это сделать.Не ставьте все в один класс.

https://www.swtestacademy.com/extent-reports-version-3-reporting-testng/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...