Context
Я пытаюсь добиться декоратора, который, в зависимости от аргумента командной строки, изменит способ запуска теста:
import pytest
from functools import wraps
def magic():
# obtain extra_bit
extra_bit = ...
def wrapper(f):
if extra_bit:
@wraps(f)
def test_func(*args, **kwars):
f(*args, **kwars)
else:
@wraps(f)
def test_func(*args, **kwargs):
assert 0
return test_func
return wrapper
Вызов этого декоратораas:
@magic(4)
def test_this():
assert 0
Интерфейс вызова важен, так как здесь не должен появляться аргумент командной строки (так как пользователь декоратора никогда с этим ничего не делает).
Перефразировано из документации pytest
(https://docs.pytest.org/en/latest/example/simple.html)
Довольно просто сделать аргументы командной строки доступными в качестве приборов для тестирования функций в pytest:
import pytest
def pytest_addoption(parser):
parser.addoption('--extra_bit', action='store_true')
@pytest.fixture
def extra_bit(request):
return request.config.getoption('--extra_bit')
и затем использовать их в тесте
def test_this(extra_bit):
assert extra_bit
Однако , эти приборы работают только при использовании в определении функции test_
, но не для произвольных функций в тестовом модуле.
Вопрос
Как я могу получить аргументы командной строки из pytest, если не через test_
аргументы / фиксаторы функций?