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
相关产品推荐
相关产品推荐

