NUnit配置Parallelizable属性后测试未并行运行的问题排查求助
是否可以通过命令行单独运行测试夹具排查运行器问题
可以,你可以使用NUnit官方的Console Runner执行单独的测试夹具,运行命令如下:
nunit3-console.exe 你的测试程序集.dll --where "class == 你的命名空间.MyTestFixture"
执行后对比总运行耗时与所有单条测试用例的耗时总和,如果总耗时明显小于单条耗时总和,说明并行逻辑生效,当前你使用的VS测试资源管理器或者NUnit Lite存在兼容问题;如果总耗时和单条耗时总和接近,说明是你的配置存在问题,和运行器无关。
注意:NUnit Lite本身属于轻量级运行器,默认不支持并行执行,不管你加什么并行配置都会被忽略,这是它的设计特性。
配置存在的问题及并行不生效的常见原因
你当前贴出的特性配置本身没有语法错误,但缺了必要的全局配置,且存在几个容易忽略的问题:
- 缺少程序集级别的并行配置与并行度声明:仅在测试类上加
[Parallelizable]不会直接生效,你需要在项目的AssemblyInfo.cs里添加如下配置:// 开启全局并行,同时指定并行线程数,默认等于CPU核心数,建议根据用例数量调整为10~20方便观察并行效果 [assembly: Parallelizable(ParallelScope.Children)] [assembly: LevelOfParallelism(10)] - 如果你只需要当前测试类内部的用例并行,不需要跨测试类并行,可以把类上的
[Parallelizable(ParallelScope.All)]改成[Parallelizable(ParallelScope.Children)],明确指定仅类内的测试用例可以并行。 - 请确认你的NUnit版本≥3.12,
FixtureLifeCycle属性是3.12版本才新增的,旧版本会直接忽略该属性,导致测试用例共用同一个测试类实例,NUnit为了避免线程安全问题会自动禁用同夹具内的用例并行。 - 检查测试用例是否加了
[Order]、[NonParallelizable]特性,或者存在依赖其他用例执行结果的逻辑,这类用例会被NUnit自动排除出并行队列。 - 如果你使用VS测试资源管理器执行,请将NUnit3TestAdapter升级到最新版本,3.16之前的适配器版本存在并行逻辑不生效的已知bug。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

