Дженкинс Не Выводит Информацию Отчета Junit Из Файла
отчет в формате junit не берется Дженкинсом, в результате чего отчеты не будут перечислены на экране состояния проекта.
подробности
данные отчета в формате junit генерируются платформой тестирования Karma-runner (ранее Testacular). Игнорируемый файл создается в /target/surefire-reports
-- то же место, где создаются отчеты, созданные surefire. Данные отчета выглядят практически так же, как и сгенерированные плагином maven surefire, за исключением того, что его родительский элемент <testsuites>
вместо <testsuite>
-- <testsuite>
- это то, что генерируемые отчеты surefire имеют в качестве родительского элемента файла отчета. Вот фрагмент из отчета в формате junit, созданного karma, с именем TEST-karma.resultsTest.xml
:
Junit-форматированный файл отчета Karma-generated,TEST-karma.resultsTest.xml
<?xml version="1.0"?>
<testsuites>
<testsuite name="PhantomJS 1.9 (Mac)" package="karma.tests" timestamp="2013-04-10T13:32:26" id="0" hostname="jgmbp.local" tests="16" errors="0" failures="0" time="0.069">
<properties>
<property name="browser.fullName" value="Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34"/>
</properties>
<testcase name="successfully cancels a new member" time="0.006" classname="karma.tests PhantomJS 1.9 (Mac).Household Controller"/>
<testcase name="should parse an existing re-eval create date, setting the data in scope" time="0.003" classname="karma.tests PhantomJS 1.9 (Mac).Re-Eval Controller"/>
<system-out><![CDATA[
]]></system-out>
<system-err/>
</testsuite>
</testsuites>
тесты кармы выполняются во время тестовой фазы моей сборки maven. Я пробовал создавать проекты, которые производят только один файл junit-report, а также запуск сборки, чтобы все тесты junit и тесты karma создавали файлы отчетов. Дженкинс всегда подхватывает верные тесты, но никогда-тесты кармы.
Спасибо за любой вклад!
6 ответов
вы можете опубликовать результаты теста кармы в Jenkins даже при создании проекта Maven, если вы одурачите Дженкинса небольшим взломом:запустите плагин Surefire также в модуле Javascript, в котором вы запускаете тесты Karma в.
плагин surefire не найдет тестов JUnit в вашем модуле Javascript, но уведомит Дженкинса, что результаты тестирования Surefire доступны.
Ниже приведен пример pom.xml и фрагменты из Gruntfile.Яш, который запускает тесты кармы и анализ кода JSHint и заставляет Дженкинса публиковать результаты тестов и результаты анализа кода.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx.yyyy</groupId>
<artifactId>zzzzz</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Zzzzz</name>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>generate-resources</phase>
<configuration>
<target>
<exec
dir="${basedir}"
executable="npm"
failonerror="true">
<arg value="install"/>
</exec>
<exec
dir="${basedir}"
executable="bower"
failonerror="true">
<arg value="install"/>
</exec>
<exec
dir="${basedir}"
executable="grunt"
failonerror="true">
<arg value="--no-color"/>
<arg value="build"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>jshint</id>
<phase>test</phase>
<configuration>
<target>
<exec
dir="${basedir}"
executable="grunt"
failonerror="false">
<arg value="--no-color"/>
<arg value="karma:run"/>
</exec>
<exec
dir="${basedir}"
executable="grunt"
failonerror="false">
<arg value="--no-color"/>
<arg value="jshint:jenkins"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<executions>
<!-- This is a hack to get Jenkins to publish Karma test results when running a Maven project: we run 0 surefire tests, so Jenkins publishes the report of the Karma tests. -->
<execution>
<id>dummySureFire</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.12</version>
<executions>
<!-- This is a hack to get Jenkins to publish JSHint results when running a Maven project: we run checkstyle, so Jenkins publishes the report of the JSHint run. -->
<execution>
<id>dummyCheckStyle</id>
<phase>test</phase>
<goals>
<goal>checkstyle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.12.4</version>
</plugin>
</plugins>
</reporting>
</project>
В Gruntfile.js у нас есть следующее. Имя файла вывода должно начинаться с TEST - для его публикации:
karma: {
run: { // produces reports for Jenkins
configFile: 'karma.conf.js',
singleRun: true,
reporters : ['junit', 'coverage'],
junitReporter : {
outputFile: 'target/surefire-reports/TEST-results.xml'
},
...
и для JSHint в Gruntfile.js:
jshint: {
all: [
'Gruntfile.js',
'<%= yeoman.app %>/scripts/{,*/}*.js'
],
options: {
jshintrc: '.jshintrc',
reporter: require('jshint-stylish')
},
jenkins: {
options: {
reporter: 'checkstyle',
reporterOutput: "target/checkstyle-result.xml"
},
src: [
'Gruntfile.js',
'<%= yeoman.app %>/scripts/{,*/}*.js'
]
}
}
в конфигурации задания Дженкинса вам просто нужно проверить поле "опубликовать результаты анализа Checkstyle" в разделе "настройки сборки", чтобы у Дженкинс опубликовать результаты у JSHint. Для публикации результатов тестирования не требуется дополнительная конфигурация задания Jenkins.
наконец-то было время, чтобы понять это, благодаря вкладу Эми и Ваутера.
ключ в том, что я создаю проект maven, и это не будет работать с отображением тестов кармы. Единственный способ отобразить результаты karma-добавить отчет о построении post для тестов Junit. По какой-то причине задания на основе maven не дают возможности добавить отчет junit.
решение заключается в создании задания свободной формы вместо задания maven. Вы можете настроить бесплатно форма задания для создания проекта maven просто отлично. Пока вы добавляете задачу публикации junit на пост Эми выше, все хорошо.
хотя этот вопрос довольно старый:
существует решение, которое также работает с проектом Maven в Jenkins. Проблема в том, что рекордер Дженкинса, записывающий тесты, запускается сразу после цели surefire:test. Поэтому для того, чтобы ваши тесты были подобраны, какой бы плагин вы ни использовали для запуска karma должен работать до test
этап, например,process-test-classes
phase (потому что вы не можете поместить что-то в ту же фазу перед существующим плагином).
1) вы ввели путь к отчету, где Дженкинс должен найти отчет Junit? Это можно сделать в действии Post build - опубликовать отчет о результатах теста JUnit
2) или вы можете использовать Плагин Производительности для передачи результатов Junit. Это снова действие post build. Выберите этот плагин в конфигурации этого задания Jenkins.
добавьте новый отчет-Junit и введите путь к отчету target/surefire-reports/*.xml
(примечание-Я удалил первая косая черта в качестве пути относится к текущей рабочей области).
у меня была такая же проблема. Тот факт, что результаты теста завернуты в один <testsuites/>
тег не проблема. Плагин Maven-проекта Дженкинса-это проблема. Типичный проект maven использует это, потому что это упрощает настройку вашей сборки, мы сделали это. Я вложил карму в помпон.xml, чтобы иметь возможность создавать все сразу, используя maven-exec-plugin
вот так:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>jsunit</id>
<phase>test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<successCodes>
<successCode>0</successCode>
<successCode>1</successCode><!-- on failing test, don't get a build error -->
</successCodes>
<executable>${basedir}/src/test/javascript/test.bat</executable>
<workingDirectory>${basedir}/src/test/javascript</workingDirectory>
</configuration>
</plugin>
плагин maven jenkins действительно отказывается забрать сгенерированный XML. Если вы, однако, настроите " basic" работа Дженкинса вместо конкретного maven2 с помощью плагина будет работать. Добавьте пост-шаг "опубликовать отчеты JUNIT" и используйте target/surefire-reports/*.xml
. В качестве обычного шага сборки вы все равно можете добавить шаг "выполнить задачу maven".
это все еще не идеально, как локальные сборки с использованием mvn test
кажется, игнорируют XML (maven-surefire-plugin
просто генерирует XML и останавливает сборку, если тест JUnit терпит неудачу). Вы можете остановить сборку, если тест javascript завершается неудачно, используя коды успеха в exec-maven-plugin
но сообщение об ошибке все еще не ясно...
Я опоздал в этой игре, но у меня была та же проблема, и я наткнулся на этот летний пост.
во всяком случае, я нашел, на мой взгляд, более изящное решение, используя maven-karma-plugin
. Это позволяет мне продолжать использовать Maven-Проекта задания вместо переключения их на Фристайл Проекта задания в Jenkins.
подробное решение размещено по адресу http://myshittycode.com/2014/10/23/jenkins-getting-karma-generated-test-results-to-appear-in-maven-project-job/ в случае, если кто-то застрянет с этой же проблемой.
спасибо.