Jenkins JUnit测试结果报告插件显示找不到JUnit XML文件?

20

从Jenkins收到的确切消息是:

No test report files were found. Configuration error?
Build step 'Publish JUnit test result report' changed build result to FAILURE

当配置JUnit测试结果报告插件时,如果将“测试报告XML路径”输入为“/reports/TEST-*.xml”,则在该路径下方会显示以下错误:

'/reports/TEST-*.xml' doesn't match anything: '' exists but not '/reports/TEST-*.xml'

我已经尝试使用完整路径来解决问题,但结果相同。在这两种情况下,路径都应该拾取/reports目录中存在的“TESTS-TestSuites.xml”文件。
我不确定这是插件还是生成的XML文件的问题。我也意识到可能是由于我编写的ant构建脚本运行JUnit测试并生成XML结果文件的问题,因此我在下面包含了其内容以供查看,如果需要更改,则可以进行更改:
<?xml version="1.0" encoding="utf-8"?>
<project name="jenkins-tests" basedir="." default="linux">

<property name="junit.output.dir" value="output"/>
<property name="src.dir" value="src"/>
<property name="lib.dir" value="libs" />
<property name="bin.dir" value="bin" />
<property name="full-compile" value="true" />

<path id="classpath.base"/>

<path id="classpath.test">
    <pathelement location="${bin.dir}" />
    <pathelement location="${src.dir}" />
    <pathelement location="${lib.dir}" />
    <pathelement location="${lib.dir}/junit.jar" />
    <path refid="classpath.base" />
</path>

<target name="clean" description="Clean up build artefacts">
    <delete dir="${basedir}/${junit.output.dir}" />
</target>

<target name="prepare" depends="clean" description="Prepare for build">
    <mkdir dir="${basedir}/${junit.output.dir}" />
    <mkdir dir="${junit.output.dir}/reports"/> 
</target>

<target name="compile" depends="prepare">
    <javac srcdir="${src.dir}" destdir="${bin.dir}" verbose="${full-compile}" includeAntRuntime="false" >
        <classpath refid="classpath.test"/>
    </javac>
</target>

<target name="test" depends="compile">
    <junit printsummary="true" haltonfailure="false">
        <formatter type="xml" usefile="true"/>
        <classpath refid="classpath.test" />
        <batchtest fork="yes" todir="${junit.output.dir}">
            <fileset dir="${src.dir}">
                <include name="*.java"/>
            </fileset>
        </batchtest>
    </junit>
</target>

<target name="test-reports" depends="test">
    <junitreport tofile="TESTS-TestSuites.xml" todir="${junit.output.dir}/reports">
        <fileset dir="${junit.output.dir}">
            <include name="TEST-*.xml" />
        </fileset>
        <report format="frames" todir="${junit.output.dir}/reports" />
    </junitreport>
</target>
</project>

我已经研究这个问题有一段时间了,但是还没有找到任何解决方案,希望能得到帮助。谢谢。


1
你至少运行了一次测试吗?当第一次配置插件时,会出现此错误。 - Jayan
是的,测试运行良好,并且显示构建成功。只有尝试使用插件生成报告时才会导致构建失败。 - Ben
@ Ben:你能通过Jenkins->作业->工作空间->...浏览到TEST*xml文件吗?这将给出实际所需的模式。Shiva Kumar的答案应该是可行的。 - Jayan
@ Jayan: 我现在得到的输出是...测试报告: [junitreport] 正在处理 /var/lib/jenkins/jobs/jenkins-tests/workspace/includes/fuel/app/tests/selenium/JenkinsTests/output/reports/TESTS-TestSuites.xml 到 /tmp/null727956119 [junitreport] 加载样式表 jar:file:/usr/share/ant/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl [junitreport] 转换时间:578毫秒 [junitreport] 删除:/tmp/null7279561192/2 - Ben
构建成功 总时间:2秒 记录测试结果 未找到测试报告文件。配置错误? “发布JUnit测试结果报告”构建步骤将构建结果更改为失败 已完成:失败 - Ben
显示剩余2条评论
2个回答

20

Jenkins在工作目录中查找路径。确保给定的路径正确,或者使用通配符在多个位置查找。尝试使用 **/reports/TEST-*.xml

你确定报告文件夹就在工作目录下面吗?请手动验证测试结果文件是否确实存在于路径中给出的位置。


我已经使用了这条路径,它消除了初始路径错误,但是当运行作业时仍然出现xml未找到的错误。也许报告文件夹放错了位置。目前Jenkins在一个独立的服务器上运行测试。报告文件夹是否必须在Jenkins服务器上,并且ant脚本中的报告指向那里? - Ben
在本地服务器上(而不是Jenkins服务器),我有包含src、bin和libs目录以及ant构建xml文件的基本目录,用于我的JUnit测试。当build.xml文件运行时,它会在这些其他目录旁边创建输出目录(${junit.output.dir}),然后在其中创建报告目录。Jenkins目录完全独立于它们自己的服务器上。我刚刚查看了Jenkins服务器,并且我拥有作业工作区的以下路径:/var/lib/jenkins/jobs/jUnit Test/workspace 那么报告、测试和build.xml应该放在这里吗? - Ben
\Clients\website\versions\ben\includes\fuel\app\tests\selenium\JenkinsTests\output\reports - Ben
这看起来不像是作业运行的位置。您可以通过提供完整路径\ Clients \ website \ versions \ ben \ includes \ fuel \ app \ tests \ selenium \ JenkinsTests \ output \ reports \ TEST- * .xml并在JUnit Report插件中检查吗?您能否告诉我您的src,bine和lib目录是来自SVN还是存在于本地服务器中硬编码的路径中? - Shiva Kumar
完整路径会产生相同的错误,src、bin和libs目录存在于本地服务器中的硬编码路径中。 - Ben

8

我为我的 Android 项目使用了多个 Gradle 产品风味,为 测试报告 XMLs 使用以下路径:

**/build/test-results/**/TEST-*.xml

JUnit plugin


那个路径对我很有帮助,谢谢。它可以工作,但是只适用于JUnit4。我一直在尝试使用不同的路径来使用JUnit5,但没有成功。你知道还有其他可能适用于JUnit5的路径吗?或者有任何其他解决方法...将不胜感激;) - arthur0304
2
@arthur0304 我还没有研究如何获取JUnit5测试结果。因此,我强烈建议您在Stackoverflow上发布您的问题,以便它比您在这里发表的评论获得更多关注。 - JJD

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