Пишу тесты с использованием фреймворка pytest. Есть необходимость запускать тесты используя опции командной строки.
Структура такая: файл #conftest где описываю фикстуры для трех разных тестов и файл #test в котором описаны три разных теста соотвественно. Под каждую фикстуру свой тест, то есть fixture1 - test1, fixture2 - test2
и все в двух файлах.
Я решил использовать пайтестовский pytest_addoption (наследуется от argparse).
В файле #conftest записываю опиции:
def pytest_addoption(parser):
parser.addoption("--url1", action="store", default="None", help="For service_1")
parser.addoption("--url2", action="store", default="None", help="For service 2")
parser.addoption("--url3", action="store", default="None", help="For service 3")
Далее описываются фикстуры для каждого теста:
pytest.fixture()
def use_url1(request):
return request.config.getoption("-url1")
@pytest.fixture()
def requests_get_service_1(use_url1):
return requests.get(use_url1)
#########################
@pytest.fixture()
def use_url2(request):
return request.config.getoption("-url2")
@pytest.fixture()
def request_get_service_2(use_url2):
return requests.get(use_url2)
#########################
@pytest.fixture()
def use_url3(request):
return request.config.getoption("-url3")
@pytest.fixture()
def request_get_service_3(use_url3):
return requests.get(use_url3)
Далее все прокидывается в тесты.
Опции командной строки должны позволять выбрать один из URL, который тестируем или все.
Проще говоря каким образом описать фикстуры так, чтобы при запуске командной строки я указывал одну из трех опции (например "--url2" ya.ru) и файл исполнял фикстуру и тесты только с url2, а остальные фикстуры и тесты он не трогал?
полагаю что можно описать условием, но это не точно:
if что-то == "--url2":
запустить фикстуру request_get_service_2 и передать в тест для этой фикстуры
else:
pass