Playwright结合Specflow与NUnit:仅部分测试执行并行
xUnit 实现部分测试并行、部分测试非并行的解决方案
你遇到的问题大概率是对ParallelScope.Fixtures的作用和NonParallelizable的层级使用理解有偏差,以下是具体的解决方法:
基础配置(大部分并行,部分串行)
保留全局的并行配置:
[assembly: Parallelizable(ParallelScope.Fixtures)]这个配置允许不同测试夹具(Fixture)之间的测试并行执行,是实现大部分测试并行的基础。
给需要串行执行的测试类或方法添加
[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() { // 仅这个方法会串行执行 } }
- 整个类的测试都串行:
反向配置(大部分串行,指定组并行)
如果你的需求是默认所有测试串行,仅某一组测试并行,可以这么设置:
- 全局关闭并行:
[assembly: Parallelizable(ParallelScope.None)] - 给需要并行的测试类或方法标记
[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
相关产品推荐
相关产品推荐

