NUnit 3中能否并行运行TestCase?并行执行异常排查
问题分析与解决方案
你的问题核心在于测试实例的Driver共享以及NUnit并行执行的全局配置缺失,导致看似开了多个浏览器,但实际测试逻辑还是复用同一个Driver实例,且并行未真正启用。以下是具体修复步骤:
1. 确保Driver为实例字段(非静态)
检查你的BaseTests基类,如果driver是静态字段,所有测试用例会共享同一个浏览器实例,这是最常见的问题。修改基类中的Driver定义:
// BaseTests 中的定义,确保是非静态的实例字段 protected IWebDriver driver;
这样每个TestCase对应的测试实例都会创建独立的Driver,不会互相干扰。
2. 添加TearDown销毁Driver
每个测试结束后必须关闭浏览器并释放资源,否则会残留无效进程,也可能导致后续测试异常:
[TearDown] public void AfterEach() { // 先退出浏览器,再释放资源 driver?.Quit(); driver?.Dispose(); }
3. 配置NUnit全局并行设置
仅靠[Parallelizable]标记不够,需要在项目中添加nunit.runsettings文件启用并行执行:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <NUnit> <Parallelize> <Workers>8</Workers> <!-- 根据你的CPU核心数调整,比如8核就设8 --> <Scope>All</Scope> <!-- 允许测试方法级别的并行 --> </Parallelize> </NUnit> </RunSettings>
添加后,在测试运行时选择使用这个配置文件(比如在Visual Studio的测试设置中指定)。
4. 优化Parallelizable标记位置
将并行标记移到TestFixture级别,确保整个测试类下的所有TestCase都能并行执行:
[TestFixture] [Parallelizable(ParallelScope.Children)] public class AuthorisationTests : BaseTests { [Test] [TestCase("AccountAdministration")] [TestCase("AdvancedConfiguration")] [TestCase("AdvancedEntry")] [TestCase("AdvancedReporting")] [TestCase("BasicConfiguration")] [TestCase("DataEntry")] [TestCase("Reporting")] [TestCase("Revenue")] [TestCase("SysAdmin")] public void logged_in_user_should_be_able_to_access_only_appropriate_pages(string userType) { // 你的测试逻辑 } }
完成以上步骤后,每个TestCase会启动独立的浏览器进程,并真正并行执行测试逻辑。
内容的提问来源于stack exchange,提问作者Keiggo
相关产品推荐
相关产品推荐

