J'ai commencé à travailler sur un projet assez grand (multithread) Python, avec des charges de tests (unitaires). Le problème le plus important est que l'exécution de l'application nécessite un environnement prédéfini, qui est implémenté par un gestionnaire de contexte. Jusqu'à présent, nous avons utilisé une version corrigée du lanceur de tests unitaires qui exécuterait les tests à l'intérieur de ce gestionnaire, mais cela ne permet pas de changer de contexte entre les différents modules de test.
Le nez et le pytest soutiennent une telle chose car ils prennent en charge les appareils à de nombreuses granularités, nous envisageons donc de passer au nez ou au pytest. Ces deux bibliothèques prendraient également en charge les tests de "balisage" et exécuteraient uniquement ces sous-ensembles balisés, ce que nous aimerions également faire.
J'ai parcouru un peu la documentation de nose et de pytest, et pour autant que je puisse voir, la plus grande partie de ces bibliothèques supporte essentiellement la même fonctionnalité, sauf qu'elle peut être nommée différemment ou nécessiter une syntaxe légèrement différente. De plus, j'ai noté quelques petites différences dans les plugins disponibles (nez a un support multiprocessus, pytest ne semble pas le faire par exemple)
Il semble donc que le diable soit dans les détails, ce qui signifie (souvent au moins) dans le goût personnel et nous ferions mieux d'aller avec la bibliothèque qui correspond le mieux à nos goûts personnels.
Je devrais donc demander une argumentation subjective pourquoi je devrais aller avec le nez ou le pytest afin de choisir le combo bibliothèque/communauté qui correspond le mieux à nos besoins.
J'utilisais Nose parce que c'était la valeur par défaut avec Pylons. Je n'aimais pas ça du tout. Il avait des vrilles de configuration à plusieurs endroits, presque tout semblait être fait avec un plugin sous-documenté qui le rendait encore plus indirect et déroutant, et parce qu'il faisait les tests les plus difficiles par défaut, il rompait régulièrement avec les retraits Unicode, cachant les sources d'erreurs.
Je suis assez content de py.test ces deux dernières années. Pouvoir simplement écrire un test avec assert
hors de la boîte me fait détester écrire des tests façon moins, et pirater tout ce dont j'ai besoin au-dessus du noyau a été assez facile. Plutôt qu'une interface de plugin fixe, elle a juste des tas de crochets et un code source assez compréhensible si vous avez besoin de creuser davantage. J'ai même écrit un adaptateur pour exécuter des tests Testify sous py.test, et j'ai eu plus de problèmes avec Testify qu'avec py.test.
Cela dit, j'entends que nose a des plugins pour des tests sans classe et affirme l'introspection de nos jours, donc vous ferez probablement bien avec l'un ou l'autre. J'ai toujours l'impression de pouvoir toucher le sol avec py.test, et je peux comprendre ce qui se passe quand il se casse.