py.test 2.0.0: asserts++, unittest++, reporting++, config++, docs++

Добро пожаловать в pytest-2.0.0, новый крупный выпуск «py.test», быстрого и простого инструмента тестирования на Python. В нем появилось множество новых функций и улучшений, см. ниже краткий и подробный списки. Много давно устаревшего кода было удалено, в результате чего реализация стала намного меньше и чище. Смотрите новую документацию с примерами здесь:

Замечание по упаковке: pytest был частью дистрибутива «py» до версии py-1.3.4, но теперь ситуация изменилась: pytest-2.0.0 содержит только код, связанный с py.test, и ожидается, что он будет обратно совместим с существующим тестовым кодом. Если вы хотите установить pytest, просто введите одно из:

pip install -U pytest
easy_install -U pytest

Большое спасибо всем, кто сообщил о проблемах, а также людям, задающим вопросы или жалующимся. Особая благодарность Floris Bruynooghe и Ronny Pfannschmidt за их большой вклад в кодирование и многим другим за отзывы и помощь.

лучший, хольгер крикет

Новые возможности

  • новые вызовы через интерпретатор Python и из Python:

    python -m pytest      # on all pythons >= 2.5
    

    или из программы на языке python:

    import pytest ; pytest.main(arglist, pluginlist)
    

    подробности см. на сайте http://pytest.org/en/stable/how-to/usage.html.

  • новая и более качественная отчетная информация в выражениях assert при сравнении списков, последовательностей или строк.

    см. http://pytest.org/en/stable/how-to/assert.html#newreport

  • новая конфигурация через ini-файлы (setup.cfg или tox.ini распознаются), например:

    [pytest]
    norecursedirs = .hg data*  # don't ever recurse in such dirs
    addopts = -x --pyargs      # add these command line options by default
    

    см. http://pytest.org/en/stable/reference/customize.html

  • улучшена поддержка стандартного unittest. В целом py.test теперь должен лучше справляться с запуском пользовательских unittest.TestCases, таких как twisted trial или Django-based TestCases. Также теперь вы можете запускать тесты установленного пакета „unittest“ с помощью py.test:

    py.test --pyargs unittest
    
  • новая опция «-q», которая уменьшает многословность и выводит вывод «точка» в стиле nose/unittest.

  • многие и многие другие детали улучшений

Исправления

  • исправить issue126 - ввести py.test.set_trace() для отслеживания выполнения через PDB во время выполнения тестов, даже если захват продолжается.

  • исправить issue124 - повысить устойчивость отчетов к тестам, открывающим файлы на filedescriptor 1 (stdout).

  • исправление проблемы109 - файлы conftest.py братьев и сестер не будут загружаться. (и коллекторы директорий больше не могут быть настроены из conftest.py директории - это должно происходить как минимум на один уровень выше).

  • исправление проблемы88 (поиск пользовательских тестовых узлов из аргумента командной строки)

  • исправление проблемы93 перехват stdout/stderr при импорте conftest.py

  • исправление ошибки: собранные функции unittest теперь также могут иметь «pytestmark» на уровне класса/модуля

Важные замечания

  • Обычным способом использования py.test в python-коде до версии 2.0 был импорт «py», а затем, например, использование «py.test.raises» для помощника. Это остается актуальным и не планируется к отказу. Однако в большинстве примеров и внутреннего кода вы найдете «import pytest» и «pytest.raises» в качестве рекомендуемого по умолчанию способа.

  • pytest теперь сначала выполняет сбор всего набора тестов перед запуском любого теста. Это, например, меняет семантику вызова pytest_collectstart/pytest_collectreport. Некоторые плагины могут потребовать обновления.

  • Пакет pytest состоит из 400 LOC core.py и около 20 встроенных плагинов, что в сумме составляет примерно 5000 LOC, включая документацию. Справедливости ради следует отметить, что он также использует общий код из «pylib» и новый пакет «py» для помощи с файловой системой и интроспекцией/манипуляцией кодом.

(Несовместимые) удаления

  • py.test.config теперь доступен, только если вы находитесь в тестовом запуске.

  • была удалена следующая (в основном уже устаревшая) функциональность:

    • удалена поддержка определений узлов коллекции Module/Class/… в файлах conftest.py. Они не будут вызывать ничего особенного.

    • удалена поддержка вызова «run()» и «join» из API коллекций, существовавших до версии 1.0

    • удалено чтение значений опций из файлов conftest.py или переменных env. Теперь это можно сделать гораздо лучше и проще с помощью механизма ini-файлов и, в частности, записи «addopts».

    • удален атрибут «disabled» в тестовых классах. Используйте механизм пропуска и pytestmark для пропуска или xfail тестового класса.

  • py.test.collect.Directory больше не существует, и предоставить собственный объект «Directory» не представляется возможным. Если вы использовали это и не знаете, что делать, свяжитесь с нами. Мы что-нибудь придумаем.

    Обратите внимание, что pytest_collect_directory() по-прежнему вызывается, но любое возвращаемое значение будет проигнорировано. Это позволяет сохранить работоспособность старого кода, который выполнял, например, «py.test.skip()» в collect() для предотвращения рекурсии в деревья каталогов, если отсутствует определенная зависимость или опция командной строки.

более подробные изменения смотрите в Changelog.

Вернуться на верх