Introducción
Pytest puede hacer más que detectar pruebas y notificar resultados de aserción. A medida que crece un conjunto de pruebas de Python, la lógica de prueba repetida y el código de configuración compartido hacen que las pruebas sean más difíciles de leer, depurar y ampliar. En este módulo, descubrirá tres funciones de pytest que facilitan la legibilidad y el mantenimiento de las pruebas en Python: la parametrización, los accesorios y el accesorio integrado monkeypatch.
En este módulo se supone que puede escribir scripts Python, ejecutar comandos en un terminal y ejecutar pruebas pytest simples en un entorno virtual con Python 3.10 o posterior. Si necesita ayuda para configurar Windows, consulte Configurar el entorno de desarrollo de Python en Windows. Para obtener más información sobre el entorno virtual, consulte la documentación de Python venv.
Parametrización con @pytest.mark.parametrize ejecuta la misma función de prueba con varios conjuntos de argumentos y pytest recopila cada invocación generada como su propio elemento de prueba. Los accesorios son funciones registradas con pytest, normalmente con @pytest.fixture, que las pruebas u otros accesorios solicitan por nombre. Pueden devolver valores reutilizables y, cuando sea necesario, ejecutar una limpieza una vez finalizado el ámbito de la prueba o del accesorio. El monkeypatch accesorio cambia temporalmente los atributos, los elementos de diccionario, las variables de entorno, sys.patho el directorio de trabajo actual y, a continuación, deshace automáticamente esos cambios después de que finalice la prueba o el accesorio solicitados.
Los ejemplos de este módulo son pruebas de estilo unitaria, pero las mismas características de pytest se aplican a conjuntos de pruebas funcionales o de integración más grandes. Los ejemplos usan la instrucción assert de Python; pytest proporciona introspección en las afirmaciones, por lo que los informes de fallo incluyen valores útiles de la expresión.
Cuándo usar estas características
- Utilice la parametrización cuando se vea obligado a repetirse en las entradas de una prueba o a copiar funciones de prueba casi idénticas para entradas ligeramente diferentes. La parametrización expande una definición de prueba en muchos elementos de prueba, por lo que cada entrada obtiene su propio informe de paso o error.
- Use fixtures cuando varias pruebas necesiten la misma configuración (por ejemplo, datos de prueba, un archivo temporal o una conexión de base de datos) o requiera una limpieza predecible tras su ejecución.
- Use
monkeypatchcuando una prueba necesite aislar el código del estado externo (por ejemplo, variables de entorno, el directorio de trabajo actual o una función que llama a un servicio remoto) sin cambiar permanentemente ese estado.
Empezará reemplazando bucles y pruebas casi duplicadas por parametrización. A continuación, usará accesorios para compartir la configuración y la limpieza, revisar los accesorios integrados, como tmp_path y monkeypatch, y practicará la refactorización de los métodos de configuración y desmontaje de estilo xUnit en un accesorio.
Al final de este módulo, estará listo para aplicar estas características de pytest para reducir la repetición, expandir la cobertura y mejorar los diagnósticos de errores en los conjuntos de pruebas de Python.
Para obtener más información, consulte la documentación de pytest para aserciones, pruebas de parametrización, accesorios y monkeypatch.