From e44300de7e2354c1e449ce6145627d27af60e15b Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Wed, 23 Jun 2021 20:26:08 +0200 Subject: [PATCH] doc: Add history page (#8784) Based on #8667 --- doc/en/contents.rst | 1 + doc/en/history.rst | 147 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 doc/en/history.rst diff --git a/doc/en/contents.rst b/doc/en/contents.rst index e1854d800..4623d6818 100644 --- a/doc/en/contents.rst +++ b/doc/en/contents.rst @@ -95,6 +95,7 @@ Further topics license contact + history historical-notes talks projects diff --git a/doc/en/history.rst b/doc/en/history.rst new file mode 100644 index 000000000..1bc8942a9 --- /dev/null +++ b/doc/en/history.rst @@ -0,0 +1,147 @@ +History +======= + +pytest has a long and interesting history. The `first commit +`__ +in this repository is from January 2007, and even that commit alone already +tells a lot: The repository originally was from the `py +`__ library (later split off to pytest), and it +originally was a SVN revision, migrated to Mercurial, and finally migrated to +git. + +However, the commit says “create the new development trunk” and is +already quite big: *435 files changed, 58640 insertions(+)*. This is because +pytest originally was born as part of `PyPy `__, to make +it easier to write tests for it. Here's how it evolved from there to its own +project: + + +- Late 2002 / early 2003, `PyPy was + born `__. +- Like that blog post mentioned, from very early on, there was a big + focus on testing. There were various ``testsupport`` files on top of + unittest.py, and as early as June 2003, Holger Krekel (`@hpk42 `__) + `refactored `__ + its test framework to clean things up (``pypy.tool.test``, but still + on top of ``unittest.py``, with nothing pytest-like yet). +- In December 2003, there was `another + iteration `__ + at improving their testing situation, by Stefan Schwarzer, called + ``pypy.tool.newtest``. +- However, it didn’t seem to be around for long, as around June/July + 2004, efforts started on a thing called ``utest``, offering plain + assertions. This seems like the start of something pytest-like, but + unfortunately, it's unclear where the test runner's code was at the time. + The closest thing still around is `this + file `__, + but that doesn’t seem like a complete test runner at all. What can be seen + is that there were `various + efforts `__ + by Laura Creighton and Samuele Pedroni (`@pedronis `__) at automatically + converting existing tests to the new ``utest`` framework. +- Around the same time, for Europython 2004, @hpk42 `started a + project `__ + originally called “std”, intended to be a “complementary standard + library” - already laying out the principles behind what later became + pytest: + + - current “batteries included” are very useful, but + + - some of them are written in a pretty much java-like style, + especially the unittest-framework + - […] + - the best API is one that doesn’t exist + + […] + + - a testing package should require as few boilerplate code as + possible and offer much flexibility + - it should provide premium quality tracebacks and debugging aid + + […] + + - first of all … forget about limited “assertXYZ APIs” and use the + real thing, e.g.:: + + assert x == y + + - this works with plain python but you get unhelpful “assertion + failed” errors with no information + + - std.utest (magic!) actually reinterprets the assertion expression + and offers detailed information about underlying values + +- In September 2004, the ``py-dev`` mailinglist gets born, which `is + now `__ ``pytest-dev``, + but thankfully with all the original archives still intact. + +- Around September/October 2004, the ``std`` project `was renamed + `__ to + ``py`` and ``std.utest`` became ``py.test``. This is also the first time the + `entire source + code `__, + seems to be available, with much of the API still being around today: + + - ``py.path.local``, which is being phased out of pytest (in favour of + pathlib) some 16-17 years later + - The idea of the collection tree, including ``Collector``, + ``FSCollector``, ``Directory``, ``PyCollector``, ``Module``, + ``Class`` + - Arguments like ``-x`` / ``--exitfirst``, ``-l`` / + ``--showlocals``, ``--fulltrace``, ``--pdb``, ``-S`` / + ``--nocapture`` (``-s`` / ``--capture=off`` today), + ``--collectonly`` (``--collect-only`` today) + +- In the same month, the ``py`` library `gets split off + `__ + from ``PyPy`` + +- It seemed to get rather quiet for a while, and little seemed to happen + between October 2004 (removing ``py`` from PyPy) and January + 2007 (first commit in the now-pytest repository). However, there were + various discussions about features/ideas on the mailinglist, and `a + couple of + releases `__ every + couple of months: + + - March 2006: py 0.8.0-alpha2 + - May 2007: py 0.9.0 + - March 2008: py 0.9.1 (first release to be found `in the pytest + changelog `__!) + - August 2008: py 0.9.2 + +- In August 2009, py 1.0.0 was released, `introducing a lot of + fundamental + features `__: + + - funcargs/fixtures + - A `plugin + architecture `__ + which still looks very much the same today! + - Various `default + plugins `__, + including + `monkeypatch `__ + +- Even back there, the + `FAQ `__ + said: + + Clearly, [a second standard library] was ambitious and the naming has + maybe haunted the project rather than helping it. There may be a + project name change and possibly a split up into different projects + sometime. + + and that finally happened in November 2010, when pytest 2.0.0 `was + released `__ + as a package separate from ``py`` (but still called ``py.test``). + +- In August 2016, pytest 3.0.0 `was + released `__, + which adds ``pytest`` (rather than ``py.test``) as the recommended + command-line entry point + +Due to this history, it's diffcult to answer the question when pytest was started. +It depends what point should really be seen as the start of it all. One +possible interpretation is to pick Europython 2004, i.e. around June/July +2004.