如何在VSTS VsTest任务中引用.coverage文件路径?
解决VsTest生成的随机路径.coverage文件引用问题
我完全懂你的困扰——VsTest每次生成的.coverage文件都藏在带随机GUID的目录里,硬编码路径根本行不通。别慌,咱们可以用通配符动态查找结合构建预定义变量来搞定这个问题,下面是具体的实现方案:
方法1:用PowerShell脚本批量处理文件
PowerShell的递归查找功能能轻松定位所有.coverage文件,直接传给ReportGenerator即可。在构建定义里添加一个PowerShell脚本任务,粘贴以下内容:
# 用构建预定义变量定位TestResults根目录,递归匹配所有.coverage文件 $coverageFiles = "$(Build.SourcesDirectory)\TestResults\**\*.coverage" # 调用ReportGenerator生成HTML报告,输出到构建工件目录方便后续下载 & ReportGenerator.exe ` "-reports:$coverageFiles" ` "-targetdir:$(Build.ArtifactStagingDirectory)\CodeCoverageReport" ` "-reporttypes:Html"
关键细节说明:
$(Build.SourcesDirectory):DevOps预定义变量,指向代理服务器上你的源代码根目录**\*.coverage:递归通配符,会匹配TestResults下所有子目录里的.coverage文件$(Build.ArtifactStagingDirectory):预定义变量,用来存放生成的报告,之后可以添加「发布构建工件」任务把这个目录发布出去,方便团队查看
方法2:用Cmd脚本实现(偏好Cmd环境的话)
如果你的代理服务器更适合Cmd脚本,也可以用递归遍历的方式处理:
@echo off :: 递归查找TestResults下所有.coverage文件 for /r "%Build_SourcesDirectory%\TestResults" %%f in (*.coverage) do ( :: 调用ReportGenerator处理每个找到的文件 ReportGenerator.exe "-reports:%%f" "-targetdir:%Build_ArtifactStagingDirectory%\CodeCoverageReport" "-reporttypes:Html" )
额外实用贴士
- 要是有多个测试项目生成多个.coverage文件,ReportGenerator支持直接用通配符批量处理(方法1的写法),它会自动合并所有报告内容
- 如果代理服务器还没装ReportGenerator,可以在脚本开头加一句
dotnet tool install --global dotnet-reportgenerator-globaltool(用.NET工具版本的话),确保工具可用
内容的提问来源于stack exchange,提问作者Chris Olsen
相关产品推荐
相关产品推荐

