Как запускать тесты, написанные для 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, максимально сохраняя формат исходных аргументов.