Nase gegen Pytest - Was sind die (subjektiven) Unterschiede, die mich dazu bringen sollten, mich zu entscheiden? [geschlossen]


84

Ich habe angefangen, an einem ziemlich großen (Multithread-) Python-Projekt mit vielen (Unit-) Tests zu arbeiten. Das wichtigste Problem dabei ist, dass für die Ausführung der Anwendung eine voreingestellte Umgebung erforderlich ist, die von einem Kontextmanager implementiert wird. Bisher haben wir eine gepatchte Version des Unit-Test-Runners verwendet, die die Tests in diesem Manager ausführen würde, aber keinen Kontextwechsel zwischen verschiedenen Testmodulen zulässt.

Sowohl Nase als auch Pytest unterstützen so etwas, weil sie Vorrichtungen mit vielen Granularitäten unterstützen. Daher versuchen wir, auf Nase oder Pytest umzusteigen. Beide Bibliotheken würden auch Tagging-Tests unterstützen und nur diese getaggten Teilmengen ausführen, was wir auch gerne tun würden.

Ich habe die Dokumentation von Nase und Pytest ein wenig durchgesehen, und soweit ich sehen kann, unterstützt der größte Teil dieser Bibliotheken im Wesentlichen dieselbe Funktionalität, außer dass sie möglicherweise anders benannt sind oder eine etwas andere Syntax erfordern. Außerdem habe ich einige kleine Unterschiede in den verfügbaren Plugins festgestellt (Nase hat Multiprozess-Unterstützung, Pytest scheint es zum Beispiel nicht zu sein)

Es scheint also, dass der Teufel im Detail steckt, was (oft zumindest) im persönlichen Geschmack bedeutet, und wir sollten uns besser für die Bibliothek entscheiden, die am besten zu unserem persönlichen Geschmack passt.

Daher möchte ich Sie um eine subjektive Argumentation bitten, warum ich mit Nase oder Pytest arbeiten sollte, um die Kombination aus Bibliothek und Community auszuwählen, die unseren Anforderungen am besten entspricht.


Ich habe gerade bemerkt, dass mehr oder weniger die gleiche Frage auch hier gestellt wurde - aber das ist fünf Jahre her, also denke ich immer noch, dass es Sinn macht, die Frage zu wiederholen
Jakob van Bethlehem

9
pytestunterstützt Multiprozess-Unterstützung über das pytest-xdist- Plugin.
Bruno Oliveira

2
Abgesehen davon sind Kontextmanager nur einfache Python-Objekte, und Sie können manager.__enter__()Ihre TestCase.setUp()und manager.__exit__()Ihre aufrufen tearDown().
Rescdsk

Antworten:


80

Ich habe Nose verwendet, weil dies bei Pylons die Standardeinstellung war. Es hat mir überhaupt nicht gefallen. Es hatte Konfigurationsranken an mehreren Stellen, praktisch alles schien mit einem unterdokumentierten Plugin gemacht zu werden, was alles noch indirekter und verwirrender machte, und weil es standardmäßig unittest Tests durchführte, brach es regelmäßig mit Unicode-Tracebacks und versteckte die Fehlerquellen.

Ich war in den letzten Jahren ziemlich zufrieden mit py.test. Wenn assertich in der Lage bin , einen Test sofort zu schreiben , hasse ich es, Tests viel weniger zu schreiben , und es war ziemlich einfach, alles zu hacken, was ich auf dem Kern brauche. Anstelle einer festen Plugin-Schnittstelle gibt es nur viele Hooks und einen ziemlich verständlichen Quellcode, falls Sie weiter graben müssen. Ich habe sogar einen Adapter zum Ausführen von Testify-Tests unter py.test geschrieben und hatte mehr Probleme mit Testify als mit py.test.

Das heißt, ich höre, Nase hat Plugins für klassenlose Tests und behauptet heutzutage Selbstbeobachtung, also werden Sie wahrscheinlich mit beiden gut zurechtkommen. Ich habe immer noch das Gefühl, dass ich mit py.test den Boden erreichen kann, und ich kann verstehen, was los ist, wenn es kaputt geht.


2
Einige Probleme mit dem Ausblenden von Rückverfolgungen wurden vor vielen Jahren um die Nase 0,11 behoben. Seit dem Python 3-Port erwarte ich, dass Unicode-Tracebacks weniger häufig sind (obwohl ich persönlich glaube, dass ich nur einmal auf ein Unicode-Problem mit der Nase gestoßen bin, das beim Kombinieren mit einer Testfall-Basisklasse aufgetreten ist, die einen "Trick" ausgeführt hat, der dies nicht getan hat) Das macht wirklich Sinn - das war also nicht die Schuld der Nase. Ich vermute in Wahrheit, dass bei beiden Werkzeugen im Laufe der Jahre die Ecken und Kanten abgerissen wurden. Vielleicht gefällt Ihnen am besten, was Sie zuletzt verwendet haben ;-)
Croad Langshan

Was ist mit dem letzten Dokumentationsteil? Ich bin auch verwirrt, ob ich Nosetests oder py.test verwenden soll. beide scheinen gleich gut zu sein, aber wie ich lese, verwenden die meisten Leute heutzutage Nasentests. Was könnte der Grund sein, wenn py.tests bessere Multiprozessor-Bibliotheken zur Verfügung hat?
Proprius

1
@proprius es könnte sein, dass Nosetests an erster Stelle standen. Einige Frameworks haben Unterstützung hinzugefügt, Projekte, die diese Frameworks verwenden, haben es standardmäßig verwendet, und es hat sich verbreitet. Auch wenn py.test Nasen- und unittest-Tests ausführen kann, ist sein üblicher Stil nicht um Klassen herum angeordnet, sodass sich die Portierung auf py.test möglicherweise entmutigend anfühlt.
Eevee

4
Ich habe angefangen, den Dokumentationsteil von pytest durchzulesen, und mir wurde klar, dass pytest sowohl für Mehrfachverarbeitungszwecke als auch für das Lernen für einen Neuling eine bessere Wahl ist.
Proprius
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.