Run multiple pytest tests in parallel using pytest-xdist
Preconditions (2)
✅ Expected Result: All tests in test_sample.py run in parallel using 3 workers and all tests pass without errors
import subprocess import re def test_pytest_xdist_parallel_execution(): # Run pytest with 3 parallel workers result = subprocess.run(['pytest', '-n', '3', 'test_sample.py', '--maxfail=1', '--disable-warnings', '-q'], capture_output=True, text=True) output = result.stdout # Check that pytest exited with code 0 (all tests passed) assert result.returncode == 0, f"Tests failed with output:\n{output}" # Check pytest-xdist output for parallel workers # The output usually contains lines like 'gw0', 'gw1', 'gw2' indicating workers workers_found = re.findall(r'gw\d+', output) assert len(set(workers_found)) >= 3, "Less than 3 parallel workers detected in output"
This test runs the pytest command with the -n 3 option to execute tests in 3 parallel workers using pytest-xdist.
We use subprocess.run to execute the command and capture the output.
First, we assert that the return code is 0, meaning all tests passed.
Then, we check the output for worker identifiers like gw0, gw1, and gw2 which pytest-xdist prints to show parallel execution.
This confirms that tests ran in parallel.
Using --maxfail=1 and --disable-warnings keeps output clean and stops early on failure.
Now add a test that runs the same test file with different numbers of workers (1, 2, 4) and verifies all pass
pytest-xdist in test execution?-n.pytest -n 4 runs tests with 4 parallel workers.pytest -n 3 test_sample.py, what happens during test execution?-n 3 option tells pytest-xdist to use 3 workers for parallel execution.pytest -n 2 but get an error: ERROR: unknown option: -n. What is the likely cause?-n is unknown, meaning pytest does not recognize the option.-n option is provided by pytest-xdist plugin. If it's not installed, pytest won't recognize it.pytest -n auto. What is a good approach to fix this?@pytest.mark.serial (or similar) ensures they run one at a time, avoiding conflicts.@pytest.mark.serial to tests that share state to run them sequentially -> Option CPass the test and this pattern moves unknown