Лучшая репортинг тулза для сборки Maven+WebDriver+TestNG

Всем привет,

Не секрет что в зависимости от того насколько понятен и удобный репорт зависит скорость определения качества продукта.

На даный момент я использую ReportNG для того чтобы генерить свои репорты. Использую её, т.к вижу следущие прeимущества:

  • возможность настройки дизайна через CSS

  • легкость репортов (занимает мало места, представление репортов довольно понятное)

  • возможность подключения через Listener в Eclipse IDE, Maven

На даный момент встретился с вопросом - как я могу выводить линк к скриншоту, если тесткейс фейланулся - перед StackTrace еррором?

Чтобы решить эту проблему я создал свой Listener, в котором переписал TestNG метод onTestFailure(), проблема в том что описание не выводится в тесткейс лог, а выводится в главный “Log Output”.

Ниже привожу описание кода:

public class MyListener extends TestListenerAdapter{

@Override
public void onTestFailure(ITestResult tr){
  String path = System.getProperty("user.dir")+"/mvn_report/logs/test_screen_"+General.getDateStampSimple();
  String screenPath = path + ".png";
 
  General.getPageScreenShot(screenPath);
  General.sendComments("Screenshot saved at "+screenPath);
 
  Reporter.setCurrentTestResult(null);
  }

}

Также хотелось бы также узнать какой репортинг тулзой пользуетесь Вы, и какие у нее плюсы\минусы.

Спасибо.

Самые лучшие отчеты -- в Силктесте ::)

Самые лучшие отчеты – в Силктесте ::slight_smile:

Да, Дмитрий, Вы правы, там можно делать merge, чего тут отнюдь не хватает.

Я нашел решение к своей задачке.

public class MyListener extends TestListenerAdapter {

@Override
public void onTestFailure(ITestResult tr) {
  String reportFolder = System.getProperty("user.dir")
    + "/target/surefire-reports/html/";
 
  String screenshotFolderName = "screenshot/";
  String screenshotFullFolder = reportFolder + screenshotFolderName;
  String screenshotName = tr.getMethod()+ "_" + General.getDateStampSimple() + ".png";
 
  String screenshotLinkFolder = screenshotFolderName+screenshotName; // For HTML report
  String screenshotPath = screenshotFullFolder + screenshotName; //For system

  General.getPageScreenShot(screenshotPath);
  Reporter.setCurrentTestResult(tr);
   General.sendComments("<a href='"+screenshotLinkFolder+"'><img src='"+screenshotLinkFolder+"' width='200' height='150' alt='Click on image to enlarge'>");
}

}

Также, что самое главное, нужно включить саппорт HTML тэгов (по дефолту выключены для ReportNG).

Так как я использую Maven, ниже приведу кучочек с pom.xml:

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.5</version>
            <configuration>
        <systemPropertyVariables>
            <org.uncommons.reportng.escape-output>false</org.uncommons.reportng.escape-output>
        </systemPropertyVariables>
            </configuration>
    </plugin>

Спасибо мне :slight_smile:

 Самые лучшие отчеты -- в Силктесте ::)

Начиная с какой версии?

Я помню, что раньше в нем были логи в ужасном бинарном формате и для своих нужд приходилось писать свой логгер.

Или речь о каких-то других отчетах?

 

Опередил :) Тоже использую ReportNG и точно так же решал данную проблему

Возможно, Вы могли бы мне подсказать как перевести секунды в репорте в минуты и часы? Есть ли такой конфиг?

Насколько сильно вы улучшали возможности своих репортов ReportNG?

Привет всем)

Пытаюсь настрить ReportNG но почему то не выходит, тесты запускается но не генерируется отчет(

Вот как прописано в помке

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.3</version>
                <configuration>
                    <systemPropertyVariables>
                        <properties>
                            <property>
                                <name>usedefaultlisteners</name>
                                <value>false</value>
                            </property>
                            <property>
                                <name>listener</name>
                                <value>org.uncommons.reportng.HTMLReporter, org.uncommons.reportng.JUnitXMLReporter</value>
                            </property>
                        <property>
                            <name>outputDir</name>
                            <value>target/surefire-reports/html</value>
                        </property>
                    </properties>
                    <workingDirectory>target/surefire-reports/html/</workingDirectory>
                        <browserType>${browserType}</browserType>
                        <serverSite>${serverSite}</serverSite>
                        <saucelabsLogin>${saucelabsLogin}</saucelabsLogin>
                        <saucelabsApiKey>${saucelabsApiKey}</saucelabsApiKey>
                        <org.uncommons.reportng.escape-output>false</org.uncommons.reportng.escape-output>
                    </systemPropertyVariables>
                    <suiteXmlFiles>
                        <suiteXmlFile>${basedir}/src/test/conf/suites/${suite}</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>

можете подсказать чего не хватает??

<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>

лишнее

С мейвен не работаю. Могу показать, как это делаю при помощи анта.

    <!-- Run TestNG suite -->
    <target name="runTests" depends="compileTests, prepareForRunning">
        <testng haltOnfailure="false"
                      outputdir="${tests.results.folder}"
                      workingDir="${root.folder}"
                      useDefaultListeners="false" >
 
            <sysproperty key="org.uncommons.reportng.escape-output" value="false" />
            <sysproperty key="org.uncommons.reportng.title" value="${report.title}"/>
 
            <classpath>
                <path refid="libs.path.ref"/>
                <pathelement location="${bin.folder}"/>
            </classpath>
 
            <xmlfileset file="${tests.folder}/src/suites/login.xml" />
        </testng>
    </target>
Кастомный листенер явно нигде не указан, ибо он подключается к Base классу при помощи аннотации @Listeners.
Возвращаясь к мейвену, возможно вам не хватает guice и velocity депенденсис.

Почему лишнее? Если дефолтные листенеры не отключить, отчеты создадутся и от testng, и от reportng.

это единственная рабочая связка. все остальные с багами. В мавене доступен только reportNG1.1.2, хотя последняя версия 1.1.3.

Использую reportng 1.1.3 + testng 6.8 - никаких проблем.

Возможно, это проблема данной версии testng. На данный момент последней является 6.8. С момента 6.1 изменений и баг фиксов было произведено достаточно много.

Лично у меня без дефолтовых листенеров reportNG1.1.2+testNG6.1.1 не генерирует отчет

Настроил норм работает) а не подскажете как сменить папку для генерации оттчета? а то у меня в target/surfire-report/html всегда ложит отчет

                        <property>
                            <name>outputDir</name>
                            <value>target/surefire-reports/html</value>
                        </property>

Не помогает. Директория не меняется.

http://maven.apache.org/surefire/maven-surefire-report-plugin/examples/report-custom-location.html

<project>
  [...]
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.14</version>
        <configuration>
          <outputDirectory>${basedir}/target/newsite</outputDirectory>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <outputDirectory>${basedir}/target/newsite</outputDirectory>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  [...]
</project>

Данный пример не рабочий или относится к старой версии плагина maven-surefire-plugin.

Нагуглил решение самостоятельно, может быть кому-то понадобится. Правильное имя конфига reportsDirectory а не outputDirectory, работает с версией 2.9:


</configuration>
<reportsDirectory> ${project.build.directory}/myreports </reportsDirectory>
</configuration>

Привет!

А можно ли сменить директории только для  ReportNG отчета?? Пример приведенныйе выше полностью сохраняеет surefire-reports в другую папку