Я написал пару тестов и хочу сделать финальный прогон всего сьюта. Но так, чтобы мои новые тесты выполнились первыми! Ведь часто бывает, что новые тесты не всегда такие стабильные как старые. Считаете это сказкой? Нет, это стало реальностью с релизом Pytest 3.5!

В этой версии добавлено много консольных опций. Настоятельно рекомендую ознакомиться со списком и применять их в работе. Все опции заслуживают внимания, но хотел бы остановиться на одной из них: —nf, —new-first.

Что делает —nf, —new-first?

Данная опция позволяет изменить порядок выполнения тестов и выполнить вначале новые тесты.

Как работает?

Pytest берет из кеша список всех тестов из прошлого прогона и сравнивает с текущим прогоном. Если он встречает тесты, которых не было в предыдущих прогонах, то ставит в очередь вперед. Далее очередь тестов выстраивается в порядке устаревания изменения файла с тестами.

Несколько примеров.

К примеру, есть два файла с двумя тестами в каждом: test_1.py и test_2.py. Допустим, мы только что внесли измения в какой-то тест в файле test_2.py. Попробуем запустить тесты в обычном режиме. Что получилось? Вначале выполняются тесты из файла test_1.py, затем из test_2.py.

$ pytest tests -v
======================================================= test session starts ========================================================
platform linux -- Python 3.6.4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 -- /home/username/examples/env/bin/python
cachedir: .pytest_cache
rootdir: /home/username/examples, inifile:
collected 4 items
tests/test_1.py::test_1 PASSED [ 25%]
tests/test_1.py::test_2 PASSED [ 50%]
tests/test_2.py::test_1 PASSED [ 75%]
tests/test_2.py::test_2 PASSED [100%]

===================================================== 4 passed in 0.02 seconds =====================================================

В случае, если запустить pytest с опцией —new-first, порядок изменится и вначале в очереди будут тесты из файла test_2.py, а затем тесты из test_1.py.

$ pytest tests --nf -v
======================================================= test session starts ========================================================
platform linux -- Python 3.6.4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 -- /home/username/examples/env/bin/python
cachedir: .pytest_cache
rootdir: /home/username/examples, inifile:
collected 4 items
tests/test_2.py::test_1 PASSED [ 25%]
tests/test_2.py::test_2 PASSED [ 50%]
tests/test_1.py::test_1 PASSED [ 75%]
tests/test_1.py::test_2 PASSED [100%]

===================================================== 4 passed in 0.02 seconds =====================================================

При этом, если появился новый тест, которого не было в предыдущем прогоне, то он выполнится самым первым:

$ pytest tests --nf -v
======================================================= test session starts ========================================================
platform linux -- Python 3.6.4, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 -- /home/username/examples/env/bin/python
cachedir: .pytest_cache
rootdir: /home/username/examples, inifile:
collected 5 items
tests/test_2.py::test_3 PASSED [ 20%]
tests/test_2.py::test_1 PASSED [ 40%]
tests/test_2.py::test_2 PASSED [ 60%]
tests/test_1.py::test_1 PASSED [ 80%]
tests/test_1.py::test_2 PASSED [100%]

===================================================== 5 passed in 0.02 seconds =====================================================
Что еще?

Не забывайте и о других опциях. В этой версии появились такие опции как:

  • —show-capture — принимает значения no, stdout, stderr, log или all (по дефолту). Теперь вы можете указать какой конкретно вывод вы хотите видеть в консоли.
  • —rootdir — позволяет кастомизировать root директорию
  • —last-failed-no-failures опция — позволяет настроить поведение —last-failed опции
  • —doctest-continue-on-failure — при прогоне doctest позволяет не останавливаться на первой ошибке, а продолжить выполнение дальше
  • —verbosity флаг позволяет задать уровень детализации в явном виде
Please follow and like us:
error

Оставить комментарий

avatar