Как указать py.test пропускать определенные каталоги?


91

Я попытался использовать norecursedirsпараметр внутри setup.cfg, чтобы указать py.test не собирать тесты из определенных каталогов, но, похоже, он игнорирует его.

[tool:pytest]
norecursedirs=lib/third

Когда я бегу, py.testя вижу, как он проходит тесты изнутри lib/third!


Кажется, что у меня есть py.testи они pytestоба проходят тесты и являются разными зверями. Странно, но pytestон не работает, потому что не загружает исключения из [pytest].
sorin

1
pytestвзято из logilab. Вы хотите py.test.
ecatmur

3
тоже попробуй сделатьnosecuredirs=lib/third/*
intelis

есть ли способ игнорировать некоторые папки в самом скрипте с помощью кода?
bicepjai 07

2
оказался здесь, потому что мне было любопытно, почему, черт возьми, мой pytest веб-приложения в локальной разработке настолько медленный ... Причина в том, что какой-то каталог загруженных ресурсов с вложенной структурой yy / dd / mm .... вызывает это действительно отстой! к счастью, [pytest] norecursedirs = resourcesв этом pytest.iniесть трюк! 💪
andilabs

Ответы:


86

py.test --ignore=somedir работал на меня


5
И --ignoreможет быть задано несколько раз , чтобы игнорировать несколько каталогов
феникс

Как пропустить определенные тесты вместо каталога
Раджат джайн 09

Вы можете использовать эту -kопцию, как показано в другом ответе ниже. См. «Запуск тестов по выражениям ключевых слов» на docs.pytest.org/en/latest/… . Здесь также могут быть полезны отметки. Отметьте свои тесты как "медленные" и т. Д., А затем используйте-k "not slow"
shadfc

3
Также можно использовать--ignore-glob для игнорирования путей к тестовым файлам на основе подстановочных знаков в стиле оболочки Unix. Например --ignore-glob=**/sandbox/*, игнорирует все файлы в любой sandboxпапке.
Ян М.

28

Если у вас несколько каталогов с разными родителями, вы можете указать разные --ignoreпараметры:

py.test --ignore=somedir --ignore=otherdir --ignore=etcdir

  • новая опция: --ignore предотвратит сбор указанного пути.
    Можно указывать несколько раз.

24

Я решил загадку: если раздел pytest находится в одном из возможных файлов конфигурации ( pytest.ini, tox.iniи setup.cfg), pytest не будет искать другие, поэтому убедитесь, что вы определили параметры py.test в одном файле.

Я бы предложил использовать setup.cfg.


9
Почему setup.cfg? Текущая документация, кажется, рекомендует два других
jebob

Я думаю, важно упомянуть, что если вы хотите использовать .iniфайл, вам нужно указать его pytest -c pytest.ini. по какой-то причине setup.cfgсодержимое было подхвачено автоматически.
therightstuff


11

norecursedirsдолжно сработать. Проверьте, есть ли у вас pytest.ini или другие файлы setup.cfg. Как вы вызываете py.test?


1
У меня есть setup.cfgправильные [pytest]и не исправленные файлы внутри, но, похоже, они игнорируются, и вместо этого он будет искать все файлы.
sorin

10

В моем случае проблема заключалась в отсутствии подстановочного знака. Для меня работает следующее:

[tool:pytest]
norecursedirs = subpath/*

тогда как просто norecursedirs = subpathне сделал.


Тоже самое. Хотя очень странное поведение.
azmeuk

3

Если вы используете setup.cfg, вы должны использовать его [tool:pytest]согласно http://doc.pytest.org/en/latest/example/pythoncollection.html

# содержимое pytest.ini
# также можно определить в файле tox.ini или setup.cfg, хотя имя раздела
# в файлах setup.cfg должно быть "tool: pytest"


0

Чтобы использовать pytest.ini(что рекомендуется, если вы не используете, и toxв этом случае tox.iniимеет смысл), позвоните pytestс помощью pytest -c pytest.ini.

Для того , чтобы не допустить мой образец not_me_1.pyи not_me_2.pyот тестирования или linted, мой pytest.iniвыглядят следующим образом :

[pytest]
addopts = --ignore-glob=not_me_*

[pycodestyle]
ignore = not_me_* ALL

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.