首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MbUnit的[可参数化]和DegreeOfParallelism究竟是如何工作的?

MbUnit的[可参数化]和DegreeOfParallelism究竟是如何工作的?
EN

Stack Overflow用户
提问于 2010-06-03 13:13:28
回答 3查看 4.8K关注 0票数 9

我以为我理解MbUnit的并行测试执行是如何工作的,但是我所看到的行为与我的预期有很大的不同,我怀疑我遗漏了什么!

我有一组UI测试,希望同时运行。所有的测试都在同一个程序集中,被分成三个不同的名称空间。所有的测试都完全独立于其他测试,所以我希望它们都符合并行执行的条件。

为此,我在AssemblyInfo.cs中添加了以下内容:

代码语言:javascript
复制
[assembly: DegreeOfParallelism(8)]

[assembly: Parallelizable(TestScope.All)]

我的理解是,这种程序集属性的组合应该使所有测试都被视为[Parallelizable],并且测试运行程序在执行过程中应该使用8个线程。我的单个测试被标记为[Test]属性,而没有其他任何标记。它们都不是数据驱动的。

然而,我实际看到的是最多使用5-6个线程,这意味着我的测试运行所花费的时间比应该的要长。

我是不是遗漏了什么?我是否需要做任何其他的事情来确保我的8个线程都被运行者所使用?

注:无论我使用哪个跑步者,其行为都是相同的。GUI、命令行和TD.Net运行程序的行为都与上面描述的相同,这再次使我认为我遗漏了一些东西。

编辑:,正如注释中指出的,我正在运行MbUnit的v3.1 (更新2构建397)。文档建议程序集级别的[parallelizable]属性是可用的,但它似乎也引用了框架的v3.2,尽管该版本尚未可用。

编辑2:为了进一步澄清,我的程序集的结构如下:

代码语言:javascript
复制
assembly
- namespace
   - fixture
      - tests (each carrying only the [Test] attribute)
   - fixture
      - tests (each carrying only the [Test] attribute)
- namespace
   - fixture
      - tests (each carrying only the [Test] attribute)
   - fixture
      - tests (each carrying only the [Test] attribute)
- namespace
   - fixture
      - tests (each carrying only the [Test] attribute)
   - fixture
      - tests (each carrying only the [Test] attribute)

编辑3: OK,我现在已经注意到,如果我一次只运行一个夹具,那么并发运行的测试的最大数量总是8。一旦选择了多个夹具,它就会下降到5或6。如果我将两个夹具的内容(目前它们每个包含12个测试)放到同一个夹具中(在该一个夹具中总共有24个测试),那么该夹具也总是同时运行8个测试。

这似乎表明,它不是单个测试中的问题,而是程序集级别的属性如何渗透到夹具上,或者测试运行程序如何使用这些属性。

此外,我还观察到(在运行两个固定装置时),一旦两个固定装置中的一个被完整执行,当它返回到只运行一个夹具时,运行者就会同时执行更多的测试。现在对我来说,当第二个夹具中还有7个测试要运行时,第一个夹具就可以执行了。一旦发生这种情况,并发运行的测试数量就从前5或6跳到最大可用的7。

EN

回答 3

Stack Overflow用户

发布于 2010-06-03 16:47:20

根据释放说明 of 加里奥,v3.0.6:

MbUnit帮助您充分利用您的多核CPU。标记任何测试[Parallelizable],并允许它与同一夹具中的其他可并行测试并行运行。 还可以标记可并行性的夹具,使它们能够与其他可并行的夹具并行运行。

请注意,如果您希望一个夹具中的所有测试都是可并行的,那么仍然需要将[Parallelizable]添加到每个测试中。(我们可能会添加一个特性,以便稍后根据用户反馈在夹具或组装级别设置此功能。)

还请注意,仅仅因为测试或夹具标记为可并行性并不意味着它将与其他测试并行运行。为了提高效率,我们根据配置的并行度限制活动测试线程的数量。如果希望测试的特定数量的实例并行运行,请考虑使用[ThreadedRepeat]

并行度设置控制MbUnit将尝试并行运行的最大测试数。默认情况下,并行度等于您拥有的CPU数量,或者至少等于2个CPU。

如果不喜欢默认设置,那么可以在程序集级别覆盖并行度,如下所示:

我不知道这是否有帮助。也许Jeff可以给出更多的细节,因为他已经实现了这个特性。

票数 6
EN

Stack Overflow用户

发布于 2014-05-08 11:58:15

遇到同样的问题,我的发现

  • 装配:可并行化(.)在组装级别上,重写了夹具可参数化属性,并将导致每次运行一个夹具测试,但在一个夹具并行级别上运行。似乎有一个最大的5-6之间的固定装置平行。
  • 可参数化(TestScope.Descendants)在夹具级别将导致夹具一次运行一个,但测试是并行运行的。平行测试似乎没有最大值。

最后,由于装配级约束对夹具并行限制,唯一的方法是使用夹具级别的属性,并使夹具测试并行运行。

为了解决这个问题,我建议每个夹具创建更少的夹具和更多的测试。您可能总是可以在每个装配夹具上启动多个运行程序。

遗憾的是,情况就是这样。

票数 0
EN

Stack Overflow用户

发布于 2014-08-22 07:55:11

覆盖一次运行的测试不超过5次。我们在Sauce实验室上有25个系统可以一次执行25个脚本,我们从DegreeOfParallelism到20个,每次只执行5个脚本。组装: DegreeOfParallelism(20) -不要为姆布尼特工作

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2966238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档