Как выполнить юнит-тесты параллельно с pytest?
Как я могу распараллелить выполнение модульных тестов, написанных с помощью pytest? Какую тактику параллелизма я могу выбрать?
1 ответ
Для параллельного запуска pytests вам нужно установить pytest-xdist. Пожалуйста, ознакомьтесь с различными тактиками параллелизма, перечисленными ниже, вы можете использовать любую из них (однако могу поспорить, что одна из этих подходит лучше всего для вашего конкретного случая):
pip install pytest-xdist
# The most primitive case, sending tests to multiple CPUs:
pytest -n NUM
# Execute tests within 3 subprocesses.
pytest --dist=each --tx 3*popen//python=python3.6
# Execute tests in 3 forked subprocess. Won't work on windows.
pytest --dist=each --tx 3*popen//python=python3.6 --boxed
# Sending tests to the ssh slaves
pytest --dist=each --tx ssh=first_slave --tx ssh=seconds_slave --rsyncdir package package
# Sending tests to the socket server, link is available below.
python socketserver.py :8889 &
python socketserver.py :8890 &
pytest --dist=each --tx socket=localhost:8889 --tx socket=localhost:8890
Вы можете предоставить разные значения для --dist
(-d
Параметр), который определяет способ распределения тестов между работниками, см. документацию для получения дополнительной информации об использовании --dist.
ПРИМЕЧАНИЕ. После выполнения тестов файл socket_server.py не работает. Я предлагаю вам запустить сервер сокетов из отдельных окон терминала в целях отладки
Вы можете представить более сложные потоки, например, запускать тесты внутри докер-контейнеров с запущенными сокет-серверами типа "pytest рабочие" и другой докер-контейнер, который связывается с ними и выступает в качестве "pytest runner".