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.
pytest
unterstützt Multiprozess-Unterstützung über das pytest-xdist- Plugin.manager.__enter__()
IhreTestCase.setUp()
undmanager.__exit__()
Ihre aufrufentearDown()
.Antworten:
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
assert
ich 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.
quelle