doc/en/history.rst
pytest has a long and interesting history. The first commit <https://github.com/pytest-dev/pytest/commit/5992a8ef21424d7571305a8d7e2a3431ee7e1e23>__
in this repository is from January 2007, and even that commit alone already
tells a lot: The repository originally was from the :pypi: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 <https://www.pypy.org/>__, 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 <https://morepypy.blogspot.com/2018/09/the-first-15-years-of-pypy.html>__.
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 (:user:hpk42)
refactored <https://mail.python.org/pipermail/pypy-dev/2003-June/000787.html>__
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 <https://foss.heptapod.net/pypy/pypy/-/commit/02752373e1b29d89c6bb0a97e5f940caa22bdd63>__
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 <https://foss.heptapod.net/pypy/pypy/-/commit/0735f9ed287ec20950a7dd0a16fc10810d4f6847>,
but that doesn’t seem like a complete test runner at all. What can be seen
is that there were various efforts <https://foss.heptapod.net/pypy/pypy/-/commits/branch/default?utf8=%E2%9C%93&search=utest>
by Laura Creighton and Samuele Pedroni (:user:pedronis) at automatically
converting existing tests to the new utest framework.
Around the same time, for Europython 2004, @hpk42 started a project <http://web.archive.org/web/20041020215353/http://codespeak.net/svn/user/hpk/talks/std-talk.txt>__
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 <https://mail.python.org/pipermail/pytest-dev/>__ pytest-dev,
but thankfully with all the original archives still intact.
Around September/October 2004, the std project was renamed <https://mail.python.org/pipermail/pypy-dev/2004-September/001565.html>__ to
py and std.utest became py.test. This is also the first time the
entire source code <https://foss.heptapod.net/pypy/pypy/-/commit/42cf50c412026028e20acd23d518bd92e623ac11>__,
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 laterCollector,
FSCollector, Directory, PyCollector, Module,
Class-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 <https://foss.heptapod.net/pypy/pypy/-/commit/6bdafe9203ad92eb259270b267189141c53bce33>__
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
:pypi:a couple of releases <py/0.8.0-alpha2/#history> every
couple of months:
in the pytest changelog <https://github.com/pytest-dev/pytest/blob/main/doc/en/changelog.rst#091>__!)In August 2009, py 1.0.0 was released, introducing a lot of fundamental features <https://holgerkrekel.net/2009/08/04/pylib-1-0-0-released-the-testing-with-python-innovations-continue/>__:
plugin architecture <http://web.archive.org/web/20090629032718/https://codespeak.net/py/dist/test/extend.html>__
which still looks very much the same today!default plugins <http://web.archive.org/web/20091005181132/https://codespeak.net/py/dist/test/plugin/index.html>,
including
monkeypatch <http://web.archive.org/web/20091012022829/http://codespeak.net/py/dist/test/plugin/how-to/monkeypatch.html>Even back there, the
FAQ <http://web.archive.org/web/20091005222413/http://codespeak.net/py/dist/faq.html>__
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 <https://mail.python.org/pipermail/pytest-dev/2010-November/001687.html>__
as a package separate from py (but still called py.test).
In August 2016, pytest 3.0.0 :std:ref:was released <release-3.0.0>,
which adds pytest (rather than py.test) as the recommended
command-line entry point
Due to this history, it's difficult 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.