Допустим, у меня есть pytest светильник, установленный в моем файле conftest.py, который выглядит как:Автоматическое оформление pytest.mark основано на приспособлении
def live_fixture():
# network access here...
pass
Я использую этот же прибор во многих тестовых функций, говорят, что test_spam. ру имеют некоторые функции тестирования:
@pytest.mark.live
def test_one(live_fixture):
assert 1
def test_one():
assert 2
@pytest.mark.live
def test_three(live_fixture):
assert 3
Я использую @pytest.mark.live
украшение на первые и третьи тестовые функции, потому что эти два теста оба зависит от прибора live_fixture
, который выходит по сети и делает вещи. Обоснование: мне нравится, когда надежное подмножество моих тестов проходит в автономном режиме, например, например,
py.test -m "not live" test_spam.py --blockage
будет надежно проходить (используя изящную pytest-blockage модуль для обеспечения соблюдения ограничений нет-сети доступа).
Но оформление украшения @pytest.mark.live
на каждой тестовой функции, которая использует live_fixture
, является утомительным и подверженным ошибкам. Есть ли какой-нибудь способ объявить, что любая функция тестирования, которая его использует, должна автоматически иметь приложенное к ней украшение @pytest.mark.live
или каким-то образом обнаружить внутри файла test_spam.py то, что test_one
и test_three
используют это live_fixture
и таким образом должны быть эффективно оформлены @pytest.mark.live
?
Это действительно опрятное решение, спасибо! Я также надеялся автоматически применить украшение 'pytest.mark.skipif' на любые тестовые функции, используя' live_fixture', вы знаете, если это возможно? –
@JoshKupershmidt Да, add_marker также принимает объект MarkDecorator в качестве входных данных, а 'pytest.mark.skipif' возвращает объект MarkDecorator. Итак, все, что вам нужно сделать, это создать маркер skipif и добавить его. Например: 'marker = pytest.mark.skipif (condition, reason = '')', затем 'item.add_marker (marker)' –
Очень аккуратно, спасибо! –