我以为我了解 MbUnit 的并行测试执行是如何工作的,但是我看到的行为与我的预期有很大不同,我怀疑我错过了一些东西!
我有一组希望同时运行的 UI 测试。所有测试都在同一个程序集中,分为三个不同的命名空间。所有的测试都是完全独立的,所以我希望它们都可以并行执行。
为此,我在 AssemblyInfo.cs 中添加了以下内容:
[assembly: DegreeOfParallelism(8)]
[assembly: Parallelizable(TestScope.All)]
我的理解是,程序集属性的这种组合应该考虑所有测试[Parallelizable]
,并且测试运行程序在执行期间应该使用 8 个线程。我的个人测试都标有该[Test]
属性,仅此而已。它们都不是数据驱动的。
但是,我实际看到的最多是使用了 5-6 个线程,这意味着我的测试运行花费的时间比应有的要长。
我错过了什么吗?我是否需要做任何其他事情来确保跑步者正在使用我的所有 8 个线程?
注意无论我使用哪个跑步者,行为都是相同的。GUI、命令行和 TD.Net 运行器的行为都与上述相同,再次让我认为我错过了一些东西。
编辑:正如评论中所指出的,我正在运行 MbUnit 的 v3.1(更新 2 build 397)。文档表明程序集级别属性是可用的[parallelizable]
,但它似乎也引用了框架的 v3.2,尽管它还不可用。
编辑2:为了进一步澄清,我的程序集结构如下:
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:好的,我现在注意到,如果我一次只运行一个夹具,同时运行的最大测试数始终为 8。一旦我选择多个夹具,它就会下降到 5 或 6。如果我获取两个夹具的内容(目前它们每个都包含 12 个测试)并将它们放入同一个夹具(一个夹具中总共有 24 个测试),该夹具也将始终同时运行 8 个测试。
这似乎表明这不是单个测试中的问题,而是装配级别属性如何渗透到夹具,或者测试运行程序如何使用这些属性。
此外,我还观察到(在运行两个固定装置时),一旦两个固定装置中的一个完全执行,当运行器回到只运行一个固定装置时,它就会开始同时执行更多测试。现在对我来说,当第二个夹具中还有 7 个测试要运行时,第一个夹具就完成了执行。一旦发生这种情况,同时运行的测试数量就会从之前的 5 或 6 个跃升至最大可用的 7 个。