在Jenkins Maven任务中显示自定义测试结果

11
我刚刚在现有的Maven POM中添加了一些Python单元测试,但是当Jenkins运行构建时,似乎无法让它报告测试结果。 我正在使用exec-maven-plugin在“test”阶段从Maven运行nose测试。测试从Jenkins作业成功运行,并生成一个xUnit兼容的测试报告到target/surefire-reports/TEST-nosetests.xml,但Jenkins没有捕获到结果。有趣的是,在执行测试套件之前,Maven还报告没有运行任何测试:
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- exec-maven-plugin:1.1.1:exec (nosetests) @ server ---
[INFO] ................
[INFO] ----------------------------------------------------------------------
[INFO] Ran 16 tests in 194.799s
[INFO] 
[INFO] OK
[INFO] Registering compile source root /Volumes/Data/workspace/myProject/target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

这是Jenkins无法看到结果的问题,还是Maven没有将我的测试套件视为实际测试的问题?

我已经晚了将近9年,但如果有人在Java世界中遇到“没有测试可运行”的问题,这可能是由于测试类在测试的开头或结尾没有单词Test。 至少这是其中一个原因,当您尝试从Maven运行时,可以看到此日志。 另一个原因可能是未将测试标记为@Test(但在这种情况下,您将无法从IDE本身运行)。 因此,这不太可能发生。 所以希望如果有人因此错误(使用java和maven),则可能会对他们有用。 - Pramod Yadav
5个回答

20

我通过在Jenkins中使用"自由风格软件项目"而不是"maven2/3"项目来解决了这个问题。

新建项目

构建下,选择添加构建步骤并配置项目为调用顶层Maven目标。我正在使用test目标。

调用顶层Maven目标

最后,在后置构建操作中选择添加后置构建操作,选择发布JUnit测试结果报告并将其指向测试的xUnit输出。出于某种原因,此选项对于Maven 2/3作业不可用。

发布JUnit测试结果报告


3
我认为这与JENKINS-9980 bug有关。https://issues.jenkins-ci.org/browse/JENKINS-9980 - Jmini

4

bpanulla的回答基础上,如果你的测试在项目的多个子目录中,则可以在“Test report XMLs”字段中使用通配符,例如:**/target/surefire-reports/*.xml


2
如果你使用更模块化的Jenkins设置,使用自由项目将无法正确构建子模块。如果生成报告执行ID的maven插件为e2eTests,那么请在您的pom.xml中添加以下片段,Jenkins Maven插件会处理其余部分!
<properties>
    <jenkins.e2eTests.reportsDirectory>target/protractor-reports</jenkins.e2eTests.reportsDirectory>
</properties>

请查看https://wiki.jenkins-ci.org/display/JENKINS/Building+a+maven2+project了解如何构建maven2项目。

1
尝试添加Maven编译器插件后再试。
<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <executions>
                <execution>
                    <id>default-testCompile</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <encoding>ISO-8859-1</encoding>
                <source>1.8</source>
                <target>1.8</target>
                <useIncrementalCompilation>false</useIncrementalCompilation>
                <testSource>1.8</testSource>
                <testTarget>1.8</testTarget>
            </configuration>
        </plugin>

-1

正如您在测试运行输出中所看到的,Maven没有将这些测试识别为测试。此外,要在Jenkins中查看结果,您需要检查是否可以创建符合JUnit标准的输出结果文件(我假设是可以的),这些文件可以被Jenkins读取和显示。


1
Nose可以生成兼容的输出,正如我在问题中所述。问题是我无法让Maven看到输出并将其报告给Jenkins。我的答案展示了如何绕过Maven直接让Jenkins看到报告。 - bpanulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接