Pytest - Zatrzymaj pakiet testów po niepowodzeniu testu N.

W prawdziwym scenariuszu, gdy nowa wersja kodu jest gotowa do wdrożenia, jest najpierw wdrażana w środowisku pre-prod / staging. Następnie uruchamia się na nim zestaw testów.

Kod kwalifikuje się do wdrożenia w środowisku produkcyjnym tylko wtedy, gdy pakiet testów przejdzie pomyślnie. Jeśli wystąpi błąd testu, niezależnie od tego, czy jest to jeden, czy wiele, kod nie jest gotowy do produkcji.

A zatem co, jeśli chcemy zatrzymać wykonywanie zestawu testów wkrótce po n liczbie niepowodzeń testów. Można to zrobić w pytest używając maxfail.

Składnia zatrzymania wykonywania zestawu testów wkrótce po n liczbie niepowodzeń testów jest następująca:

pytest --maxfail = <num>

Utwórz plik test_failure.py z następującym kodem.

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

Wszystkie 3 testy zakończą się niepowodzeniem podczas wykonywania tego pliku testowego. Tutaj zatrzymamy wykonywanie testu po jednym niepowodzeniu przez -

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
===============================

W powyższym wyniku widzimy, że wykonanie jest zatrzymywane przy jednej awarii.