У меня есть несколько тестов, которые я пометил соответствующим маркером. Если я запускаю pytest, они запускаются по умолчанию, но я бы хотел пропустить их по умолчанию. Единственный известный мне вариант — явно сказать «не маркер» при вызове pytest, но я бы хотел, чтобы они не запускались по умолчанию, если маркер явно не запрашивается в командной строке.
@hoefling нет. Я не хочу добавлять параметры командной строки. Я хочу запустить pytest без каких-либо параметров командной строки и получить все тесты Кроме, отмеченные, но если я запускаю с -k "marker", я хочу, чтобы они (и только они) выполнялись
Конечно, это не пример копирования и вставки, вам нужно удалить пользовательский аргумент и заменить одну строку, читающую аргумент; см. адаптированный пример в моем ответе.
@hoefling идеально. Мне не хватало знания config.option.keyword. Спасибо.
Небольшая модификация примера в Контролировать пропуск тестов в соответствии с параметром командной строки:
# conftest.py
import pytest
def pytest_collection_modifyitems(config, items):
keywordexpr = config.option.keyword
markexpr = config.option.markexpr
if keywordexpr or markexpr:
return # let pytest handle this
skip_mymarker = pytest.mark.skip(reason='mymarker not selected')
for item in items:
if 'mymarker' in item.keywords:
item.add_marker(skip_mymarker)
Примеры тестов:
import pytest
def test_not_marked():
pass
@pytest.mark.mymarker
def test_marked():
pass
Запуск тестов с маркером:
$ pytest -v -k mymarker
...
collected 2 items / 1 deselected / 1 selected
test_spam.py::test_marked PASSED
...
Или:
$ pytest -v -m mymarker
...
collected 2 items / 1 deselected / 1 selected
test_spam.py::test_marked PASSED
...
Без маркера:
$ pytest -v
...
collected 2 items
test_spam.py::test_not_marked PASSED
test_spam.py::test_marked SKIPPED
...
Вместо того, чтобы явно говорить «не маркер» при вызове pytest, вы можете добавить следующее в pytest.ini
[pytest]
addopts = -m "not marker"
Кажется, что пример в Контролировать пропуск тестов в соответствии с параметром командной строки соответствует вашему варианту использования.