Xunit - 在全套测试中禁用并行性

vTa*_*Tad 9 c# selenium nunit xunit

我有大约 100 个 selenium 测试要运行,但其中 2 个不能并行运行

是否可以使用 xUnit 仅对这 2 个测试禁用并行性?

(这两个测试不能并行,因为它们需要模拟键盘点击 -> 所以我会使用并行执行失去输入焦点)

我正在寻找的最佳场景:

向 2 个测试添加一些属性,这将禁用它们的并行性。然后在测试执行中,将使用 16 个线程运行 98 个测试,最后将使用 1 个线程执行剩余的两个测试。

我知道其中一种解决方案可能是这样的:

  • 为测试添加“并行”和“非并行”类别
  • 使用 xunit.console 仅运行参数 maxthread=16 的“并行”类别。
  • 之后运行参数 maxthread=1 的“NonParallel”类别
  • 毕竟,将 xunit 报告合并为一个。

但不符合我的需求,我想知道我是否可以在我在“最佳场景”中描述的场景中运行测试

PS如果没有解决方案,我可以在nunit中找到类似的东西吗?

st7*_*t78 16

虽然潜水员的答案是正确的,但它没有显示具体如何实现这一目标。

  1. 创建新的特殊类来建立测试集合,如下所示:
[CollectionDefinition(nameof(SystemTestCollectionDefinition), DisableParallelization = true)]
public class SystemTestCollectionDefinition { }
Run Code Online (Sandbox Code Playgroud)
  1. 现在,您可以为禁用并行化所需的所有测试分配相同的集合名称。就我而言,我只是在类上添加了一个属性,该属性是所有系统测试的基础:
[Collection(nameof(SystemTestCollectionDefinition))]
public class BaseSystemTest { ... }
Run Code Online (Sandbox Code Playgroud)

现在集合中的所有测试都将按顺序执行。

来源: https: //github.com/xunit/xunit/issues/1999


小智 6

如果你有 xunit >= 2.3 试试 [CollectionDefinition(DisableParallelization = true)]。

它能够通过测试集合定义禁用单个测试集合的跨集合并行化。具有并行功能的测试集合将首先运行(并行),然后是禁用并行的测试集合(顺序运行)。