在VSTS发布阶段用SpecRun执行SpecFlow测试时找不到测试程序集
解决VSTS发布阶段中SpecRun找不到测试程序集的问题
我之前帮团队处理过几乎一模一样的场景,这种情况大概率是测试程序集的依赖项打包不全或者发布代理上的路径配置出错导致的,咱们一步步来排查解决:
1. 检查Publish Artefact任务的打包范围
别只打包测试程序集(.dll),一定要把这些关键文件也包含进去:
- 测试项目的
.pdb文件(SpecRun靠它定位测试步骤) SpecRun.runsettings或自定义的.srprofile配置文件- 测试项目依赖的所有NuGet包(比如SpecFlow、SpecRun.Runtime这类核心组件)
- 测试用到的
.feature文件(要确认这些文件在项目里被设置为「复制到输出目录」)
建议先在构建环节加一个Copy Files任务,把测试项目输出目录的全部内容复制到临时文件夹,再用Publish Artefact打包这个临时文件夹,彻底避免遗漏依赖。
2. 确认发布代理上的程序集路径
在发布阶段运行SpecRun命令时,必须指向发布代理下载后的artefact路径,直接用VSTS预定义变量就很稳妥:
- 发布阶段的artefact根路径是
$(System.DefaultWorkingDirectory) - 如果你的artefact名称是
TestAssemblies,完整路径就是$(System.DefaultWorkingDirectory)/TestAssemblies
比如SpecRun的运行命令应该是这样的:
SpecRun.exe run Default.srprofile /baseFolder:$(System.DefaultWorkingDirectory)/TestAssemblies /log:specrun.log
3. 验证SpecRun配置文件的路径
打开你的.srprofile文件,检查<TestAssembly>节点的路径是不是相对路径——绝对不能用硬编码的本地路径(比如C:\Builds\MyTests\bin\Release\MyTests.dll),改成这样才对:
<TestAssembly>MyTests.dll</TestAssembly>
这样在发布代理的artefact路径下才能正确找到程序集。
4. 检查构建环节的artefact内容
构建完成后,去VSTS的构建摘要里下载artefact压缩包,解压后确认所有需要的文件都在里面:测试dll、srprofile配置、依赖包、资源文件一个都不能少。
5. 发布代理上的SpecRun环境配置
要么确保发布代理已经安装了SpecRun命令行工具,要么把SpecRun的相关程序集也打包到artefact里,直接调用本地的SpecRun.exe,比如:
$(System.DefaultWorkingDirectory)/TestAssemblies/SpecRun.exe run Default.srprofile ...
如果是用NuGet管理的SpecRun,也可以在发布阶段加一个NuGet Restore任务,针对测试项目的配置文件还原依赖包。
内容的提问来源于stack exchange,提问作者jessehouwing
相关产品推荐
相关产品推荐

