Вы можете добавить флаги командной строки, которые можно использовать для включения ваших фикстур:
conftest.py
def pytest_addoption(parser):
parser.addoption('--option2', action='store_const', const=True)
parser.addoption('--option2', action='store_const', const=True)
Затем вы должны проверить эти аргументы в вашем приспособлении:
@pytest.fixture(name="fixture1", scope="session", autouse=True)
def fixture1(request):
# only use with option1 command line argument
if request.config.getoption("--option1"):
...
@pytest.fixture(name="fixture2", scope="session", autouse=True)
def fixture2(request):
# only use with option2 command line argument
if request.config.getoption("--option2"):
...
@pytest.fixture(name="fixture3", scope="session", autouse=True)
def fixture3(request):
# only use if option1 command line argument is not provided
if not request.config.getoption("--option1"):
...
Здесь я использовал autouse=True
, так как я ожидаю, что приспособления выполняют другой код настройки, ваше использование, конечно, может отличаться.
Теперь вы можете позвонить:
pytest
-> приспособление не будет применяться pytest --option1
-> будет применено приспособление1 pytest --option1 --option2
-> будут применены оба приспособления
Вы также можете добавить эти аргументы в свой pytest.ini
:
[pytest]
# always apply fixture2
addopts = --option2
EDIT: Что касается следующего вопроса о унаследованном приспособлении, вы можете сделать что-то вроде этого:
@pytest.fixture
def wait_for_sql_server(request):
if request.config.getoption("--my_option"):
...
@pytest.fixture
def wait_for_docker(request):
if not request.config.getoption("--my_option"):
...
@pytest.fixture(name="az_sql_db_inst")
def az_db_connection_fixture(
az_sql_creds, wait_for_sql_server, wait_for_docker):
...
EDIT2: Если вы не можете самостоятельно написать или адаптировать базовые приборы (wait_for_
в части EDIT вопроса), вы можете go немного другим способом.
Вы можете написать отдельные реализации своей базы fixture в отдельных плагинах и загрузите необходимый плагин в зависимости от конфигурации:
plugin_ docker .py
@pytest.fixture
def wait_for_service(wait_for_docker):
yield
plugin_server.py
@pytest.fixture
def wait_for_service(wait_for_sql_server):
yield
conftest.py
def pytest_addoption(parser):
parser.addoption('--docker', action='store_const', const=True)
def pytest_configure(config):
use_docker = config.getoption("--docker")
plugin_name = 'plugin_docker' if use_docker else 'plugin_server'
if not config.pluginmanager.has_plugin(plugin_name):
config.pluginmanager.import_plugin(plugin_name)
@pytest.fixture(name="az_sql_db_inst")
def az_db_connection_fixture(az_sql_creds, wait_for_service):
...
Светильники wait_for_service
- это просто оболочка вокруг самих светильников, но таким образом вы можете получить то же приспособление в обоих сценариях ios.