将 JUnit 报告推送到 Sonarqube

Posted

技术标签:

【中文标题】将 JUnit 报告推送到 Sonarqube【英文标题】:Push JUnit report to Sonar Qube 【发布时间】:2018-10-05 14:02:50 【问题描述】:

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

我们使用 Jest 作为测试运行器,并且我们正在使用 jest-sonar-reporter 创建 Sonar Qube 测试报告。我已将sonar.tests 设置为sonar.tests=spec 指向我们的测试。在 Administration > Web area 下的 Sonar Qube UI 中,我也使用我们的扩展扩展了 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

我们的 sonar-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 配置中遗漏了什么?

【问题讨论】:

您的测试报告似乎包含absolute 文件路径(“/codebuild/...”)这些路径是否确实存在,或者前导斜杠是否有误? 我刚刚检查了生成的 XML 报告,文件路径是绝对的&lt;file path="/codebuild/output/src560066792/src/spec/isml.spec.js"&gt;。这是否意味着我的文件路径应该从spec/isml.spec.js开始。 可能是您的夹杂物干扰了这一点。尝试删除该参数并再次分析 我应该删除或注释掉这个? sonar.inclusions=**/js/**/*.js,**/templates/**/*.isml。问题是我会在 Sonar Qube 中得到一些我不想要的其他文件。 当您使用包含时,您是在说“分析这些文件”,我相信这不包括您的测试。如果您真的想缩小范围,请尝试设置(最好通过 UI)排除。 【参考方案1】:

解决方案:

JUnit 报告中&lt;file path="[value]"&gt; 中的[value] 需要与sonar.tests= 值相关。

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

所以在我的例子中,我使用了 sed 命令并修剪了路径的“绝对”部分。

【讨论】:

以上是关于将 JUnit 报告推送到 Sonarqube的主要内容,如果未能解决你的问题,请参考以下文章

org.junit.ComparisonFailure具有相同的结果

我们可以将sonarqube分析重新/重新上载到服务器吗?

如何将指标直接推送到 Cortex

如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift

从 Databricks 将日志推送到 Log Analytics

将 UITableView 推送到 UITableView