Выполнение теста останавливается после ошибки утверждения в pytest

0

Вопрос

Для тестирования на основе данных, если имеется 10 наборов данных, и утверждение не выполняется для 3-го набора данных, то остальные 7 наборов данных не рассматриваются для выполнения, и в этот момент программа полностью останавливается. Я попытался удалить строку "поднять e", и в это время все наборы данных рассматриваются для выполнения, но в конце состояние отображается как ПЕРЕДАННОЕ, что абсолютно неверно, так как мне нужно сообщить об ошибке для 3-го набора данных. Пожалуйста, дайте мне знать, если у вас есть какие-либо решения для того же самого.

Я попробовал следующие 2 метода, и это не сработало. Для первого тестовый набор выполнялся 10 раз для 10 наборов данных, но даже после сбоя для 3-го набора данных состояние выполнения теста отображается как ПРОЙДЕННОЕ, что неверно, так как тестовый набор должен быть неудачным в отчете.

Во втором случае выполнение теста полностью останавливается после сбоя утверждения в 3-м наборе данных, а остальные наборы данных не рассматриваются для выполнения.

Моя цель состоит в том, чтобы выполнить тестовый случай для всех наборов данных сразу, а затем проверить отчет на наличие каких-либо сбоев.

        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

Лучший ответ

1

pytest остановит выполнение при первом сбое для данной тестовой функции. Это означает, что если у вас есть 10 случаев, но вы передаете их одной тестовой функции (например, в цикле for), она остановится при первом сбое (т. Е. Перейдет к следующей тестовой функции или завершит работу, если больше нет тестовых функций). Чтобы решить эту проблему, стандартный способ состоит в том, чтобы убедиться, что каждый из этих 10 случаев рассматривается как отдельный тестовый случай. Именно здесь на первый план выходят параметризованные светильники.

Рассмотрим этот пример:

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

На других языках

Эта страница на других языках

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