es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar el plan completo en Pytest.

Estoy buscando una manera en Pytest de mostrar el plan completo de pruebas y de fixtures en lugar de simplemente listar los casos de prueba con --collect-only.

Esto es lo mejor que puedo obtener ahora:

TestClass1
TestCase1
TestCase2
TestClass2
TestCase3
TestCase4

Esto es lo que estoy buscando (debería coincidir con el orden de ejecución):

Fixture1_Setup_ModuleScope
Fixture2_Setup_ClassScope
TestClass1
Fixture3_Setup_FunctionScope
TestCase1
Fixture3_Teardown_FunctionScope
TestCase2
Fixture2_Teardown_ClassScope
TestClass2
TestCase3
TestCase4
Fixture1_Teardown_ModuleScope

He buscado algún complemento de Pytest que proporcione esto y aparentemente ninguno lo ofrece. Ni siquiera el análisis de los resultados, y mucho menos algo que se pudiera generar sin ejecutar las pruebas. Entiendo que no es necesario para las pruebas de Pytest, pero es algo que me ha gustado en uno de nuestros marcos de pruebas internos antiguos, al menos para validar mi intención con la realidad.

¿Estoy pasando por alto alguna solución obvia aquí? ¿Cómo podría lograr esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay una opción incorporada en Pytest para mostrar el plan completo de pruebas y fixtures como se describe. Sin embargo, podrías crear un complemento personalizado de Pytest para lograr esto. Esto implicaría analizar los elementos de prueba recopilados por Pytest, así como los fixtures asociados con cada elemento, y luego mostrarlos en el orden deseado.

    El primer paso sería crear una estructura básica para el complemento de Pytest mediante la creación de un módulo de Python con una variable pytest_plugins que especifique el nombre del complemento. Luego, podrías definir una función de gancho para interceptar los elementos recopilados y sus fixtures asociados. Por ejemplo:

    # myplugin.py
    
    import pytest
    
    def pytest_collection_modifyitems(session, config, items):
        # TODO: Procesar los elementos y fixtures recopilados
        pass
    
    pytest_plugins = ["myplugin"]
    

    La función de gancho pytest_collection_modifyitems recibe la sesión actual de Pytest, la configuración y una lista de elementos de prueba. Podrías recorrer esta lista y extraer los fixtures asociados con cada elemento de prueba utilizando el fixture pytest_request_fixtures. Por ejemplo:

    # myplugin.py
    
    import pytest
    
    def pytest_collection_modifyitems(session, config, items):
        for item in items:
            # Obtener fixtures para el elemento de prueba
            fixtures = item.config.request.getfixturevalue(pytest_request_fixtures)
            # TODO: Procesar el elemento y los fixtures
        pass
    
    pytest_plugins = ["myplugin"]
    

    Una vez que tengas los elementos de prueba y los fixtures, podrías crear un formato de visualización personalizado como el que describiste y mostrarlo en la consola en el orden deseado. Es posible que necesites experimentar con diferentes enfoques para encontrar la manera más eficiente y precisa de analizar los elementos y fixtures recopilados.

    En general, crear un complemento personalizado de Pytest para este propósito puede ser un poco desafiante, pero definitivamente es posible si estás familiarizado/a con Python y Pytest. También podría ser una experiencia de aprendizaje útil si estás interesado/a en explorar los aspectos internos de Pytest y personalizar su comportamiento.

Comments are closed.