Как указать 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 работал на меня

Shadfc
источник
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
17

Вы можете использовать

py.test -k 'not third'

это исключает все "третье" содержимое каталога.

Сальваторе Аванцо
источник
11

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

Ecatmur
источник
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"

RChat
источник
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

правильные вещи
источник