You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright结合Specflow与NUnit:仅部分测试执行并行

xUnit 实现部分测试并行、部分测试非并行的解决方案

你遇到的问题大概率是对ParallelScope.Fixtures的作用和NonParallelizable的层级使用理解有偏差,以下是具体的解决方法:

基础配置(大部分并行,部分串行)

  1. 保留全局的并行配置:

    [assembly: Parallelizable(ParallelScope.Fixtures)]
    

    这个配置允许不同测试夹具(Fixture)之间的测试并行执行,是实现大部分测试并行的基础。

  2. 给需要串行执行的测试类或方法添加[NonParallelizable]特性:

    • 整个类的测试都串行:
      [NonParallelizable]
      public class SerialTestClass
      {
          [Fact]
          public void SerialTest1()
          {
              // 这里的测试会单独串行执行
          }
      
          [Fact]
          public void SerialTest2()
          {
              // 同一类内的测试也会按顺序执行
          }
      }
      
    • 单个测试方法串行:
      public class MixedTestClass
      {
          [Fact]
          public void ParallelTest()
          {
              // 这个测试会和其他并行测试一起执行
          }
      
          [Fact]
          [NonParallelizable]
          public void SerialTest()
          {
              // 仅这个方法会串行执行
          }
      }
      

反向配置(大部分串行,指定组并行)

如果你的需求是默认所有测试串行,仅某一组测试并行,可以这么设置:

  1. 全局关闭并行:
    [assembly: Parallelizable(ParallelScope.None)]
    
  2. 给需要并行的测试类或方法标记[Parallelizable(ParallelScope.Self)]:
    [Parallelizable(ParallelScope.Self)]
    public class ParallelOnlyTestClass
    {
        [Fact]
        public void ParallelTestA()
        { /* ... */ }
    
        [Fact]
        public void ParallelTestB()
        { /* ... */ }
    }
    

注意事项

  • 确保你的xUnit版本在2.4.0及以上,旧版本存在NonParallelizable特性不生效的已知问题。
  • 如果测试依赖了共享集合Fixture(ICollectionFixture),要确认该集合没有被标记为并行,否则可能干扰非并行测试的执行逻辑。

内容的提问来源于stack exchange,提问作者Coldzin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:08