Wykonanie testu zatrzymuje się po błędu oświadczenia w pytest

0

Pytanie

Do badania na podstawie danych, jeśli jest 10 zestawów danych i zatwierdzenie nie są wykonywane do 3-go zestawu danych, pozostałe 7 zestawów danych nie będą rozpatrywane do wykonania, i w tym momencie program jest w pełni zatrzymuje się. Próbowałem usunąć wiersz "podnieść e", i w tym czasie wszystkie zestawy danych są traktowane do wykonania, ale w końcu stan jest wyświetlany jako WYSŁANE, co jest całkowicie błędne, ponieważ muszę zgłosić błąd do 3-go zestawu danych. Proszę, daj mi znać, jeśli masz jakieś rozwiązanie do tego samego.

Próbowałem następujące 2 metody, i to nie zadziałało. Pierwszy zestaw testów zarejestrowano 10 razy na 10 zestawów danych, ale nawet po awarii dla 3-go zestawu danych stan wykonania testu jest wyświetlany jako POKONANY, co jest błędne, gdyż zestaw testowy musi być nieskuteczne w raporcie.

W drugim przypadku wykonanie testu jest w pełni zatrzymuje się po awarii homologacji w 3-m zbiorze danych, a pozostałe zestawy danych nie będą rozpatrywane do wykonania.

Moim celem jest, aby wykonać przypadek testowy dla wszystkich zestawów danych <url>, a następnie sprawdzić raport pod kątem jakichkolwiek awarii.

        try:
            assert len(json_response_plan) == 1
        except Exception:
            pytest.raises(Exception)


        try:
            assert len(json_response_plan) == 1
        except Exception as e:
            raise e
automated-tests pytest python
2021-11-24 05:12:42
1

Najlepsza odpowiedź

1

pytest przeprowadza się przy pierwszym niepowodzeniu dla tej funkcji testowej. Oznacza to, że jeśli masz 10 przypadków, ale przenieść je do jednej funkcji testowej (np. w pętli for), zatrzyma się przy pierwszej awarii (Tzn. Przejdzie do następnej funkcji testowej lub zakończy pracę, jeśli nie ma więcej funkcji testowych). Aby rozwiązać ten problem, standardowy sposób polega na tym, aby upewnić się, że każdy z tych 10 przypadków jest traktowany jako oddzielny przypadek testowy. To właśnie tutaj na pierwszy plan wychodzą parametryzowane oprawy.

Rozważmy następujący przykład:

def my_dataset():
    return range(5)  # return your datasets from here

@pytest.fixture(params=my_dataset())
def my_fixture(request):
    yield request.param  # this will `yield` each of the datasets individually, thereby, considering it as individual tests

def test_me(my_fixture):
    assert my_fixture < 4

$ pytest tests/test_me.py -vvv

tests/test_me.py::test_me[0] PASSED                                [ 20%]
tests/test_me.py::test_me[1] PASSED                                [ 40%]
tests/test_me.py::test_me[2] PASSED                                [ 60%]
tests/test_me.py::test_me[3] PASSED                                [ 80%]
tests/test_me.py::test_me[4] FAILED                                [100%]

================================ FAILURES ================================
_______________________________ test_me[4] _______________________________

my_fixture = 4

    def test_me(my_fixture):
>       assert my_fixture < 4
E       assert 4 < 4

tests/test_me.py:14: AssertionError
======================== short test summary info =========================
FAILED tests/test_me.py::test_me[4] - assert 4 < 4
====================== 1 failed, 4 passed in 0.19s =======================
2021-11-29 08:35:15

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................