Jenkins - 失败:找不到测试报告文件。配置错误?

49

我是"Jenkins"的初学者,并正在跟随这个教程

第六步,我遇到了以下错误。

xcodebuild: error: Scheme JenkinsTest is not currently configured for the test action.

Build step 'Xcode' marked build as failure Recording test results ERROR: Step ‘Publish JUnit test result report’ failed: No test report files were found. Configuration error? Finished: FAILURE

测试报告XML中,我设置了"test-reports/.*xml"

我尝试找到解决办法,也在SO上发现了许多问题像我一样有同样问题的用户,但都没有得到解决方案。

我有些困惑,是".xml"文件由"Jenkins"自动生成还是我们需要先手动添加".xml"文件?

简而言之,基于以上错误,请指导我正确的方向。


“test-reports”目录是否存在(在Jenkins工作区中)?我现在无法测试,但我认为它在我们的系统上有另一个名称。 - shallowThought
@shallowThought - 是的,它存在。 - iPatel
你解决了这个问题吗?我也卡在同样的问题上了。 - rokridi
你找到解决方案了吗?因为我也遇到了同样的问题。我们需要手动创建 .xml 文件还是让 Jenkins 自动创建它? - Rajat jain
关于“未配置测试操作”的错误,请参见此其他问题。如果项目没有正确配置进行测试,则不会生成结果文件。https://dev59.com/Zl0a5IYBdhLWcg3wTHJt - Scriptable
10个回答

43

您还可以启用“allowEmptyResults”选项,这样junit插件在找不到测试结果时就不会抛出异常。

这样无论“test-results”目录是否存在都没有关系。

junit allowEmptyResults: true, testResults: '**/test-results/*.xml'

18

首先确保测试运行后生成junit.xml文件。

Jenkins的工作有时无法查看当前工作区之前的情况。因此,在使用报告之前,最好将其复制回当前工作区。

    cd <path to report>
    cp *.xml $WORKSPACE

现在 Jenkins 应该会获取报告。 注意:配置可能会先出现错误(因为它找不到工作区中的 XML 文件),但在构建后,这个问题应该会消失,而且结果也应该被记录下来。


我正在 AWS Linux 实例上 # junit。 MobaXterm X11 代理:不支持的授权协议。 主线程中的异常:"java.awt.AWTError":无法使用“localhost:11.0”作为 DISPLAY 变量的值连接到 X11 窗口服务器。 - Ashish Karpe
4
我遇到了同样的问题,将xml文件复制到工作区根目录下解决了我的问题。我之前一直在运行"junit <path-to-file>",但这并没有起作用。然而,我不理解为什么这样可以解决问题。您能否更详细地解释一下以下这句话的含义: “Jenkins作业有时无法查看当前工作区域以外的内容,因此最好在使用前将报告复制回当前工作区域。” - gregdferrell

10

我正在使用nosetest(Python)生成xUnit兼容文件,但我遇到了以下问题:

ERROR: No test report files were found. Configuration error?

我之前使用的是junit插件:

junit "test-results-unit.xml"

junit 似乎默认添加了 WORKSPACE 目录,因此仅使用完整的 PATH 文件路径也无法正常工作。我创建了一个符号链接,将得到的文件链接到了 WORKSPACE 目录,使其正常工作:

  sh 'ln -s tests/test-results-unit.xml $WORKSPACE'
  junit "test-results-unit.xml"

我也遇到了同样的错误,尝试了你建议的方法,但没有成功。请问是否还需要做其他更改? - Gaurav Parek
@GauravParek 首先通过运行 lsfind 查找 test-results-unit.xml 文件,然后创建正确路径的符号链接。 - alfredocambera

5

其他答案建议将文件复制到工作区目录中,但对我而言,仅仅改变路径以 '**' 开头似乎解决了问题。

junit '**/test-reports/*.xml'
Jenkins JUnit插件页面上说,您需要“按Ant全局通配符语法指定JUnit XML文件的路径”。我没有深入了解这意味着什么,但是从 "**" 开始的路径足以让它为我工作。

3

感谢 @Acid,这真的帮了我很多。 首先,将模块/构建/测试结果复制到工作空间目录。

cp -r app/build/test-results $WORKSPACE/test-results

然后我使用了通配符路径

**/test-results/**/*.xml

1

这样怎么样:

junit allowEmptyResults: true, testResults: "${WORKSPACE}/test-results/*.xml"

或者只是:

junit "${WORKSPACE}/test-results/*.xml"

1
我正在扫描Checkov,并且以下方法对我有效:
                sh 'checkov -f tfplan.json --framework terraform_plan --soft-fail -o cli -o junitxml --output-file-path results.xml'
                            junit skipPublishingChecks: true, testResults: '**/*.xml'

0

你需要找到测试报告保存在.jenkins工作区的路径:

/Users/<USERNAME/>/.jenkins/workspace/<PROJECT/>/target/surefire-reports/*.xml

要在终端中找到文件夹,请输入以下命令:

.jenkins

那么

open .

0

我遇到了同样的问题,我的测试报告文件名因为 scala 版本升级而改变,

因此我不得不从以下内容进行更改,

junit '/myworkspace/target/myreport.xml'

junit '/myworkspace/target/TEST-myreport.xml'

0

我曾遇到同样的问题,并发现我在我的Jenkins文件中使用了jococo而不是jacoco。

post{
              always{
                junit 'target/surefire-reports/*.xml'
                jacoco execPattern: 'target/jacoco.exec'
                
              }
            }

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