将 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
在这个项目中,我有 js
和 web
作为语言。如果我进入 Sonar Qube UI 并在 Measures > Coverage > Tests 下检查此项目,我看不到任何覆盖测试正在导入。所以我的问题是我理解 JUnit 覆盖导入错误还是我的 Sonar Qube 配置中遗漏了什么?
【问题讨论】:
您的测试报告似乎包含absolute 文件路径(“/codebuild/...”)这些路径是否确实存在,或者前导斜杠是否有误? 我刚刚检查了生成的 XML 报告,文件路径是绝对的<file path="/codebuild/output/src560066792/src/spec/isml.spec.js">
。这是否意味着我的文件路径应该从spec/isml.spec.js
开始。
可能是您的夹杂物干扰了这一点。尝试删除该参数并再次分析
我应该删除或注释掉这个? sonar.inclusions=**/js/**/*.js,**/templates/**/*.isml
。问题是我会在 Sonar Qube 中得到一些我不想要的其他文件。
当您使用包含时,您是在说“分析仅这些文件”,我相信这不包括您的测试。如果您真的想缩小范围,请尝试设置(最好通过 UI)排除。
【参考方案1】:
解决方案:
JUnit 报告中<file path="[value]">
中的[value]
需要与sonar.tests=
值相关。
project
├── src
│ └── ...
└── spec
├── isml.spec.js
└── files.spec.js
所以在我的例子中,我使用了 sed 命令并修剪了路径的“绝对”部分。
【讨论】:
以上是关于将 JUnit 报告推送到 Sonarqube的主要内容,如果未能解决你的问题,请参考以下文章
org.junit.ComparisonFailure具有相同的结果
如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift