如何在Azure DevOps发布管道中立即重跑失败的测试?
问题:Azure DevOps VSTest@2任务实现失败测试立即重跑(顺序依赖测试场景)
我在Azure DevOps发布管道中使用VSTest@2任务执行基于C# + Selenium + nUnit的自动化测试。当前任务会等所有测试跑完后才重跑失败用例,但我的测试是顺序依赖的——前一个测试生成的数据会被后续测试使用。我需要实现:某个测试失败后立即重跑,在该测试通过或达到最大重跑次数前,不执行后续测试。比如5个测试,测试#2失败时,先反复重跑#2,直到通过或次数用尽,再继续后面的测试。
当前任务已开启重跑失败测试,但仅在全部测试结束后执行,YAML配置如下:
variables: Category: 'Regression' steps: - task: VSTest@2 displayName: 'VsTest - testAssemblies' inputs: testAssemblyVer2: '**/Automation.dll' testFiltercriteria: 'Category=$(Category)' failOnMinTestsNotRun: false rerunFailedTests: true continueOnError: true
解决方案
1. 用nUnit内置特性实现即时重试+顺序执行
nUnit本身支持测试级别的即时重试和执行顺序控制,直接在测试代码中配置即可:
- 给每个需要重试的测试方法添加
Retry特性,指定最大重试次数,测试失败时会立即在本地重试,无需等待所有测试完成。 - 用
Order特性给每个测试指定执行顺序,确保依赖关系的测试按预期顺序运行。
示例代码:
[TestFixture] public class SequentialTests { [Test, Order(1), Retry(3)] // 最多重试3次 public void Test1_CreateTestData() { // 生成测试数据的逻辑,比如创建测试用户、初始化环境 } [Test, Order(2), Retry(3)] public void Test2_UseTestDataFromTest1() { // 依赖Test1生成的数据的逻辑,比如用测试用户登录 } // 后续测试按顺序添加Order和Retry特性即可 }
2. 调整Azure DevOps任务配置
关闭VSTest@2任务自带的全局重试,避免和nUnit的重试机制冲突:
修改后的YAML:
variables: Category: 'Regression' steps: - task: VSTest@2 displayName: 'VsTest - testAssemblies' inputs: testAssemblyVer2: '**/Automation.dll' testFiltercriteria: 'Category=$(Category)' failOnMinTestsNotRun: false rerunFailedTests: false # 关闭任务级别的全局重试,改用nUnit测试级重试 continueOnError: true
3. 关键注意事项
- 禁用测试并行执行:确保nUnit不会并行运行测试,同一测试类中的测试默认按顺序执行,但如果项目开启了并行,需要在
nunit.runsettings中添加配置:<RunSettings> <NUnit> <Parallelize> <ParallelizeTestCollections>False</ParallelizeTestCollections> </Parallelize> </NUnit> </RunSettings> - 保证测试可重复:每次重试前要清理测试环境(比如关闭重启浏览器、重置测试数据),避免前一次失败的状态影响重试结果。
内容的提问来源于stack exchange,提问作者Akashdeep Srivastava
相关产品推荐
相关产品推荐

