Actualización Pytest 9.1.0: Cambios Clave para Automatización QA
TL;DR
- Atención usuarios de
--doctest-modules: los fixtures autouse pueden ejecutarse dos veces; considere moverlos aconftest.py. - Múltiples deprecaciones importantes, como
request.getfixturevalue()en teardown y el uso de iterables no-Collection enparametrize. - Nueva opción
--max-warningspara fallar ejecuciones si se excede un umbral de advertencias, mejorando la estabilidad de las pruebas.
Cambios Clave
Pytest 9.1.0, lanzado el 13 de junio de 2026, trae una combinación de cambios importantes, deprecaciones y nuevas funcionalidades relevantes para ingenieros de automatización de pruebas. Esta actualización menor se centra en refinar el comportamiento de los fixtures, mejorar la configuración y ofrecer más control sobre la ejecución de pruebas.
Remociones y Cambios Incompatibles:
El cambio más significativo afecta a quienes utilizan --doctest-modules. Los fixtures autouse con alcance module, package o session, definidos directamente en módulos de prueba, ahora podrían ejecutarse dos veces. Para evitar esto, se recomienda mover la definición de estos fixtures a un archivo conftest.py. Este ajuste se debe a mejoras en la implementación de fixtures de pytest y cómo DoctestModule los recolecta.
Deprecaciones: Pytest 9.1.0 introduce varias deprecaciones, anticipando cambios en pytest 10:
- Gestión de Fixtures: Llamar a
request.getfixturevalue()durante el teardown para un fixture no solicitado previamente está deprecado. Además, los fixtures con alcance de clase definidos como métodos de instancia (sin@classmethod) están deprecados debido a comportamientos inesperados. Para más información sobre fixtures, consulte nuestro pytest-tutorial-python-testing. - Parametrización: El uso de iterables que no son
~collections.abc.Collection(como generadores) para el parámetroargvaluesen@pytest.mark.parametrizeymetafunc.parametrizeestá deprecado. Esto previene problemas donde los iterables se agotan después del primer uso, lo que podría llevar a pruebas omitidas. - Configuración y APIs: El atributo privado
config.inicfgestá deprecado en favor deconfig.getini(). Pasar cadenasbaseidonodeida las APIs de registro de fixtures está deprecado; use el parámetronodeen su lugar. - CLI y Hooks: La opción
--pastebinestá deprecada; ahora está disponible como un plugin externo (pytest-pastebin).pytest.console_mainestá deprecado; usepytest.mainpara ejecución programática. El método de configuración de hooks usando markers, deprecado desde pytest 7.2, también será eliminado.
Nuevas Funcionalidades:
- Control de Advertencias: Una adición importante para los equipos de QA es la opción de línea de comandos
--max-warningsy la opción de configuraciónmax_warnings. Esto permite que una ejecución de prueba falle si el número de advertencias excede un umbral definido, promoviendo suites de prueba más limpias. - Reportes: Se ha añadido la opción CLI larga
--report-chars. - Registro de Fixtures: Para el desarrollo avanzado de plugins,
pytest.register_fixture()ofrece una interfaz imperativa para registrar fixtures, complementando el decorador declarativo@pytest.fixture. - Detalles de Asersión: La opción de configuración
assertion_text_diff_stylebrinda más control sobre la salida de fallas de aserción.
Impacto para Equipos QA
Los equipos de QA deben revisar sus suites de prueba existentes en busca de los patrones deprecados, especialmente en el uso de fixtures y la parametrización, para prepararse para pytest 10. La nueva opción --max-warnings ofrece una herramienta valiosa para aplicar límites de advertencias, mejorando la fiabilidad y mantenibilidad de las pruebas. Comprender estos cambios es crucial para aplicar pytest-advanced-techniques de manera eficiente y mantener una automatización de pruebas estable.
FAQ
- P: ¿Cuál es el cambio más crítico para las suites de prueba existentes?
R: La posible doble ejecución de fixtures autouse con
--doctest-modulesrequiere atención inmediata, posiblemente moviendo las definiciones de fixtures aconftest.py. - P: ¿Cómo beneficia
--max-warningsa QA? R: Permite a los equipos establecer una tolerancia de advertencias, fallando automáticamente las builds si ocurren demasiadas, evitando así la acumulación de problemas silenciosos. - P: ¿Necesito refactorizar mis pruebas parametrizadas?
R: Si utiliza generadores u otros iterables no-Collection para
argvaluesenparametrize, debe refactorizarlos para usar listas o tuplas y evitar advertencias de deprecación y posibles omisiones de pruebas.
