En este documento se especifican los criterios para la elección de un test runner, herramienta que permitirá ejecutar los tests para realizar pruebas sobre el código.
Cualquier herramienta que considere como potencial para usarla en el proyecto, debe cumplimentar:
- Herramienta activa. Debe considerarse una herramienta que tenga actualizaciones con relativa frecuencia y un soporte continuado y activo.
- Rendimiento. Debe ejecutar todos los tests que se realicen en el menor tiempo posible. El objetivo que se debe alcanzar es facilitar la validación de las funcionalidades implementadas, ejecutando dichos tests en múltiples ocasiones.
- Ausencia de problemas de seguridad. La herramienta no debe tener brechas de seguridad que puedan comprometer a la aplicación.
Se tendrán en consideración algunas cuestiones de carácter secundario y/o subjetivo, como:
⚠️ Popularidad: A través de artículos y otros lugares de la comunidad, se estudiará qué opinión y valoración dan las personas que utilizan dichas herramientas. Se tendrá en cuenta las recomendaciones oportunas.
Para medir todos los criterios se ha utilizado la herramienta Snyk Advisor , que examina módulos de Python según una serie de criterios (como los que se han mencionado) y otorga una puntuación en un rango de 0 a 100.
Los test runner considerados atendiendo a los criterios citados son:
A1. nose2 : [Puntuación en Snyk - Nose2 : 78]
-
(1) Herramienta activa: nose2_changelog (16-07-2022) ✔️ .
- (En github:nose-devs/nose2, hay actividad reciente a pesar de no haber más cambios oficiales indicados en su web.)
-
(2) Seguridad: ✔️
- No se han detectado problemas de seguridad importantes.
-
(3) Información sobre rendimiento: ✔️
- Basado en
unittest
. - Permite ejecución paralela de tests. Nose2: Running tests in parallel
- Dispone de un mecanismo de detección automática de tests. Nose2: Loader: Test discovery
- Basado en
-
(op1) Popularidad de la herramienta: ✔️
- Está bien considerada por la comunidad, siendo influyente en bastantes proyectos de Python.
- No se han detectado problemas, bugs notificados por usuarios que rechacen su uso.
- Los propios desarrolladores de esta herramienta, también recomiendan tener en cuenta pytest, como una alternativa. Nose2: nose2_vs_pytest.
A2. pytest : [Puntuación en Snyk - Pytest : 97]
- (1) Herramienta activa: pytest_changelog (13-01-2023) ✔️ .
- (En github:pytest-dev/pytest, hay actividad muy reciente. No hay más que tener en cuenta el lanzamiento reciente de una nueva versión.)
- (2) Seguridad: ✔️
- No se han detectado problemas de seguridad importantes.
- (3) Información sobre rendimiento (extraido de pytest_features): ✔️
- Puede ejecutar tests escritos en
nose
(ojo, distinto denose2
), y deunittest
. - Proporciona información detallada sobre aserciones fallidas.
- Fixtures modulares para el manejo de tests. Pytest: Fixtures
- Dispone de un mecanismo de detección automática de tests. Pytest: Test discovery
- Puede ejecutar tests escritos en
- (op1) Popularidad de la herramienta: ✔️
- Es de las herramientas más populares entre la comunidad, además de ser influyente en gran cantidad de proyectos.
- No se han detectado problemas, bugs o fallos de seguridad recientes que rechacen su uso.
Ambos test runner elegidos, pueden ser totalmente válidos para el proyecto. Por las propias recomendaciones de la comunidad, y ser una herramienta más influyente frente a otra (además de tener una versión más reciente), pytest es la mejor opción.