Как запускать тесты, написанные для nose

pytest имеет базовую поддержку для запуска тестов, написанных для nose.

Предупреждение

Эта функциональность устарела и, вероятно, будет удалена в pytest 8.x.

Использование

После введите Установить pytest:

python setup.py develop  # make sure tests can import our package
pytest  # instead of 'nosetests'

и вы сможете запускать тесты в стиле nose и использовать возможности pytest.

Идиомы с поддержкой носа

  • setup() и teardown() на уровне модуля/класса/метода: любая функция или метод, вызванный setup, будет вызван во время фазы настройки для каждого теста, то же самое для teardown.

  • SkipTest исключения и маркеры

  • декораторы для монтажа/демонтажа

  • Атрибут __test__ в модулях/классах/функциях

  • общее использование носовых утилит

Неподдерживаемые идиомы / известные проблемы

  • unittest-стиль setUp, tearDown, setUpClass, tearDownClass распознается только на классах unittest.TestCase, но не на обычных классах. nose поддерживает эти методы и на обычных классах, но pytest намеренно этого не делает. Поскольку и nose, и pytest уже поддерживают setup_class, teardown_class, setup_method, teardown_method, не кажется полезным дублировать unittest-API, как это делает nose. Однако, если вы считаете, что pytest должен поддерживать unittest-спеллинг для простых классов, пожалуйста, напишите на issue #377.

  • nose импортирует тестовые модули с одинаковым путем импорта (например, tests.test_mode), но разными путями к файловой системе (например, tests/test_mode.py и other/tests/test_mode.py), расширяя семантику sys.path/import. pytest этого не делает, но в issue #268 есть обсуждение добавления некоторой поддержки. Обратите внимание, что nose2 choose to avoid this sys.path/import hackery.

    Если вы поместите файл conftest.py в корневой каталог вашего проекта (как определено pytest), pytest будет запускать тесты «в стиле носа» против кода ниже этого каталога, добавляя его в sys.path вместо того, чтобы запускать против вашего установленного кода.

    Вы можете столкнуться с необходимостью сделать это, если для установки проекта вы использовали python setup.py install, а не python setup.py develop или любой другой эквивалент менеджера пакетов. Установка с помощью develop в виртуальной среде, такой как tox, рекомендуется вместо этого шаблона.

  • доктесты в стиле nose не собираются и не выполняются корректно, также не работают фикстуры доктестов.

  • не распознается конфигурация носа.

  • Методы на основе yield не поддерживаются начиная с pytest 4.1.0. Они принципиально несовместимы с pytest, поскольку не поддерживают фикстуры должным образом, так как сбор и выполнение тестов разделены.

Переход от nose к pytest

nose2pytest - это скрипт на Python и плагин для pytest, помогающий преобразовывать тесты на базе Nose в тесты на базе pytest. В частности, скрипт преобразует вызовы функций nose.tools.assert_* в необработанные утверждения assert, максимально сохраняя формат исходных аргументов.

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