История¶
У pytest долгая и интересная история. Коммит first commit в этом репозитории датируется январем 2007 года, и даже один этот коммит уже говорит о многом: Репозиторий изначально был из библиотеки py (позже отделившейся в pytest), и изначально он был SVN-ревизией, перешел на Mercurial и, наконец, перешел на git.
Однако коммит говорит «создать новый ствол разработки» и уже довольно большой: 435 изменённых файлов, 58640 вставок(+). Это потому, что pytest изначально был создан как часть PyPy, чтобы облегчить написание тестов для него. Вот как он превратился из него в собственный проект:
Конец 2002 / начало 2003 года, PyPy was born.
Как уже упоминалось в той записи в блоге, с самого начала большое внимание уделялось тестированию. Существовали различные
testsupport
файлы поверх unittest.py, и уже в июне 2003 года Хольгер Крекель (@hpk42) refactored свой тестовый фреймворк для наведения порядка (pypy.tool.test
, но все еще поверхunittest.py
, без ничего pytest-подобного).В декабре 2003 года появился another iteration на улучшение ситуации с тестированием, автор Штефан Шварцер, под названием
pypy.tool.newtest
.Однако, похоже, он просуществовал недолго, поскольку примерно в июне-июле 2004 года начались работы над штукой под названием
utest
, предлагающей простые утверждения. Это похоже на начало чего-то pytest-подобного, но, к сожалению, неясно, где в то время находился код бегунка тестов. Ближайшая вещь, которая все еще существует, это this file, но это совсем не похоже на полноценный бегунок тестов. Что можно увидеть, так это то, что были various efforts работы Лоры Крейтон и Самуэле Педрони (@pedronis) по автоматическому преобразованию существующих тестов в новый фреймворкutest
.Примерно в то же время, для Europython 2004, @hpk42 started a project первоначально назвал проект «std», который должен был стать «дополнительной стандартной библиотекой» - уже закладывая принципы того, что позже стало pytest:
нынешние «батарейки в комплекте» очень полезны, но
некоторые из них написаны практически в java-подобном стиле, особенно unittest-framework
[…]
лучший API - это тот, которого не существует
[…]
пакет тестирования должен требовать как можно меньше шаблонного кода и обеспечивать большую гибкость
он должен предоставлять высококачественные трассировки и помощь в отладке
[…]
Прежде всего … забудьте об ограниченных «assertXYZ API» и используйте реальные вещи, например:
assert x == y
это работает с обычным python, но вы получаете бесполезные ошибки «assertion failed» без какой-либо информации
std.utest (волшебство!) фактически переинтерпретирует выражение утверждения и предлагает подробную информацию о базовых значениях
В сентябре 2004 года рождается список рассылки
py-dev
, который is nowpytest-dev
, но, к счастью, со всеми сохранившимися оригинальными архивами.Примерно в сентябре/октябре 2004 года проект
std
от was renamed доpy
иstd.utest
сталpy.test
. Это также первый случай, когда entire source code, кажется, стал доступен, при этом большая часть API все еще существует сегодня:py.path.local
, который постепенно исключается из pytest (в пользу pathlib) примерно 16-17 лет спустяИдея дерева коллекций, включая
Collector
,FSCollector
,Directory
,PyCollector
,Module
,Class
.Аргументы типа
-x
/--exitfirst
,-l
/--showlocals
,--fulltrace
,--pdb
,-S
/--nocapture
(-s
/--capture=off
сегодня),--collectonly
(--collect-only
сегодня)
В том же месяце библиотека
py
gets split off отPyPy
Казалось, что на некоторое время стало довольно тихо, и мало что произошло между октябрем 2004 года (удаление
py
из PyPy) и январем 2007 года (первый коммит в репозитории теперь-pytest). Однако, в списке рассылки были различные обсуждения возможностей/идей, и a couple of releases раз в пару месяцев:Март 2006: py 0.8.0-alpha2
Май 2007: py 0.9.0
Март 2008: py 0.9.1 (первый найденный релиз in the pytest changelog!)
Август 2008: py 0.9.2
В августе 2009 года была выпущена версия py 1.0.0, introducing a lot of fundamental features:
фанкарги/фиксаторы
plugin architecture, который и сегодня выглядит точно так же!
Различные default plugins, включая monkeypatch
Даже там, FAQ сказал:
Очевидно, что [вторая стандартная библиотека] была амбициозной, и именование, возможно, скорее преследует проект, чем помогает ему. Возможно, проект изменит название и, возможно, когда-нибудь разделится на разные проекты.
и это наконец произошло в ноябре 2010 года, когда pytest 2.0.0 was released как пакет, отдельный от
py
(но по-прежнему называемыйpy.test
).В августе 2016 года pytest 3.0.0 was released, который добавляет
pytest
(а неpy.test
) в качестве рекомендуемой точки входа командной строки
Из-за этой истории трудно ответить на вопрос, когда был запущен pytest. Это зависит от того, какой момент следует считать началом всего этого. Одна из возможных интерпретаций - Europython 2004, т.е. примерно июнь/июль 2004 года.