【问题标题】:Xunit - disable parallelism in few tests of full setXunit - 在全套测试中禁用并行性
【发布时间】:2018-07-17 10:16:30
【问题描述】:

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

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

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

我正在寻找的最佳方案:

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

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

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

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

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

【问题讨论】:

  • 如果您在 xUnit 中没有找到所需的内容,NUnit 允许您指定测试在从程序集到测试的任何级别的测试层次结构中并行或不并行运行方法包括类和命名空间。见github.com/nunit/docs/wiki/Parallelizable-Attribute

标签: c# selenium nunit xunit


【解决方案1】:

如果您的 xunit >= 2.3,请尝试 [CollectionDefinition(DisableParallelization = true)]。

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

【讨论】:

    【解决方案2】:

    虽然 Diver 的回答是正确的,但它并没有说明如何准确地做到这一点。

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 2015-12-21
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2017-10-21
      • 2016-01-02
      相关资源
      最近更新 更多