Пользовательские отчеты с TestNG

Пользовательские отчеты с TestNG

1. обзор

В этой статье мы обсудим создание пользовательских журналов и отчетов с использованием TestNG.

TestNG предоставляет собственную функцию создания отчетов - создание отчетов в любом формате HTML / XML. Если тесты запускаются с использованиемmaven-surefire-plugin,, отчет примет форму по умолчанию, определенную плагином. Помимо встроенных отчетов, он предоставляет механизм для простой настройки зарегистрированной информации и сгенерированных отчетов.

Если вы хотите начать с основ TestNG, ознакомьтесь сthis article.

2. Пользовательское ведение журнала

Прежде чем реализовывать настраиваемое ведение журнала, давайте посмотрим на журналы по умолчанию, выполнив командуmvn test:

Tests run: 11, Failures: 1, Errors: 0, Skipped: 0,
  Time elapsed: 1.21 sec <<< FAILURE!
- in TestSuite
whenCalledFromSuite_thanOK(example.com.RegistrationTest)
Time elapsed: 0.01 sec  <<< FAILURE!
java.lang.AssertionError: Test Failed due to some reason
    at example.com.RegistrationTest.whenCalledFromSuite_thanOK(
      RegistrationTest.java:15)


Results :

Failed tests:
  RegistrationTest.whenCalledFromSuite_thanOK:15
    Test Failed due to some reason

Tests run: 11, Failures: 1, Errors: 0, Skipped: 0

[ERROR] There are test failures.

Эти журналы не дают нам никакой информации о порядке выполнения или о том, когда определенный тест был начат / завершен и т. Д.

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

Simply put, we can either implement the org.testng.ITestListener interface for logging or the org.testng.IReporter interface for reporting. Эти реализованные классы получают уведомления о таких событиях, как начало, конец, сбой и т. д. тестов и комплектов.

Давайте продолжим и реализуем простое настраиваемое ведение журнала:

public class CustomisedListener implements ITestListener {

    // ...
    @Override
    public void onFinish(ITestContext testContext) {
        LOGGER.info("PASSED TEST CASES");
        testContext.getPassedTests().getAllResults()
          .forEach(result -> {LOGGER.info(result.getName());});

        LOGGER.info("FAILED TEST CASES");
        testContext.getFailedTests().getAllResults()
          .forEach(result -> {LOGGER.info(result.getName());});

        LOGGER.info(
          "Test completed on: " + testContext.getEndDate().toString());
    }

    //...
}

Обратите внимание, как мы переопределили методonFinish(), который будет вызываться после завершения всех тестов и всех конфигураций. Точно так же мы можем переопределить другие методы, такие какonTestStart(), onTestFailure() и т.д. (и найти подробности об этих других методахhere).

Теперь давайте включим этого слушателя в конфигурацию XML:


    
        
    
    
        
        
        
            
        
    

После выполнения прослушиватель будет вызываться для каждого события и записывать информацию, как мы реализовали. Это может быть полезно для отладки нашего теста.

Выходные журналы:

...
INFO CUSTOM_LOGS - Started testing on: Sat Apr 22 14:39:43 IST 2017
INFO CUSTOM_LOGS - Testing:
  givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Tested:
  givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect Time taken:6 ms
INFO CUSTOM_LOGS - Testing:
  givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Failed :
  givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - PASSED TEST CASES
INFO CUSTOM_LOGS - givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - FAILED TEST CASES
INFO CUSTOM_LOGS -
  givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Test completed on: Sat Apr 22 14:39:43 IST 2017
...

Пользовательские журналы дают нам недостающую информацию в журналах по умолчанию.

3. Пользовательские отчеты

Когда мы запускаем тесты с помощью плагина, он генерирует отчеты в форматах HTML / XML в каталогеtarget/surefire-reports:

image

Если мы хотим запустить конкретный набор тестов с использованием XML-файла TestNG, нам нужно указать его в теге surefire-pluginconfiguration:


    
        
            src\test\resources\parametrized_testng.xml
        
    

После настраиваемого журнала давайте попробуем создать несколько настраиваемых отчетов, в которых мы реализуем интерфейсorg.testng.IReporter и переопределяем методgenerateReport():

public void generateReport(
  List xmlSuites,
  List suites, String outputDirectory) {

    String reportTemplate = initReportTemplate();

    String body = suites
      .stream()
      .flatMap(suiteToResults())
      .collect(Collectors.joining());

    String report
      = reportTemplate.replaceFirst("", String.format("%s", body));
    saveReportTemplate(outputDirectory, report);
}

Переопределенный метод принимает три аргумента:

  • xmlSuite – содержит список всех наборов, упомянутых в файле XML.

  • suites – объект списка, содержащий всю информацию о выполнении теста

  • outputDirectory – путь к каталогу, в котором создаются отчеты

Мы использовали методinitReportTemplate() для загрузки шаблона HTML, функциюsuiteToResults(), которая вызывает функциюresultsToRow() для обработки внутренних компонентов создания отчета:

private Function> suiteToResults() {
    return suite -> suite.getResults().entrySet()
      .stream()
      .flatMap(resultsToRows(suite));
}

private Function,
  Stream> resultsToRows(ISuite suite) {
    return e -> {
        ITestContext testContext = e.getValue().getTestContext();

        Set failedTests
          = testContext.getFailedTests().getAllResults();
        Set passedTests
          = testContext.getPassedTests().getAllResults();
        Set skippedTests
          = testContext.getSkippedTests().getAllResults();

        String suiteName = suite.getName();

        return Stream
          .of(failedTests, passedTests, skippedTests)
          .flatMap(results ->
            generateReportRows(e.getKey(), suiteName, results).stream());
    };
}

иsaveReportTemplate() для сохранения полного результата.

Включите репортера в файл конфигурации XML:


    
        
    
    
        
        
            
        
    

Вот результаты наших отчетов:

image

По сравнению с верным отчетом HTML по умолчанию этот отчет дает четкую и четкую картину результата в одной таблице. Что удобнее и проще для чтения.

4. Заключение

В этом кратком руководстве мы узнали, как создавать отчеты о тестировании с помощью плагина Surefire Maven. Мы также изучили настройку журналов и создание настраиваемых отчетов с помощью TestNG. Для получения более подробной информации о TestNG, например, о том, как писать тесты, наборы и т. Д. обратитесь к нашему вводному

Для получения дополнительных сведений о TestNG, например, о том, как писать тестовые примеры, наборы, обязательно начните с нашего вводногоarticle.

Как всегда, реализацию сниппетов можно найтиover on GitHub.