Provedení testu dostane zastavil po tvrzení, chyba v pytest

0

Otázka

Pro data driven testování, pokud existuje 10 sad dat, a tvrzení selže pro 3. sada dat, pak zbytek 7 datových sad nejsou považovány za provedení a program se zastavil v tu chvíli zcela. Snažil jsem se o removeing "vychovávat e" linku, a že čas všechny datové sady jsou považovány za popravy, ale na konci, stav se ukazuje jako PROŠEL, což je naprosto není pravda, jak jsem třeba, aby se zpráva selhání pro 3. datové sady. Prosím, dejte mi vědět, pokud máte nějaké řešení pro stejný.

Snažil jsem se následující 2 metody, a to nefunguje. Pro první, zkušební případě proveden 10 krát za 10 datových souborů, ale i po selhání pro 3 dataset, test execution status ukazuje, jak PROŠEL, což není pravda, neboť testovací případ by měl být nezdařilo v zprávu.

Za druhé, provádění testu dostane zcela zastavil po selhání výrazu ve 3 dataset a zbývající sady dat nejsou považovány za provedení.

Mým cílem je spustit testovací případ pro všechny sady dat najednou a pak se podívejte se na zprávu pro jakékoliv selhání.

        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

Nejlepší odpověď

1

pytest zastaví exekuce na první selhání pro daný testovací funkce. Znamená to, že pokud máte 10 případů, ale předat je na jeden testovací funkce (v pro smyčky, například), to se zastaví na první selhání (tj. skok na další testovací funkce, nebo výstupu, pokud tam nejsou žádné další testovací funkce). K vyřešení tohoto, standardní způsob je, aby se ujistil, že každý z těchto 10 případů považovat za samostatné testovací případy. To je místo, kde parametrický svítidla do obrázku.

Vezměme si tento příklad:

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

V jiných jazycích

Tato stránka je v jiných jazycích

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