问题描述
我面临一个奇怪的问题。最近,我们从Microsoft托管的管道代理迁移到了私有规模集代理。一切似乎正常,所有构建仍在运行,但是我们为请求请求配置了代码覆盖率,切换之后的覆盖率计算似乎有些问题,覆盖率太低了。
现在,我检查了代码覆盖率报告。并且它显示了相同dll的重复条目(屏幕快照中的每个红色块是相同dll):
如您所见,它显示 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 (将#修改为@)