切换到私有规模设置代理后,代码覆盖率报告不再正确

问题描述

我面临一个奇怪的问题。最近,我们从Microsoft托管的管道代理迁移到了私有规模集代理。一切似乎正常,所有构建仍在运行,但是我们为请求请求配置了代码覆盖率,切换之后的覆盖率计算似乎有些问题,覆盖率太低了。

现在,我检查了代码覆盖率报告。并且它显示了相同dll的重复条目(屏幕快照中的每个红色块是相同dll):

enter image description here

如您所见,它显示 SOME dll的重复条目,两个条目后面都有一些不可能的日期,而且覆盖范围也有很大不同。 Visual Studio代码覆盖率政策似乎是从覆盖率最低的条目中读取覆盖率的。

我茫然不知所措。

  • 当我完全保留构建Yaml时,除了更改代理程序池并将测试的执行切换到Microsoft托管代理程序之外,覆盖范围再次正确。
  • 我检查了托管代理和私有比例集之间的日志,它们是相同的(除了一些生成的Guid和时间戳)。没有dll的额外实例在加载的日志中显示为双。
  • 比例尺设置实例上的日期/时间正确

我怀疑其他版本的某些残留物可能会导致此问题,因为我们的比例尺设定座席不会在每次构建后重置自身,但即使使用了新的座席,也会出现此问题。

编辑:此外,该问题似乎与合并多个测试任务的覆盖率结果有关。我们有2个作业运行带有代码覆盖率的单元测试。当这两个作业都在Microsoft托管映像上运行时,它将起作用。当它们中的任何一个在比例集上运行时,即使两个作业中只有一个包含对显示为两倍的装配体的测试,也会发生覆盖问题。

Edit2 :所以情节变厚了。这个问题肯定与合并两组代码覆盖率结果有关。我有2个测试作业,它们在不同的组件上运行测试,但是第二组测试也命中了第一组测试的库中的某些方法。在按比例缩放设置上运行构建时,azure devops似乎无法将两者合并到相同的coverage运行中。我认为它以某种方式认为程序集是2个不同的程序集。可能是什么原因造成的?

Edit3 :我比较了未合并的程序集的两个版本,这些程序集似乎是相同的。因此,问题似乎在代码覆盖率文件本身中无处不在。

编辑4: 构建和测试任务如下所示:

- task: VSBuild@1
  displayName: "Build solution Web"
  inputs:
    solution: Web.sln
    msbuildArgs: "/p:DeployWebsite=true /p:DeployAddinsWebsite=true /p:PublishProfile=$(ApiPublishProfile) /warnaserror /p:CIBuild=true"
    platform: "${{ parameters.Buildplatform }}"
    configuration: "${{ parameters.BuildConfiguration }}"
    clean: false
    maximumcpuCount: true
    msbuildArchitecture: x64
- task: VSTest@2
  displayName: "Run test assemblies"
  inputs:
    testAssemblyVer2: '**\bin\**\*.Tests.dll'
    codeCoverageEnabled: true
    diagnosticsEnabled: true
    runSettingsFile: '$(Build.sourcesDirectory)\testing\codecoverage.runsettings'
    testRunTitle: "WebTests"
    searchFolder: "$(System.DefaultWorkingDirectory)"

我还检查了用于测试的版本。托管代理和比例集都使用相同的vstest.console.exe版本(16.7.0)

有人知道这里发生了什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)