Плагин 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 имеется запрос на извлечение, позволяющий изменять имя класса с помощью пользовательской функции.
Другие вопросы по тегам