nez vs pytest – quelles sont les différences (subjectives) qui devraient me faire choisir non plus?

J’ai commencé à travailler sur un projet Python assez volumineux (multithread), 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, implémenté par un gestionnaire de contexte. Jusqu’à présent, nous avons utilisé une version corrigée du testeur d’unité qui exécutait les tests dans ce gestionnaire, mais cela ne permet pas de changer de contexte entre les différents modules de test.

Le nez et le pytest supportent une telle chose car ils supportent les appareils à de nombreuses granularités, alors nous cherchons à passer au nez ou au pytest. Ces deux bibliothèques prendraient également en charge les tests de “marquage” et n’exécuteraient que ces sous-ensembles balisés, ce que nous souhaitons également faire.

J’ai parcouru un peu la documentation de nez et de pytest et, pour autant que je sache, la plus grande partie de ces bibliothèques supporte essentiellement les mêmes fonctionnalités, sauf qu’elle peut être nommée différemment ou nécessite une syntaxe légèrement différente. Aussi, j’ai noté quelques petites différences dans les plugins disponibles (nez a un support multiprocess, pytest ne semble pas par exemple)

Il semble donc que le diable est dans le détail, ce qui signifie (souvent au moins) dans le goût personnel, et il vaut mieux aller avec la bibliothèque qui correspond le mieux à nos goûts personnels.

Je voudrais donc demander une argumentation subjective pour savoir 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’avais l’habitude d’utiliser Nose parce que c’était le défaut avec Pylons. Je n’aimais pas ça du tout. Il y avait des vrilles de configuration à plusieurs endroits, presque tout semblait être fait avec un plugin sous-documenté, ce qui le rendait encore plus indirect et déroutant.

Je suis très content de py.test depuis quelques années. Etre capable de simplement écrire un test avec assert out me permet de haïr les tests d’écriture beaucoup moins, et le piratage de tout ce dont j’ai besoin au sumt du kernel a été assez facile. Plutôt qu’une interface de plugin fixe, il ne contient que des stacks de hooks, 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 le nez 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 aller au sol avec py.test, et je peux comprendre ce qui se passe quand il se brise.