Jenkins没有收到junit格式的报告,导致报告没有列在项目的状态屏幕中。
junit格式的报告数据由名为Karma-runner(以前称为Testacular)的测试框架生成。被忽略的文件在/target/surefire-reports
中创建 - 与创建surefire生成的报告的位置相同。报告数据看起来几乎与maven surefire插件生成的报告数据相同,只是其父元素为<testsuites>
而不是<testsuite>
- <testsuite>
是surefire生成的报告作为父项报告文件的元素。这是来自业力生成的junit格式报告的片段,名为TEST-karma.resultsTest.xml
:
Junit格式的Karma生成的报告文件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>
Karma测试在我的maven构建的测试阶段运行。我已经尝试创建只生成这个junit-report文件以及运行构建的项目,以便所有junit测试和karma测试生成报告文件。詹金斯总是会接受万无一失的测试,但绝不会进行业力测试。
感谢您的任何意见!
答案 0 :(得分:9)
你可以在Jenkins 中发布你的Karma测试结果,即使在构建Maven项目时也是如此,如果你用一点hack来欺骗Jenkins:在你运行的Javascript模块中运行Surefire插件Karma测试。
surefire插件在您的Javascript模块中找不到任何JUnit测试,但它会通知Jenkins Surefire测试结果可用。
下面是一个示例pom.xml,以及来自Gruntfile.js的片段,它运行Karma测试和JSHint代码分析,并使Jenkins发布测试结果和代码分析结果。
<?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'
},
...
对于Gruntfile.js中的JSHint:
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'
]
}
}
在Jenkins作业配置中,您只需检查“构建设置”部分中的“发布Checkstyle分析结果”框,以便让Jenkins发布JSHint结果。发布测试结果不需要额外的Jenkins作业配置。
答案 1 :(得分:3)
感谢amey和Wouter的投入,终于有时间弄明白了。
关键是我正在建立一个maven项目,这对于显示业力测试无效。显示业力结果的唯一方法是为Junit测试添加后期构建报告。出于某种原因,基于maven的作业不允许您添加junit报告。
解决方案是创建一个自由格式作业而不是一个专家作业。您可以配置自由格式作业以正确构建maven项目。只要你按照上面的帖子添加发布junit任务,一切都很好。
答案 2 :(得分:2)
虽然这个问题已经很久了:
有一个解决方案适用于Jenkins的Maven项目。问题是记录测试的Jenkins记录器直接在确定之后运行:测试目标。因此,为了让你的测试得到提升,你用来运行业力的插件必须在test
阶段之前运行,例如在process-test-classes
阶段(因为你不能在现有插件之前将某些东西置于同一阶段)。
答案 3 :(得分:1)
1)您是否输入了Jenkins应该找到Junit报告的报告路径?这可以在Post构建操作 - 发布JUnit测试结果报告
中完成2)或者你可以使用Performance Plugin来传递你的Junit结果。 它再次是一个后期构建动作。在该Jenkins作业的配置中选择该插件。
添加新报告 - Junit并输入报告target/surefire-reports/*.xml
的路径(注意 - 我删除了第一个斜杠,因为路径是相对于当前工作区的。)
答案 4 :(得分:1)
我遇到了同样的问题。测试结果包含在单个<testsuites/>
标记中的事实不是问题。 Jenkins的maven项目插件就是问题所在。典型的maven项目使用了这个,因为它使配置构建更容易,我们这样做了。我在我的pom.xml中嵌入了Karma,以便能够使用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。但是,如果您使用该插件配置“基本”jenkins作业而不是maven2特定作业,则它将起作用。添加后续步骤,“发布JUNIT报告”并使用target/surefire-reports/*.xml
。作为正常构建步骤,您仍然可以添加“执行maven任务”步骤。
它仍然不完美,因为使用mvn test
的本地构建似乎忽略了XML(maven-surefire-plugin
只是生成XML并在JUnit测试失败时停止构建)。如果javascript测试失败,您可以使用exec-maven-plugin
中的成功代码停止构建,但错误消息仍不明确...
答案 5 :(得分:0)
我在这场比赛中已经迟到了,但是我遇到了同样的问题,我偶然发现了这个一年之久的帖子。
无论如何,在我看来,通过利用maven-karma-plugin
,我找到了更优雅的解决方案。这允许我继续使用 Maven Project 作业,而不是将它们切换到Jenkins中的 Freestyle Project 作业。
详细的解决方案发布在http://myshittycode.com/2014/10/23/jenkins-getting-karma-generated-test-results-to-appear-in-maven-project-job/,万一有人遇到同样的问题。
感谢。