¿Cómo puedo posponer la verificación de pruebas?
Entonces, el problema es el siguiente:
Tengo una clase con pruebas.
Ejemplo de esta clase:
class TestClass:
def test1(self):
paso 1 (algún método para crear datos de prueba)
...
...
paso n (algún método para crear datos de prueba)
esperado = resultado de la ejecución del paso 1 ... paso n
actual = metodo_a()--> obtener resultados reales de algunos recursos (se necesitan 2 min para crear estos datos en este recurso)
metodo_de_verificacion(esperado, actual)
def test2(self):
paso 1 (algún método para crear datos de prueba)
...
...
paso n (algún método para crear datos de prueba)
esperado = resultado de la ejecución del paso 1 ... paso n
actual = metodo_a()--> obtener resultados reales de algunos recursos (se necesitan 2 min para crear estos datos en este recurso)
metodo_de_verificacion(esperado, actual)
Entonces, en ese caso, la ejecución llevará al menos 2 min * número de pruebas.
¿Cómo puedo mover actual = metodo_a()--> obtener resultados reales de algunos recursos (se necesitan 2 min para crear estos datos en este recurso)
y como resultado metodo_de_verificacion(esperado, actual)
a “algo” que se ejecutará después de todas las pruebas?
Por ahora, tengo una variable global test_name_and_expected_result
que contiene esperado
para todas las pruebas, y muevo
actual = metodo_a()--> obtener resultados reales de algunos recursos (se necesitan 2 min para crear estos datos en este recurso)
metodo_de_verificacion(esperado, actual)
a la “desconfiguración de la fijación de clase”. Pero como resultado, no tengo un estado de prueba adecuado, ya que solo puedo ver un fracaso general pero no para una prueba específica.
También funciona para mí:
Si existe la posibilidad de sobrescribir forzosamente los resultados de pytest para una prueba específica (ya que tengo el nombre de las pruebas en test_name_and_expected_result
).
davy.ai
Para resolver el problema de tiempo de ejecución prolongado para cada prueba, puedes utilizar un “pytest fixture” que cree los datos de prueba y recupere los resultados reales de la fuente de recursos, y luego pasarlos como argumentos a cada función de prueba. Esto se puede lograr utilizando el decorador
@pytest.fixture
.Aquí tienes un ejemplo de implementación:
En esta implementación, el “pytest fixture”
test_data_and_actual_results
se utiliza para crear los datos de prueba y recuperar los resultados reales de la fuente de recursos, y devuelve una lista de tuplas, donde cada tupla contiene el resultado esperado y el resultado real para una prueba específica.El decorador
@pytest.mark.usefixtures("test_data_and_actual_results")
se utiliza para inyectar automáticamente el “pytest fixture”test_data_and_actual_results
en cada función de prueba como argumento.Dentro de cada función de prueba, puedes acceder a los resultados esperados y reales para esa prueba indexando la lista de tuplas devuelta por el “pytest fixture”
test_data_and_actual_results
. De esta manera, puedes evitar llamar a la funciónmethod_a()
para cada prueba y en cambio reutilizar los resultados recuperados por el “fixture”.Este enfoque te permite ejecutar todas las pruebas utilizando el mismo conjunto de datos de prueba y resultados reales, y reduce el tiempo total de ejecución del conjunto de pruebas.