Ejecución de la prueba se detiene después de un error de aserción en pytest

0

Pregunta

Para el impulsado por los datos de prueba, si hay 10 conjuntos de datos, y la afirmación de falla para el 3 de conjunto de datos, a continuación, el resto de los 7 conjuntos de datos no son considerados para la ejecución y el programa se detiene en ese punto completamente. He intentado por removeing la "elevar" e " de la línea y que el tiempo de todos los conjuntos de datos son considerados para la ejecución, pero al final, el estado se muestra como el PASADO que no es del todo correcto, ya que los necesitan para informar del fallo, para el 3 de conjunto de datos. Por favor, hágamelo saber si usted tiene alguna solución para el mismo.

He probado los 2 siguientes métodos, y no funcionó. Para el primero, el caso de prueba se ejecuta 10 veces durante 10 conjuntos de datos, pero incluso después de un fallo de la 3ª conjunto de datos, la ejecución de las pruebas de estado se muestra como se PASA la cual no es correcto ya que el caso de prueba debe ser fallado en el informe.

Para el segundo, la ejecución de la prueba se detuvo por completo después de un error de aserción en la 3ª conjunto de datos y el resto de los conjuntos de datos no son considerados para la ejecución.

Mi objetivo es ejecutar el caso de prueba para todos los conjuntos de datos a la vez y, a continuación, compruebe el informe de cualquier error.

        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

Mejor respuesta

1

pytest se detendrá la ejecución en el primer fracaso de una determinada función de prueba. Es decir, si tienes 10 casos, pero se puede pasar a una sola función de prueba (en un bucle for, por ejemplo), se detendrá en el primer fallo (es decir, saltar a la siguiente función de prueba, o la salida si no hay más funciones de prueba). Para resolver esto, la forma estándar es para asegurarse de que cada uno de los 10 casos, ser considerado como independiente de los casos de prueba. Aquí es donde parametrizar los accesorios vienen en la imagen.

Considere este ejemplo:

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

En otros idiomas

Esta página está en otros idiomas

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