@@ -305,6 +305,93 @@ def test_single_threaded(num_parallel_threads):
305305 )
306306
307307
308+ def test_parallel_threads_limit_fixture (pytester ):
309+ """Test that the num_parallel_threads fixture works as expected."""
310+
311+ # create a temporary pytest test module
312+ pytester .makepyfile ("""
313+ import pytest
314+
315+ def test_should_yield_global_threads(num_parallel_threads):
316+ assert num_parallel_threads == 10
317+
318+ @pytest.mark.parallel_threads_limit(20)
319+ def test_unaffected_by_thread_limit(num_parallel_threads):
320+ assert num_parallel_threads == 10
321+
322+ @pytest.mark.parallel_threads_limit(5)
323+ def test_less_than_thread_limit(num_parallel_threads):
324+ assert num_parallel_threads == 5
325+
326+ @pytest.mark.parallel_threads_limit(1)
327+ def test_single_threaded(num_parallel_threads):
328+ assert num_parallel_threads == 1
329+ """ )
330+
331+ # run pytest with the following cmd args
332+ result = pytester .runpytest ("--parallel-threads=10" , "-v" )
333+
334+ # fnmatch_lines does an assertion internally
335+ result .stdout .fnmatch_lines (
336+ [
337+ "*::test_unaffected_by_thread_limit PARALLEL PASSED*" ,
338+ "*::test_less_than_thread_limit PARALLEL PASSED*" ,
339+ "*::test_single_threaded PASSED*" ,
340+ "*1 test was not run in parallel because of use of "
341+ "thread-unsafe functionality, to list the tests that "
342+ "were not run in parallel, re-run while setting PYTEST_RUN_PARALLEL_VERBOSE=1"
343+ " in your shell environment" ,
344+ ]
345+ )
346+
347+ # Re-run with verbose output
348+ orig = os .environ .get ("PYTEST_RUN_PARALLEL_VERBOSE" , "0" )
349+ os .environ ["PYTEST_RUN_PARALLEL_VERBOSE" ] = "1"
350+
351+ result = pytester .runpytest ("--parallel-threads=10" , "-v" )
352+ os .environ ["PYTEST_RUN_PARALLEL_VERBOSE" ] = orig
353+
354+ result .stdout .fnmatch_lines (
355+ ["*pytest-run-parallel report*" , "*::test_single_threaded*" ],
356+ consecutive = True ,
357+ )
358+
359+
360+ def test_parallel_threads_limit_one_thread (pytester ):
361+ """Test that the num_parallel_threads fixture works as expected."""
362+
363+ # create a temporary pytest test module
364+ pytester .makepyfile ("""
365+ import pytest
366+
367+ def test_should_yield_global_threads(num_parallel_threads):
368+ assert num_parallel_threads == 1
369+
370+ @pytest.mark.parallel_threads_limit(5)
371+ def test_marker_threads_five(num_parallel_threads):
372+ assert num_parallel_threads == 1
373+
374+ @pytest.mark.parallel_threads_limit(2)
375+ def test_marker_threads_two(num_parallel_threads):
376+ assert num_parallel_threads == 1
377+
378+ @pytest.mark.parallel_threads_limit(1)
379+ def test_marker_threads_one(num_parallel_threads):
380+ assert num_parallel_threads == 1
381+ """ )
382+
383+ # run pytest with the following cmd args
384+ result = pytester .runpytest ("-v" )
385+ # fnmatch_lines does an assertion internally
386+ result .stdout .fnmatch_lines (
387+ [
388+ "*::test_marker_threads_five PASSED [[]???%[]]" ,
389+ "*::test_marker_threads_two PASSED [[]???%[]]" ,
390+ "*::test_marker_threads_one PASSED [[]thread-unsafe[]]*" ,
391+ ]
392+ )
393+
394+
308395def test_iterations_marker_one_thread (pytester ):
309396 # create a temporary pytest test module
310397 pytester .makepyfile ("""
0 commit comments