Плагин junit не показывает результаты всех тестов в jenkins
У меня есть набор тестов, где некоторые из файлов XML создаются после запуска модульных тестов (junit). И есть некоторые другие тесты автоматизации транспортировщика, которые используют jasmine junit xml reporter ( https://github.com/larrymyers/jasmine-reporters) для создания XML-файла. Я создаю оба набора файлов XML в одном каталоге в моей работе jenkins, я использовал плагин junit (Опубликовать отчет о результатах теста JUnit) для публикации отчета. Итак, теперь, после завершения задания, 9 xmls генерируются из модульных тестов и 2 XML генерируются jasmine-reporter, так как, как указано ниже, из моего вывода на консоль задания jenkins, он может распознать, что существует 11 xml файлов из шаблон, который я указал в конфигурации работы.
22:49:52 [xUnit] [INFO] - [JUnit] - 11 test report file(s) were found with the
pattern '**/tests/target/failsafe-reports/junitreports/*.xml' relative to
'/home/jenkins/workspace/projectName' for the testing framework
'JUnit'.
Но проблема в том, что когда я щелкаю ссылку "Результат теста" в пользовательском интерфейсе задания jenkins, он показывает только все тесты, связанные с xml, сгенерированными модульным тестом, и не показывает никаких результатов, связанных с XML, сгенерированным из отчета жасмина. Нужна помощь, чтобы узнать, почему Дженкинс не показывает результаты теста, связанные с жасмином XML.
Ниже приведен пример XML-кода, сгенерированного модульным тестом (который jenkins показывает в пользовательском интерфейсе, когда нажимается ссылка на результат теста).
<!--
Generated by org.testng.reporters.JUnitReportReporter
-->
<testsuite hostname="someHostName"
name="packageName.Class1" tests="22" failures="0" timestamp="16
Apr 2018 05:47:59 GMT" time="69.663" errors="0">
<testcase name="test1" time="2.488"
classname="packageName.Class1"/>
<testcase name="test2" time="5.808"
classname="packageName.Class1"/>
</testsuite>
Ниже приведен пример XML, сгенерированный jasmine junit xml reporter (результат этого не отображается jenkins в его пользовательском интерфейсе при нажатии ссылки на результат теста)
<testsuites>
<testsuite name="chromeTestItemDetailsPage" timestamp="2018-04-16T05:48:43"
hostname="localhost" time="29.357" errors="0" tests="22" skipped="0"
disabled="0" failures="0">
<testcase classname="chromeTestItemDetailsPage" name="ItemTitleDisplayed"
time="0.895"/>
<testcase classname="chromeTestItemDetailsPage" name="ItemPriceDisplayed"
time="0.966"/>
</testsuite>
</testsuites>
1 ответ
Я думаю, что вы столкнулись с проблемой Дженкинса здесь.
Дженкинс использует атрибуты classname
так же как testname
из <testcase>
в отчете JUnit XML для классификации результатов теста в пользовательском интерфейсе. Кроме того, Дженкинс ожидает classname
быть составленным из имени пакета, за которым следует одна точка, а затем имя класса:
<testcase classname="packagename.classname" name="testname">
Если точка отсутствует, Дженкинс принимает пакет "root". Если присутствует несколько точек, только последняя точка распознается как разделитель. Смотрите этот вопрос для лучшего объяснения.
Если вы посмотрите на свои XML-отчеты выше, вы можете заметить, что XML модульных тестов указывает имя пакета в classname
атрибут, в то время как XML репортера жасмина нет. Я думаю, что пропущенное имя пакета является причиной, почему результаты теста не отображаются. По всей видимости, Jenkins использует пакет "root" только в том случае, если пакетов вообще нет. Если существует хотя бы один тестовый набор с именем пакета, все остальные тестовые наборы без пакета "теряются".
Есть два возможных решения:
- Сообщите об ошибке для Jenkins, так как вышеуказанное поведение является неожиданным
- Изменить репортер жасмина, чтобы построить
classname
шаблонаpackage.class
, По адресу https://github.com/larrymyers/jasmine-reporters/pull/186/files имеется запрос на извлечение, позволяющий изменять имя класса с помощью пользовательской функции.