Historie¶
pytest hat eine lange und interessante Geschichte. Der erste Commit in diesem Repository stammt aus Januar 2007, und schon dieser Commit allein verrät viel: Das Repository stammte ursprünglich aus der py-Bibliothek (später als pytest abgetrennt) und war ursprünglich eine SVN-Revision, die nach Mercurial und schließlich nach Git migriert wurde.
Der Commit besagt jedoch „create the new development trunk“ und ist bereits ziemlich umfangreich: 435 Dateien geändert, 58640 Einfügungen(+). Das liegt daran, dass pytest ursprünglich als Teil von PyPy geboren wurde, um das Schreiben von Tests dafür zu erleichtern. Hier ist, wie es sich von dort zu seinem eigenen Projekt entwickelt hat.
Ende 2002 / Anfang 2003 wurde PyPy geboren.
Wie in diesem Blogbeitrag erwähnt, lag von Anfang an ein großer Fokus auf dem Testen. Es gab verschiedene
testsupport-Dateien aufbauend auf unittest.py, und bereits im Juni 2003 refaktorierte Holger Krekel (@hpk42) sein Testframework, um die Dinge aufzuräumen (pypy.tool.test, aber immer noch aufbauend aufunittest.py, noch nichts pytest-ähnliches).Im Dezember 2003 gab es eine weitere Iteration zur Verbesserung ihrer Testsituation durch Stefan Schwarzer, genannt
pypy.tool.newtest.Es schien jedoch nicht lange zu existieren, da um Juni/Juli 2004 die Bemühungen an einer Sache namens
utestbegannen, die einfache Assertions anbot. Das scheint der Anfang von etwas pytest-ähnlichem zu sein, aber leider ist unklar, wo sich der Code des Test-Runners zu dieser Zeit befand. Das Nächstliegende, das noch existiert, ist diese Datei, aber das scheint überhaupt kein vollständiger Test-Runner zu sein. Was zu sehen ist, ist, dass es verschiedene Bemühungen von Laura Creighton und Samuele Pedroni (@pedronis) gab, bestehende Tests automatisch in das neueutest-Framework zu konvertieren.Etwa zur gleichen Zeit, für die Europython 2004, startete @hpk42 ein Projekt, das ursprünglich „std“ genannt wurde und als „komplementäre Standardbibliothek“ gedacht war – und bereits die Prinzipien legte, hinter dem, was später pytest wurde.
aktuelle „batteries included“ sind sehr nützlich, aber
einige davon sind im Grunde im Java-Stil geschrieben, insbesondere das unittest-Framework
[…]
Die beste API ist eine, die nicht existiert
[…]
Ein Testpaket sollte so wenig Boilerplate-Code wie möglich erfordern und viel Flexibilität bieten.
Es sollte qualitativ hochwertige Tracebacks und Debugging-Hilfe bieten.
[…]
zuallererst ... vergessen Sie eingeschränkte „assertXYZ-APIs“ und verwenden Sie die echte Sache, z.B.
assert x == y
das funktioniert mit reinem Python, aber Sie erhalten nicht hilfreiche „Assertion failed“-Fehler ohne Informationen
std.utest (Magie!) interpretiert den Assertionsausdruck neu und bietet detaillierte Informationen über die zugrunde liegenden Werte
Im September 2004 wird die Mailingliste
py-devgeboren, die jetztpytest-devist, aber glücklicherweise mit allen Originalarchiven noch intakt.Um September/Oktober 2004 wurde das
std-Projekt inpyumbenannt undstd.utestwurde zupy.test. Dies ist auch das erste Mal, dass der gesamte Quellcode verfügbar zu sein scheint, mit einem Großteil der API, die heute noch vorhanden ist.py.path.local, das etwa 16-17 Jahre später aus pytest (zugunsten von pathlib) ausgemustert wird.Die Idee des Collection-Baums, einschließlich
Collector,FSCollector,Directory,PyCollector,Module,ClassArgumente wie
-x/--exitfirst,-l/--showlocals,--fulltrace,--pdb,-S/--nocapture(-s/--capture=offheute),--collectonly(--collect-onlyheute)
Im selben Monat wurde die
py-Bibliothek ausPyPyabgespalten.Es schien eine Weile ruhig zu werden, und zwischen Oktober 2004 (Entfernung von
pyaus PyPy) und Januar 2007 (erster Commit im jetzt-pytest-Repository) schien wenig zu geschehen. Es gab jedoch verschiedene Diskussionen über Features/Ideen in der Mailingliste und ein paar Releases alle paar Monate.März 2006: py 0.8.0-alpha2
Mai 2007: py 0.9.0
März 2008: py 0.9.1 (erste Veröffentlichung, die im pytest-Changelog zu finden ist!)
August 2008: py 0.9.2
Im August 2009 wurde py 1.0.0 veröffentlicht, das viele grundlegende Funktionen einführte.
funcargs/fixtures
Eine Plugin-Architektur, die heute noch sehr ähnlich aussieht!
Verschiedene Standard-Plugins, einschließlich monkeypatch.
Schon damals sagte die FAQ
Klar, [eine zweite Standardbibliothek] war ehrgeizig und die Namensgebung hat das Projekt eher geplagt als ihm geholfen. Möglicherweise wird es irgendwann zu einer Namensänderung des Projekts und möglicherweise zu einer Aufteilung in verschiedene Projekte kommen.
Und das geschah schließlich im November 2010, als pytest 2.0.0 als separates Paket von
pyveröffentlicht wurde (aber immer nochpy.testgenannt wurde).Im August 2016 wurde pytest 3.0.0 veröffentlicht, das
pytest(stattpy.test) als empfohlene Kommandozeilen-Einstiegspunkt hinzufügt.
Aufgrund dieser Geschichte ist es schwierig zu beantworten, wann pytest gestartet wurde. Es hängt davon ab, welcher Punkt wirklich als Anfang von allem angesehen werden sollte. Eine mögliche Interpretation ist, die Europython 2004 zu wählen, d. h. um Juni/Juli 2004.