VSTest@2的testAssemblyVer2如何配置DLL按指定顺序执行?
VSTest@2 自定义测试DLL执行顺序配置方法
问题原因
VSTest@2任务的testAssemblyVer2参数本质是测试程序集的匹配规则输入,支持通配符匹配,底层收集到所有匹配的程序集后会默认按文件路径做字母序排序,即使设置runInParallel: false关闭并行执行,也不会保留参数中书写的DLL顺序,因此会出现预期顺序和实际执行顺序不一致的问题。
可行配置方案
方案1:拆分多任务按顺序执行(兼容性最好)
流水线中任务默认按从上到下的顺序串行执行,将需要按序运行的DLL拆分到独立的VSTest@2任务中,即可100%保证执行顺序符合预期,该方案不依赖VSTest版本,无兼容问题。
示例配置:
# 执行顺序第1位:TestA.dll - task: VSTest@2 inputs: testSelector: 'testAssemblies' testAssemblyVer2: '$(ArtifcatsDir)\Tests\TestA.dll' runInParallel: false # 执行顺序第2位:TestE.dll - task: VSTest@2 inputs: testSelector: 'testAssemblies' testAssemblyVer2: '$(ArtifcatsDir)\Tests\TestE.dll' runInParallel: false # 执行顺序第3位:TestB.dll - task: VSTest@2 inputs: testSelector: 'testAssemblies' testAssemblyVer2: '$(ArtifcatsDir)\Tests\TestB.dll' runInParallel: false
如果DLL数量较多,可以通过流水线模板循环生成有序任务,减少重复配置工作量。
方案2:通过.runsettings文件指定执行顺序
如果不想拆分多个VSTest任务,可以使用VSTest的运行配置文件指定程序集加载顺序,该方案要求VSTest平台版本≥17.0。
- 在仓库根目录新增
ordered.runsettings配置文件,按需要的执行顺序列出所有测试DLL路径:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <MSTest> <TestAssemblyOrder> <Assembly>$(ArtifcatsDir)\Tests\TestA.dll</Assembly> <Assembly>$(ArtifcatsDir)\Tests\TestE.dll</Assembly> <Assembly>$(ArtifcatsDir)\Tests\TestB.dll</Assembly> </TestAssemblyOrder> </MSTest> </RunSettings>
- 在原有VSTest@2任务中增加配置,关联该runsettings文件:
task: VSTest@2 inputs: testSelector: 'testAssemblies' testAssemblyVer2: | $(ArtifcatsDir)\Tests\TestA.dll $(ArtifcatsDir)\Tests\TestE.dll $(ArtifcatsDir)\Tests\TestB.dll runInParallel: false runSettingsFile: '$(Build.SourcesDirectory)\ordered.runsettings'
注意点
runInParallel: false仅控制测试用例不并行调度,不具备保留程序集输入顺序的作用,无法通过该参数实现顺序控制- 不建议通过给DLL文件名加数字前缀适配默认字母排序的方式实现顺序控制,后续新增、调整测试DLL时维护成本极高,容易出现顺序错乱
内容的提问来源于stack exchange,提问作者Bushan
相关产品推荐
相关产品推荐

