В реальном сценарии, когда новая версия кода готова к развертыванию, она сначала развертывается в среде pre-prod / staging. Затем запускается набор тестов.
Код пригоден для развертывания в рабочей среде, только если набор тестов пройден. В случае сбоя теста, будь то один или несколько, код не готов к работе.
Поэтому, что если мы хотим остановить выполнение набора тестов вскоре после того, как n тестов не пройдено? Это можно сделать в pytest, используя maxfail.
Синтаксис для остановки выполнения набора тестов вскоре после того, как число тестов не выполнено, выглядит следующим образом:
pytest --maxfail = <num>
Создайте файл test_failure.py со следующим кодом.
import pytest import math def test_sqrt_failure(): num = 25 assert math.sqrt(num) == 6 def test_square_failure(): num = 7 assert 7*7 == 40 def test_equality_failure(): assert 10 == 11
Все 3 теста не пройдут при выполнении этого файла теста. Здесь мы собираемся остановить выполнение теста после одной ошибки —
pytest test_failure.py -v --maxfail = 1
test_failure.py::test_sqrt_failure FAILED =================================== FAILURES =================================== _______________________________________ test_sqrt_failure __________________________________________ def test_sqrt_failure(): num = 25 > assert math.sqrt(num) == 6 E assert 5.0 == 6 E + where 5.0 = <built-in function sqrt>(25) E + where <built-in function sqrt>= math.sqrt test_failure.py:6: AssertionError =============================== 1 failed in 0.04 seconds ===============================
В приведенном выше результате мы видим, что выполнение остановлено на один сбой.