pytest-2.5.0: теперь сообщений об ошибках - НОЛЬ!

pytest-2.5.0 - это большой исправляющий релиз, результат двух дней исправления ошибок сообщества плюс многочисленные дополнительные работы от многих людей и репортеров. Релиз должен быть полностью совместим с 2.4.2, существующими плагинами и наборами тестов. Мы стремимся поддерживать этот уровень с нулевым количеством сообщений об ошибках, потому что не очень весело, если ваш инструмент тестирования имеет ошибки, не так ли? Однако при условии: при отправке сообщения об ошибке, пожалуйста, предоставьте четкую информацию об обстоятельствах и простой пример, воспроизводящий проблему.

Конечно, трекер вопросов сейчас не пуст. У нас осталось много «улучшений», которые мы, надеюсь, сможем решить в 2014 году с вашей помощью.

Для тех, кто использует более старые версии Python, обратите внимание, что pytest не тестируется автоматически на python2.5 из-за того, что virtualenv, setuptools и tox больше не поддерживают его. Ручная проверка показывает, что в основном он работает нормально, но он не будет частью автоматизированного процесса выпуска релизов и, следовательно, может сломаться в будущем.

Как обычно, текущая документация находится по адресу

и вы можете обновиться с pypi через:

pip install -U pytest

Особая благодарность за помощь в работе над этим выпуском выражается Анатолию Бубенкову, Флорису Бруйнооге, Марку Абрамовицу, Ральфу Шмитту, Ронни Пфанншмидту, Дональду Стаффту, Джеймсу Лэну, Робу Деннису, Джейсону Р. Кумбсу, Матье Агопяну, Вирджилу Дюпрасу, Бруно Оливейре, Алексу Гейнору и другим.

веселись, хольгер крикет

2.5.0

  • исключил python2.5 из автоматического тестирования релиза самим pytest, что означает, что он, вероятно, скоро сломается (но все еще работает с этим релизом, мы уверены).

  • упрощена и исправлена реализация вызова финализаторов, когда задействованы параметризованные фикстуры или аргументы функций. Финализация теперь лениво выполняется во время установки, а не в «фазе разрушения». Хотя сначала это может показаться странным, это помогает убедиться, что мы правильно обрабатываем установку/разрушение даже в сложном коде. Код на уровне пользователя не должен пострадать, если только он не реализует хук pytest_runtest_teardown и не ожидает, что определенные экземпляры фикстур будут снесены внутри (очень маловероятно и в любом случае было бы ненадежно).

  • PR90: добавьте опцию –color=yes|no|auto для принудительного выбора режима раскраски терминала («auto» используется по умолчанию). Спасибо Марку Абрамовицу.

  • исправить issue319 - правильно отображать юникод в ошибках утверждения. Большое спасибо Floris Bruynooghe за полный PR. Также это означает, что теперь мы зависим от py>=1.4.19.

  • исправление issue396 - корректная сортировка и финализация class-scoped parametrized тестов независимо от количества методов в классе.

  • исправление проблемы323 в лучшую сторону – параметризация теперь никогда не должна вызывать ошибки Runtime Recursion, поскольку лежащий в основе алгоритм переупорядочивания тестов по областям/по приспособлениям больше не является рекурсивным (раньше он был рекурсивным по хвостовым вызовам, что могло привести к проблемам для более чем >966 нефункциональных скопированных параметров).

  • исправление проблемы290 - теперь есть предварительная поддержка параметризации с повторяющимися одинаковыми значениями (иногда полезно проверить, работает ли вызов во второй раз так же, как и в первый).

  • закрыть issue240 - документировать, как именно работает импорт модулей pytest, обсудить два распространенных варианта компоновки тестовых каталогов, и как это взаимодействует с пакетами PEP420-namespace.

  • исправить issue246 исправить порядок финализаторов на LIFO для независимых фикстур, зависящих от параметризованной фикстуры с масштабированием выше функции. (это потребовало определенных усилий, поэтому, пожалуйста, отнеситесь к сложности этого предложения :) Спасибо Ralph Schmitt за точный пример отказа.

  • исправление проблемы 244 путем внедрения специального индекса для параметров, чтобы использовать индексы только для запароленных идентификаторов тестов

  • исправить проблему 287, запустив все финализаторы, но сохранив исключение из первого неудачного финализатора и повторно подняв его, так что снос все равно будет неудачным. Мы поднимаем первое неудачное исключение, потому что оно может быть причиной неудач других финализаторов.

  • исправить упорядочивание, когда mock.patch или другие стандартные декораторы-обертки используются с тестовыми методами. Это исправляет проблему346 и должно помочь со случайными сбоями при сборе «xdist». Спасибо Ronny Pfannschmidt и Donald Stufft за помощь в выявлении проблемы.

  • исправление issue357 - специальный случай выражения «-k», позволяющий фильтровать простые строки, которые не являются допустимыми выражениями python. Примеры: «-k 1.3» фильтрует все тесты с параметром 1.3. «-k None» фильтрует все тесты, в названии которых есть «None», и наоборот «-k „not None“». Ранее эти примеры приводили к синтаксическим ошибкам.

  • исправить проблему384, удалив код поддержки trial, поскольку улучшения в unittest compat позволяют trial обрабатывать ее самостоятельно

  • не скрывать ImportError, когда при импорте плагина возникает ошибка. исправление проблемы375.

  • исправление проблемы275 - разрешить использование светильников и светильников autouse для запуска текстовых файлов doctest.

  • исправить проблему380, заставив –resultlog полагаться только на longrepr вместо атрибута «reprcrash», который существует только иногда.

  • решить проблему122: разрешить @pytest.fixture(params=iterator) путем раннего разложения в список.

  • исправление совместимости pexpect-3.0 для собственных тестов pytest. (исправляет проблему 386)

  • разрешить вложенные маркеры параметризации-значения, спасибо Джеймсу Лану за PR.

  • исправить обработку юникода с помощью нового API monkeypatch.setattr(import_path, value). Спасибо Робу Деннису. Исправляет проблему371.

  • исправлена работа с юникодом в junitxml, исправлена проблема 368.

  • В режиме перезаписи утверждений на Python 2 исправлено обнаружение кодировочных файлов cookie. См. выпуск #330.

  • заставить «–runxfail» превратить императивные вызовы pytest.xfail в отсутствие операций (он уже нейтрализовал маркеры pytest.mark.xfail).

  • улучшено взаимодействие pytest / pkg_resources: Загрузчик AssertionRewritingHook, совместимый с PEP302, теперь правильно регистрирует себя в setuptools/pkg_resources, чтобы метод pkg_resources.resource_stream работал правильно. Исправляет проблему366. Спасибо за расследование и полный PR Джейсону Р. Кумбсу.

  • фикс pytestconfig теперь является session-scoped, поскольку это один и тот же объект во время всего выполнения теста. Исправляет проблему370.

  • избежать одного удивительного случая неисправности/перепутывания маркеров:

    @pytest.mark.some(lambda arg: ...)
    def test_function():
    

    не будет работать корректно, потому что pytest предполагает, что @pytest.mark.some уже получает функцию для оформления. Теперь мы по крайней мере определяем, является ли этот arg лямбдой, и таким образом пример будет работать. Спасибо Алексу Гейнору за то, что напомнил об этом.

  • xfail тест на pypy, который проверяет неправильную кодировку/ascii (pypy не выдает ошибку). исправляет проблему 385.

  • внутренне заставить varnames() работать с __init__ классов, хотя сейчас это не нужно самому pytest. Также исправлено кэширование. Исправляет проблему 376.

  • исправить issue221 - правильно обрабатывать импорт namespace-пакета без __init__.py.

  • рефакторинг внутренней обработки FixtureRequest, чтобы избежать обезьяньего исправления. Одним из положительных эффектов для пользователя является то, что объект «request» теперь можно использовать в закрытиях.

  • исправлено сравнение версий в pytest.importskip(modname, minverstring)

  • исправить проблему377, уточнив в документации nose-compat, что pytest не дублирует unittest-API в «простое» пространство имен.

  • исправление подробного отчета для тестовых функций @mock’d

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