Поделитесь опытом формата отчетов о прохождении автотестов на Selenium WebDriver + Java

Всем привет!

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

Тесты пишутся на Selenium WebDriver + Java, запускаются с помощью TestNg+Ant+Jenkins. Подключен Logback, логи пишуться. Для меня проблем с понятием результатов выполнения тестов не возникает, а менеджмент хочет читабельные/понятные/красивые отчеты о прохождении тестов.

Может есть возможность составления отчетов (кроме логирования) в Jenkins?

Слышал о Thucydides много хорошего, поделитесь опытом использования? Эффективностью получения результата о прохождении тестов?

И вообще, было бы интересно услышать о формате предоставления отчетов автотестов?

 

Thucydides делает действительно красивые отчеты, но в выше описанной связке вы его не примените. Он пока не поддерживает TestNG. Помимо перехода на Junit, вам также понадобится переход на Maven, ибо реализация репортов зашита в maven-thucydides-plugin. Сам разработчик признается, что Ant миграция будет крайне проблематичной. Если у вас уже есть готовый фреймворк и множество написанных тестов, то смысла перехода на Thucydides только ради отчетов - не вижу. Слишком трудозатратно все это будет.

Как делать репорты в данной связке? Для начала, реализовать методы снятия скриншотов. Затем, привязать их к TestNG- или кастомным лисенерам. TestNG html-репорт мне не очень понравился. Как-то кривовато выглядит. ReportNG смотрится куда более симпатичнее и не менее содержательней (ошибки кликабельны). К тому же, достаточно просто реализовать встраивание скриншотов.

Конечно придется немного повозиться с реализацией кастомных листенеров под логику ваших репортов + настроить ant скрипт соответствующим образом. Исходя из возможных объемов репорта, смысла отсылать его на мейл нет никакого (ограничения почтовых клиентов). Исходя из того, что Jenkins может крутиться на удаленной машине с ограниченными правами доступа, пытаться открывать репорт, запуская браузер, во-первых, тоже не имеет смысла, во-вторых, будет весьма проблематично, ввиду специфики взаимодействия ant + jenkins. Плагина ReportNG для Jenkins тоже нет, посему, придется подумать, как шарить репорты для тима и кастомеров. Расскажу, как я это делал. У нас есть стейджинг-сервера, которые расчитаны на показ заказкику. Они видны внешнему миру по линку. Собственно, после формирования репорта, я средствами ant производил копирование репорта по сети на стейджинг, а затем отсылал внешний линк на репорт в письме-отчете от Jenkins. В результате, после окончания тестов все заинтересованные лица получали письмо с линкой на расшаренный внешнему миру красивенький репорт со скриншотами.

отчетность почему-то стоит краеугольным камнем для всех автоматизаторов

а фактически тут ничего сложного нет

я полностью соглашусь с ArtOfLife, но хотел бы еще добавить

вам сначала надо понять, что хочет видеть кто-то там

а самый простой способ - это просто пойти и спросить, какую информацию нужно выводить

проще всего это сделать в дженикс, подключаете там отображение junit отчетов и смотрите их в jenkins, без каких либо затрат

если уже что-то там не устраивает, тех кто смотрит на эти отчеты,  а там есть тренд график и состояние passed, failed, fixed, regression и т.д.

то тогда можно уже выяснить, что нужно еще и брать ReportNG (он мне тоже нравиться) и делать всякие там махинации

технические детали опускаю, пока что :)

Большое спасибо за советы! Результат отчетов ReportNG - то что надо)
Но попробовав ReportNG, не смог получить результат, и приблизительно такой, какой демонстрировал ArtOfLife выше на скриншотах.


Сделал следующее, согласно http://reportng.uncommons.org/

1.Добавил доп.параметры в build.xml:

    <testng classpathref="test-path"
            outputdir="${test-results.dir}"
            haltonfailure="true"
            useDefaultListeners="false"
            listeners="org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter">
      <xmlfileset dir="." includes="testng.xml"/>
      <sysproperty key="org.uncommons.reportng.title" value="My Test Report"/>
    </testng>

2.Добавил jar-файлы в проект:

The reportng-1.1.3.jar and velocity-dep-1.4.jar files must be included in the classpath used to run the tests.

 

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

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

После попытки подключить ReportNG, начали валиться тесты при запуске с консоли (ant run):

C:\Users\klimchukivan\Desktop\myTest\tmp\PageFactoryProject>ant run
Buildfile: C:\Users\klimchukivan\Desktop\myTest\tmp\PageFactoryProject\build.xml

build-subprojects:

init:

build-project:
     [echo] PageFactoryProject: C:\Users\klimchukivan\Desktop\myTest\tmp\PageFac
toryProject\build.xml

build:

run:
   [testng] Exception in thread "main" org.testng.TestNGException:
   [testng] Cannot load class from file: org.uncommons.reportng.HTMLReporter
   [testng]     at org.testng.internal.ClassHelper.fileToClass(ClassHelper.java:
522)
   [testng]     at org.testng.TestNG.configure(TestNG.java:1426)
   [testng]     at org.testng.TestNG.privateMain(TestNG.java:1328)
   [testng]     at org.testng.TestNG.main(TestNG.java:1307)

BUILD FAILED
C:\Users\klimchukivan\Desktop\myTest\tmp\PageFactoryProject\build.xml:60: The te
sts failed.

Total time: 1 second

При запуске с Eclipse+TestNG - тест проходит!
 

На самом деле тут есть свои подводные камни. ReportNG можно подключить двумя способами: 1) с помощью ant; 2) через аннотацию @Listeners для вашего базового класса.

Кусок ant-скрипта будет выглядеть приблизительно так:

<!-- run TestNG suite using ReportNG options -->
<target name="runTests" depends="...">
        <testng haltOnfailure="false" outputdir="${tests.results.dir}"
                workingDir="${workspace.dir}"
                useDefaultListeners="false">
 
            <sysproperty key="org.uncommons.reportng.escape-output" value="false" />
            <sysproperty key="org.uncommons.reportng.title" value="${report.title}"/>
 
            <!-- using custom stylesheet
            <sysproperty key="org.uncommons.reportng.stylesheet" value="${reportNGcss}" />
            -->
 
            <classpath>
                <path refid="testsClassPath"/>
                <pathelement location="${tests.bin.dir}"/>
            </classpath>
 
            <xmlfileset dir="${workspace.dir}/src/suites" />
 
            <!-- using custom reporter instead of @Listeners
            <reporter classname="tests.java.selenium.utils.ScreenshotHTMLReporter"/>
            -->
        </testng>
</target>
Тут как раз закоментирована строка с подключением кастомного репортер-класса, который наследует HTMLReporter и имплементирует ITestListener. Несколько интересных реализаций кастомных репортеров с возможностью вставки скриншотов можете посмотреть тут
 

Спасибо за ответы!
Хотел еще разобраться с плагином Testng-plugin.

Добавил плагин в Jenkins, прописал в строке TestNG XML report pattern: путь к файлу testng-results.xml.

При запуске тесты проходят успешно, но в TestNG Results Trend данные отсутствуют.

В консоли после завершения теста пишет следующее:

   TestNG Reports Processing: START
   Looking for TestNG results report in workspace using pattern: C:\Users\klimchukivan\.jenkins\
     jobs\Testng-pluginTest\workspace\test-output\testng-results.xml
   Did not find any matching files.
   Finished: SUCCESS

Решил проблему (решение нашел на форуме):

БЫЛО:

TestNG XML report pattern: C:\Users\klimchukivan\.jenkins\ jobs\Testng-pluginTest\workspace\test-output\testng-results.xml

ДОЛЖНО БЫТЬ:

TestNG XML report pattern: **/test-output/testng-results.xml

Вот и решение: ссылка не должна быть абсолютной:)

привет!

подключил джарники в класспасе The reportng-1.1.3.jar and velocity-dep-1.4.jar
настроил build.xml,
создаются папка html и индекс в нем
запускается, но ожидаемых репортов я не увидел
вот логи

testng] Total tests run: 2, Failures: 2, Skips: 0
   [testng] ===============================================
   [testng] 
   [testng] Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/Module
   [testng] at java.lang.Class.getDeclaredMethods0(Native Method)
   [testng] at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
   [testng] at java.lang.Class.privateGetPublicMethods(Class.java:2562)
   [testng] at java.lang.Class.getMethods(Class.java:1427)
   [testng] at org.apache.velocity.util.introspection.ClassMap.getAccessibleMethods(ClassMap.java:258)
   [testng] at org.apache.velocity.util.introspection.ClassMap.populateMethodCache(ClassMap.java:151)
   [testng] at org.apache.velocity.util.introspection.ClassMap.<init>(ClassMap.java:64)
   [testng] at org.apache.velocity.util.introspection.IntrospectorBase.createClassMap(IntrospectorBase.java:126)
   [testng] at org.apache.velocity.util.introspection.IntrospectorBase.getMethod(IntrospectorBase.java:112)
   [testng] at org.apache.velocity.util.introspection.Introspector.getMethod(Introspector.java:100)
   [testng] at org.apache.velocity.runtime.parser.node.PropertyExecutor.discover(PropertyExecutor.java:65)
   [testng] at org.apache.velocity.runtime.parser.node.PropertyExecutor.<init>(PropertyExecutor.java:39)
   [testng] at org.apache.velocity.util.introspection.UberspectImpl.getPropertyGet(UberspectImpl.java:156)
   [testng] at org.apache.velocity.runtime.parser.node.ASTIdentifier.execute(ASTIdentifier.java:125)
   [testng] at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:175)
   [testng] at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:327)
   [testng] at org.apache.velocity.runtime.parser.node.ASTAddNode.value(ASTAddNode.java:66)
   [testng] at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:51)
   [testng] at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:95)
   [testng] at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:55)
   [testng] at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:166)
   [testng] at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:114)
   [testng] at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:55)
   [testng] at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:166)
   [testng] at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:114)
   [testng] at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230)
   [testng] at org.apache.velocity.Template.merge(Template.java:256)
   [testng] at org.apache.velocity.app.Velocity.mergeTemplate(Velocity.java:449)
   [testng] at org.uncommons.reportng.AbstractReporter.generateFile(AbstractReporter.java:108)
   [testng] at org.uncommons.reportng.HTMLReporter.createOverview(HTMLReporter.java:148)
   [testng] at org.uncommons.reportng.HTMLReporter.generateReport(HTMLReporter.java:111)
   [testng] at org.testng.TestNG.generateReports(TestNG.java:1089)
   [testng] at org.testng.TestNG.run(TestNG.java:1048)
   [testng] at org.testng.TestNG.privateMain(TestNG.java:1338)
   [testng] at org.testng.TestNG.main(TestNG.java:1307)
   [testng] Caused by: java.lang.ClassNotFoundException: com.google.inject.Module
   [testng] at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
   [testng] at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
   [testng] at java.security.AccessController.doPrivileged(Native Method)
   [testng] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
   [testng] at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
   [testng] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
   [testng] at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
   [testng] ... 35 more
   [testng] The tests failed.

 

в чем проблема 
может кто знает

очень похоже на вот эту проблему https://github.com/dwdyer/reportng/issues/28

Нужно еще guice подключать.