vTad
vTad

Reputation: 349

Xunit - disable parallelism in few tests of full set

I have about 100 selenium tests to run, but 2 of them cannot be run in parallel

Is it possible to disable parallelism only for those 2 tests, using xUnit?

(those 2 test cannot be parallel, because they need to simulate keyboard clicking -> so I would lose input focus using parallel execution)

Best scenario that I am looking for:

Add some attribute to 2 tests that will disable parallelism for them. Then in tests executions 98 tests will be running with 16 threads, and two remaining tests will be executed at the end using 1 thread.

I know that one of the solutions can be something like this:

But is not fitting my needs, and I wonder if I can run tests in a scenario like I describe in "best scenario"

P.S. If the is no solution for that, can I find something like that in nunit?

Upvotes: 19

Views: 13024

Answers (2)

st78
st78

Reputation: 8316

While Diver answer is correct it doesn't show how exactly to achieve this.

  1. Create new special class to establish test collection, something like this:
[CollectionDefinition(nameof(SystemTestCollectionDefinition), DisableParallelization = true)]
public class SystemTestCollectionDefinition { }
  1. Now you can assign the same Collection name to all tests needed to disable parallelization. In my case I just added an attribute on the class which is base for all system tests:
[Collection(nameof(SystemTestCollectionDefinition))]
public class BaseSystemTest { ... }

Now all tests within Collection will be executed in sequence.

Source: https://github.com/xunit/xunit/issues/1999

Upvotes: 20

Diver
Diver

Reputation: 83

If you have xunit >= 2.3 try [CollectionDefinition(DisableParallelization = true)].

It ability to disable cross-collection parallelization for individual test collections, via the test collection definition. Parallel-capable test collections will be run first (in parallel), followed by parallel-disabled test collections (run sequentially).

Upvotes: 8

Related Questions