TFS构建中启用代码覆盖率‘Profile’选项的方法咨询
在Azure TFS构建中用VSPerfCmd实现代码覆盖率检测
核心思路
放弃依赖MSBuild的Profile参数(该选项仅在Visual Studio IDE内生效,MSBuild默认不会触发VSInstr插桩),改为在TFS构建流程中手动调用VSInstr插桩目标程序集,再通过VSPerfCmd收集覆盖率数据,最后生成报告。
具体步骤
1. 构建后执行VSInstr插桩
在TFS构建的MSBuild步骤之后添加一个命令行任务,调用VS2019的VSInstr工具对目标项目的程序集进行插桩:
:: 替换为VS2019 Enterprise的实际安装路径,注意x86/x64架构匹配 set VSInstrPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Performance Tools\x64\VSInstr.exe :: 对目标程序集执行覆盖率插桩,替换为你的程序集路径 "%VSInstrPath%" /coverage "$(Build.BinariesDirectory)\YourProject\bin\Release\YourProject.dll"
- 确保构建代理已安装VS2019 Enterprise版(性能工具仅Enterprise包含)
- 若目标程序集是x86架构,需切换到
x86目录下的VSInstr.exe
2. 启动VSPerfCmd覆盖率监控
在测试执行步骤之前添加命令行任务,启动覆盖率收集:
:: 替换为VS2019的VSPerfCmd路径 set VSPerfCmdPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Performance Tools\x64\VSPerfCmd.exe :: 启动覆盖率收集,指定输出文件到构建工件目录 "%VSPerfCmdPath%" /start:coverage /output:"$(Build.ArtifactStagingDirectory)\coverage.vsp"
3. 执行测试任务
正常运行你的测试步骤(如VSTest任务),确保测试逻辑会调用到插桩后的程序集。
4. 停止收集并生成覆盖率报告
测试完成后,添加两个命令行任务:
停止覆盖率监控
"%VSPerfCmdPath%" /shutdown
生成可读报告
:: 替换为VS2019的VSPerfReport路径 set VSPerfReportPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Team Tools\Performance Tools\x64\VSPerfReport.exe :: 生成XML格式报告(也可替换为/html生成网页报告) "%VSPerfReportPath%" "$(Build.ArtifactStagingDirectory)\coverage.vsp" /output:"$(Build.ArtifactStagingDirectory)\coverage" /xml
5. 发布覆盖率报告
添加发布构建工件任务,将$(Build.ArtifactStagingDirectory)\coverage.*发布为构建工件,方便后续查看。
关键注意事项
- 插桩后的程序集必须替换构建输出中的原程序集,否则测试会调用未插桩的版本
- 确保构建代理有足够权限访问VS工具目录和构建输出路径
- 若测试目标是Web应用,需将插桩后的程序集部署到测试环境后再执行测试
内容的提问来源于stack exchange,提问作者dfensdev
相关产品推荐
相关产品推荐

