关于使用NUnit 3.8.0.0、.NET 4.0和C#的参数化夹具和方法的测试并行化,我遇到了一个问题。
我目前正在开发一个测试套件,它使用一组资源中的每个资源运行测试。由于初始化这些资源非常耗时,而且资源不保留状态,所以我希望在测试用例之间共享它们,以提高性能。这些资源不能被多个测试同时使用。
为了做到这一点,我制作了一个基础夹具,其中一个构造器接受一个参数,这使得夹具指向正确的资源。实际的测试夹具是这个夹具的子类。
我有一个测试夹具,它使用构造器参数(传递给基类)和测试用例参数。根据参数,基类初始化某些资源。这些资源不能同时使用。
现在,我试图将这些测试用例并行化,使由类MyParameterizedTestFixture(V1),MyParameterizedTestFixture(V2)生成的不同夹具中的测试并行化。可以同时运行,但同一夹具中的测试不能(因为资源不能同时使用)。此外,不同的夹具类可能不会并行运行。
我的代码如下所示(将细节抽象出来):
[TestFixture]
[TestFixtureSource(typeof(TestData), "FixtureParams")]
public class MyParameterizedTestFixture : BaseFixture
{
public MyParameterizedTestFixture(Resource resource) : base (resource) { }
[Test]
public void Test1() { /* run test using Resource */ }
[TestCaseSource("Params")]
public void TestParameterized(object param) { /* run test using Resource and param */ }
}我尝试将Parallelizable(ParallelScope.Self)]添加到派生的夹具中,但是这会导致使用相同资源(即具有相同的version)夹具参数的不同夹具的测试,并同时运行(只在选择一个夹具时工作)。
使用[Parallelizable(ParallelScope.Fixture)]肯定是不正确的,因为它将导致不同的夹具一起运行。使用[Parallelizable(ParallelScope.Children)]也是不正确的,因为它将导致一个夹具中不同的测试用例一起运行,而不是同一个类的不同的夹具。
现在,我想知道,是否可以通过使用“分层”方法(以某种方式标记可并行化的夹具,以另一种方式标记方法)来归档类似我想要的东西,还是可以定义自定义并行作用域?
发布于 2017-08-17 15:34:47
NUnit允许您并行或不运行任何夹具。当一个夹具并行运行时,它可以与任何其他并行夹具同时运行。某些可以一起运行但不能与其他设备一起运行的组合方式是一个很好的特性,但这不是我们现在拥有的特性。
当您拥有同一夹具的多个实例(即泛型或参数化夹具)时,NUnit对这些实例的处理方式与对待任何夹具的方式完全相同。也就是说,如果夹具是可并行的,则实例可以与任何其他实例以及不同夹具的实例同时运行。
类似地,您可以并行或不运行测试用例(方法)。如果一个平行的情况包含在一个非平行夹具中,那么它只能与该夹具的其他方法并行运行。如果它包含在一个并行夹具中,那么它可以与任何其他并行方法同时运行。
换句话说,根据我们目前所拥有的特性,对于每个测试,无论是套件、夹具还是测试用例,并行性基本上都是全部或者完全没有。随着将来版本中的增强,这种情况可能会发生变化。
https://stackoverflow.com/questions/45733313
复制相似问题