将 JUnit 报告推送到 Sonarqube

Push JUnit report to Sonar Qube

我们正在使用某种自定义模板引擎,其中包含正常的 HTML 语法和一些自定义标记,除此之外,它还可以包含某种在服务器端执行的脚本。我们编写了一些单元测试来证明这些自定义模板的内容,并在使用了一些被禁止的脚本元素时引发错误。

我们正在使用 Jest 作为测试运行器,我们正在使用 jest-sonar-reporter 创建 Sonar Qube 测试报告。我已将 sonar.tests 设置为指向我们的测试 sonar.tests=spec。在 Sonar Qube UI Administration > Web area 下,我也用我们的扩展扩展了 sonar.web.file.suffixes。当我们在部署管道中启动 Sonar Qube 时,我在日志中看到

07:08:49.291 INFO: Sensor Generic Test Executions Report
07:08:49.291 WARN: Property 'sonar.genericcoverage.unitTestReportPaths' is deprecated. Please use 'sonar.testExecutionReportPaths' instead.
07:08:49.291 INFO: Parsing /codebuild/output/src915641274/src/reports/test-report.xml
07:08:49.491 INFO: Imported test execution data for 0 files
07:08:49.491 INFO: Test execution data ignored for 2 unknown files, including:
/codebuild/output/src943613774/src/spec/isml.spec.js
/codebuild/output/src943613774/src/spec/files.spec.js

我们的声纳-project.properties看起来像这样:

sonar.host.url=<host_url>
sonar.login=<token>

sonar.projectKey=<project_key>
sonar.projectName=<project_name>

sonar.sources=cartridge,spec

sonar.verbose=true

sonar.inclusions=**/js/**/*.js,**/templates/**/*.isml

sonar.tests=spec
sonar.testExecutionReportPaths=reports/test-report.xml

在这个项目中,我有 jsweb 作为语言。如果我进入 Sonar Qube UI 并在 Measures > Coverage > Tests 下检查这个项目,我没有看到任何导入的覆盖测试。所以我的问题是我是否理解了 JUnit 覆盖率导入错误,或者我在我的 Sonar Qube 配置中遗漏了什么?

解决方案:

<file path="[value]"> 处 JUnit 报告中的 [value] 需要与 sonar.tests= 值相关。

project
├── src
│   └── ...
└── spec
    ├── isml.spec.js
    └── files.spec.js

所以在我的例子中,我使用了 sed 命令并修剪了路径的 "absolute" 部分。