57 lines
2.1 KiB
ReStructuredText
57 lines
2.1 KiB
ReStructuredText
.. _parallelization:
|
|
|
|
Running tests across multiple CPUs
|
|
==================================
|
|
|
|
To send tests to multiple CPUs, use the ``-n`` (or ``--numprocesses``) option::
|
|
|
|
pytest -n 8
|
|
|
|
Pass ``-n auto`` to use as many processes as your computer has CPU cores. This
|
|
can lead to considerable speed ups, especially if your test suite takes a
|
|
noticeable amount of time.
|
|
|
|
* ``--maxprocesses=maxprocesses``: limit the maximum number of workers to
|
|
process the tests.
|
|
|
|
* ``--max-worker-restart``: maximum number of workers that can be restarted
|
|
when crashed (set to zero to disable this feature).
|
|
|
|
The test distribution algorithm is configured with the ``--dist`` command-line option:
|
|
|
|
.. _distribution modes:
|
|
|
|
* ``--dist load`` **(default)**: Sends pending tests to any worker that is
|
|
available, without any guaranteed order.
|
|
|
|
* ``--dist loadscope``: Tests are grouped by **module** for *test functions*
|
|
and by **class** for *test methods*. Groups are distributed to available
|
|
workers as whole units. This guarantees that all tests in a group run in the
|
|
same process. This can be useful if you have expensive module-level or
|
|
class-level fixtures. Grouping by class takes priority over grouping by
|
|
module.
|
|
|
|
* ``--dist loadfile``: Tests are grouped by their containing file. Groups are
|
|
distributed to available workers as whole units. This guarantees that all
|
|
tests in a file run in the same worker.
|
|
|
|
* ``--dist loadgroup``: Tests are grouped by the ``xdist_group`` mark. Groups are
|
|
distributed to available workers as whole units. This guarantees that all
|
|
tests with same ``xdist_group`` name run in the same worker.
|
|
|
|
.. code-block:: python
|
|
|
|
@pytest.mark.xdist_group(name="group1")
|
|
def test1():
|
|
pass
|
|
|
|
class TestA:
|
|
@pytest.mark.xdist_group("group1")
|
|
def test2():
|
|
pass
|
|
|
|
This will make sure ``test1`` and ``TestA::test2`` will run in the same worker.
|
|
Tests without the ``xdist_group`` mark are distributed normally as in the ``--dist=load`` mode.
|
|
|
|
* ``--dist no``: The normal pytest execution mode, runs one test at a time (no distribution at all).
|