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

Selenium C#单元测试无法以Parallel模式并行运行问题排查

Selenium C# NUnit测试并行执行不生效修复方案

核心问题排查及修改步骤

1. 修复语法错误

你提供的UT1类并行特性存在语法缺失:
原代码[Parallelizable(ParallelScope.Self)缺少右闭合括号,会导致特性解析失败,并行配置不生效,修改为:

[Parallelizable(ParallelScope.Self)]

2. 配置全局并行规则

NUnit默认未开启全局夹具并行权限,需要在项目中新增AssemblyInfo.cs文件,添加装配级并行配置:

using NUnit.Framework;

// 允许所有测试夹具并行执行
[assembly: Parallelizable(ParallelScope.Fixtures)]
// 配置最大并行线程数,可根据你的测试需求调整,建议不超过CPU核心数的2倍
[assembly: LevelOfParallelism(4)]

3. 调整基类特性位置

你当前将[TestFixture]、[TestFixtureSource]放在基类上,会导致NUnit将所有派生类的测试夹具识别为同一基类的关联实例,默认限制并行。修改方式为:

  • 基类仅保留公共逻辑,移除夹具相关特性,同时补充资源回收逻辑避免驱动残留:
public class CrossBrowser
{
    public IWebDriver driver;
    public string Browsername { get; }

    public CrossBrowser(string browserName)
    {
        Browsername = browserName;
    }

    [SetUp]
    public void LaunchBrowser()
    {
        if (Browsername.ToLower().Contains("chrome"))
        {
            driver = new ChromeDriver();
        }
        else
        {
            driver = new FirefoxDriver();
        }
    }

    [TearDown]
    public void CleanUp()
    {
        driver?.Quit();
        driver?.Dispose();
    }
}
  • 所有派生测试类(UT1、UT2)上添加夹具相关特性:
[TestFixtureSource(typeof(TestDataProvider), nameof(TestDataProvider.BrowsersToRunWith))]
[TestFixture]
[Parallelizable(ParallelScope.Self)]
public class UT1 : CrossBrowser
{
    public UT1(String browserName) : base(browserName)
    {
        Console.WriteLine("Browser is " + browserName);
    }

    [Test]
    public void OpenGoogle()
    {
        driver.Url = "http://google.com";
    }
}

4. 校验测试运行器配置

如果你使用Visual Studio测试资源管理器运行测试,需要确认:

  • 路径:工具 > 选项 > 测试 > 常规 下的「禁用并行测试发现和运行」选项未被勾选
  • 项目已安装最新版的NUnit、NUnit3TestAdapterNuGet包,旧版本适配器不支持并行执行逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:04