unit-testing - 部分忽略了测试执行
问题描述
我多年来一直在使用声纳,没有任何问题,非常高兴……直到上周我遇到了一个非常奇怪的问题,我完全不知道发生了什么。
我正在使用 GitLab 的管道执行一些单独的单元测试和功能测试,然后合并 Sonar 的 2 个lcov和 2 个xunit报告,最后给我 1 个lcov文件,列出单元测试和功能测试所涵盖的代码,和 1 个包含所有已执行测试的xunit文件。
然后我将这 2 个文件传递给我们的 SonarQube 8.6 - 带有声纳扫描仪 4.5.0.2216 的开发人员版。
这是我正在使用的声纳扫描仪参数:
sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=$CI_BUILD_ID
sonar.sources=src
sonar.tests=test
sonar.javascript.lcov.reportPaths=test-results/lcov-merged.info
sonar.testExecutionReportPaths=test-results/xunit-merged.xml
这是合并单元报告和功能报告后最终的 xunit-merged.xml 文件的内容。
<testExecutions version="1">
<file path="test\unit\index.test.ts">
<testCase name=": Save" duration="4"/>
<testCase name="Get functional logs: with empty query" duration="3"/>
<testCase name="Class: ManagementFormService: Function: get (GET handler)" duration="4"/>
<testCase name="Class: ManagementFormService: Function: update (POST handler)" duration="4"/>
<testCase name="Module: Export management form service, controller and externally injected config service" duration="29"/>
<testCase name="Class: ManagementFormService: Function: createForm" duration="1"/>
<testCase name="Class: ManagementFormService: Function: save (success) and createForm" duration="1"/>
<testCase name="Get functionals logs by origin: From valid queries and request" duration="2"/>
<testCase name="Get functionals logs by origin: From valid queries but no request" duration="4"/>
<testCase name="Get functionals logs by origin: From valid queries and request" duration="1"/>
<testCase name="Get functionals logs by origin: From valid queries but no request" duration="1"/>
<testCase name="Get functionals logs by origin: From valid queries and request" duration="0"/>
<testCase name="Get functionals logs by origin: From valid queries but no request" duration="1"/>
<testCase name="Module version: Cache ON, Repository ON, Amqp ON: From valid UUID and request" duration="1"/>
<testCase name="Module version: Cache ON, Repository ON, Amqp ON: From valid UUID but no request" duration="0"/>
<testCase name="Module version: Cache OFF, Repository ON, Amqp ON: From valid UUID and request" duration="0"/>
<testCase name="Module version: Cache OFF, Repository ON, Amqp ON: From valid UUID but no request" duration="0"/>
<testCase name="Module version: Cache OFF, Repository OFF, Amqp ON: From valid UUID and request" duration="1"/>
<testCase name="Module version: Cache OFF, Repository OFF, Amqp ON: From valid UUID but no request" duration="1"/>
<testCase name="Module version: Cache OFF, Repository OFF, Amqp OFF: From valid UUID and request" duration="0"/>
<testCase name="Module version: Cache OFF, Repository OFF, Amqp OFF: From valid UUID but no request" duration="1"/>
</file>
<file path="test\functional\index.test.ts">
<testCase name="Boot: Boot and log booting status" duration="163"/>
</file>
</testExecutions>
它包含 22 个测试,一个测试文件 ( ) 执行的 21 个单元测试test\unit\index.test.ts
和另一个测试文件 ( ) 执行的 1 个功能测试test\functional\index.test.ts
。
这里的问题是 Sonar 只计算 21 个单元测试并忽略最后一个(正如您在捕获中看到的那样)。
最后一个功能测试在 xml 中明确存在时被忽略。
以完全相同的方式,减少了代码覆盖率。单元测试覆盖的所有源代码都标记为已覆盖,但功能测试覆盖的源代码标记为未覆盖,而lconv-merged.info
明确表明该文件已正确测试。
正如您在此捕获中看到的,文件的第 45、46 和 49 行src/technical/technical.controller.rest.ts
被标记为未覆盖。
虽然lconv-merged.info
报告清楚地表明这些线路都被覆盖了。
如果 Sonar 说没有测试也没有覆盖率,我会处理报告文件中格式错误的内容。但在这里,Sonar 就像在挑选它想要展示的东西,我不知道为什么。
所有源代码都在同一个src
源路径中,可由声纳扫描仪访问,并且可在声纳中浏览(这表明它们已被正确分析)。
我一直在寻找一个漫长的一周,为什么在获取其余文件时会忽略这两个报告的一部分,但我仍然完全不知道。
有人能帮我吗 ?
解决方案
终于发现问题了...我很笨。
我在 GitLab 中为合并请求触发管道,但在 Sonar 中我正在寻找分支,而不是合并请求。
正确配置后一切正常,列出了功能测试并且覆盖范围是正确的。
推荐阅读
- angular - 单击多个对象时显示描述
- python - 通过 Flask 和请求从一个 python 服务器向另一个服务器发送一个双精度数组
- typescript - 地图和记录有什么区别
- javascript - Bootstrap & Javascript - 卡片图标没有切换
- android - adb shell setprop log.tag.SOMETAG VERBOSE,如何获取 SOMETAG?
- c# - 无法使用 c# 从活动目录中获取用户属性详细信息
- java - Cardview 中的另一种颜色是绑定颜色?
- javascript - 尽管所有数据都正确打印,但应用程序崩溃并返回 null [ExpressJS]
- jekyll - Jekyll 集合过滤器
- javascript - 在脚本中检测并设置 id 和表单名称