Pytest'te onaylama işlemi hatasından sonra sınama yürütme durdurulur

0

Soru

Veri odaklı test için, 10 veri kümesi varsa ve onaylama işlemi 3. veri kümesi için başarısız olursa, 7 veri kümesinin geri kalanı yürütme için dikkate alınmaz ve program bu noktada tamamen durdurulur. "E'yi yükselt"satırını kaldırarak denedim ve bu süre zarfında tüm veri kümeleri yürütme için kabul edildi, ancak sonunda durum, 3. veri kümesi için başarısızlığı bildirmem gerektiğinden kesinlikle doğru olmayan bir şekilde gösteriliyor. Aynı şey için herhangi bir çözümünüz varsa lütfen bana bildirin.

Aşağıdaki 2 yöntemi denedim ve işe yaramadı. Birincisi için, test durumu 10 veri kümesi için 10 kez yürütülür, ancak 3. veri kümesi için bir başarısızlıktan sonra bile, test yürütme durumu, test durumunun raporda başarısız olması gerektiği için doğru olmayan şekilde İLETİLDİ olarak gösterilir.

İkincisi için, 3. veri kümesindeki onaylama işlemi başarısız olduktan sonra test yürütme işlemi tamamen durdurulur ve kalan veri kümeleri yürütme için dikkate alınmaz.

Amacım, tüm veri kümeleri için test durumunu bir kerede yürütmek ve ardından herhangi bir arıza için raporu kontrol etmektir.

        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

En iyi cevabı

1

pytest belirli bir sınama işlevi için ilk başarısızlıkta yürütmeyi durdurur. Yani, 10 vakanız varsa, ancak bunları tek bir test işlevine geçirirseniz (örneğin, bir for döngüsünde), ilk başarısızlıkta duracaktır(yani, bir sonraki test işlevine atlayın veya daha fazla test işlevi yoksa çıkın). Bunu çözmek için standart yol, bu 10 vakanın her birinin ayrı test durumları olarak değerlendirildiğinden emin olmaktır. Bu nerede parametrize demirbaş haline geliyor resim.

Bu örneği göz önünde bulundurun:

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

Diğer dillerde

Bu sayfa diğer dillerde

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