Comencé a trabajar en un proyecto Python bastante grande (multiproceso), con un montón de pruebas (unitarias). El problema más importante es que la ejecución de la aplicación requiere un entorno preestablecido, que es implementado por un administrador de contexto. Hasta ahora hicimos uso de una versión parcheada del ejecutor de pruebas unitarias que ejecutaría las pruebas dentro de este administrador, pero que no permite cambiar el contexto entre diferentes módulos de prueba.
Tanto nose como pytest admiten tal cosa porque admiten accesorios en muchas granularidades, por lo que estamos buscando cambiar a nose o pytest. Ambas bibliotecas también admitirían pruebas de 'etiquetado' y ejecutarían solo estos subconjuntos etiquetados, que es algo que también nos gustaría hacer.
He estado revisando la documentación de nose y pytest un poco, y por lo que puedo ver, la mayor parte de esas bibliotecas esencialmente admiten la misma funcionalidad, excepto que puede tener un nombre diferente o requerir una sintaxis ligeramente diferente. Además, noté algunas pequeñas diferencias en los complementos disponibles (nose tiene soporte multiproceso, pytest no parece, por ejemplo)
Por lo que parece, el diablo está en los detalles, lo que significa (a menudo al menos) en el gusto personal y es mejor que vayamos con la biblioteca que mejor se ajuste a nuestro gusto personal.
Entonces, pediría una argumentación subjetiva de por qué debería ir con nose o pytest para elegir la combinación de biblioteca / comunidad que mejor se adapte a nuestras necesidades.
pytest
admite soporte multiproceso a través del complemento pytest-xdist .manager.__enter__()
a suTestCase.setUp()
ymanager.__exit__()
a sutearDown()
.Respuestas:
Solía usar Nose porque era el predeterminado con Pylons. No me gustó nada. Tenía zarcillos de configuración en varios lugares, prácticamente todo parecía estar hecho con un complemento poco documentado que lo hacía aún más indirecto y confuso, y debido a que realizaba pruebas unitarias de forma predeterminada, regularmente rompía con los rastreos Unicode, ocultando las fuentes de errores.
He sido bastante feliz con py.test los últimos dos años. Ser capaz de escribir sólo una prueba con
assert
sacarlo de la caja hace que me gusta escribir pruebas de manera menos, y la piratería lo que tenga encima de la base ha sido bastante fácil. En lugar de una interfaz de complemento fijo, solo tiene montones de ganchos y un código fuente bastante comprensible en caso de que necesite investigar más. Incluso escribí un adaptador para ejecutar pruebas de Testify bajo py.test, y tuve más problemas con Testify que con py.test.Dicho esto, escuché que nose tiene complementos para pruebas sin clases y afirma la introspección hoy en día, por lo que probablemente te irá bien con cualquiera de ellos. Sin embargo, todavía siento que puedo comenzar a ejecutar con py.test, y puedo entender lo que sucede cuando se rompe.
fuente