Всем добрый день, вопрос состоит в следующем
У меня есть 3 окружения: dev stage prod
Соответственно для каждого из 3 окружений есть свой конфиг (Креды к базе данных, логины пароли ссылки и тд.)
Все это дело я собираю с помощью Jenkins+Pytest
Как мне передать в коммандной строке параметр для каждого из окружений?
Мне нужно что бы я мог запустить следующее
Соответствнно мне нужно как то принять аргумент и использовать файл с конфигом нужный.
Как использовать файл скрипт я напишу сам нет ничего сложного, а вот как мне принять этот аргумент есть вопрос
Резюмирую вопрос:
Нужна функция которая примет из строки типа:
pytest test_login.py --env ‘stage’
аргумент env=stage
и вернет его для дальнейшей обработки
Есть предположение что это что то должно быть в в conftest.py
Вопрос второй, может кто то знает как переопределить место хранения файла conftest.py не хочется его хранить в корне проекта.
conftest файл можно хранить в папке с тестами и этих файлов может быть несколько, но это фича связана с разграничением областей видимости. К примеру, есть 2 папки с тестами: foo и bar. Для тестов из папки foo будут применяться фикстуры из корневого conftest файла и из того conftest файла, что в папке foo, conftest из папки bar будет игнорироваться
Первые грабли на которые вы наступите при таком вынесении ключей - сменили базу на деве. Или не дай бог положили все в кубер без прямого доступа к базе стейджа. Вообщем случаев может быть очень много и вы будете создавать на каждый случай конфиг? У вас конфиги тогда будут отличаться одной строчкой. Вот вам совет пока вы не запилили много тестов на вашей реализации - делайте ключ в pytest_addoption на каждую сущность типа базы, юзеров, методов апи, локаторов - все отдельно. Да, разрастется строка запуска, но вам никто не мешает ее записать в sh скрипт. Но зато вы получите шикарную возможность изменить значение одного-двух ключей и тесты побегут уже в другом направлении.
Вам не нужно мудрить с этим. Просто создайте фикстуру, которая получает значение аргумента из pytest_addoption и прокидывайте в тест уже распарсеный конфиг из файла. Прокидывание в тест конфига это не зашкварно.
def pytest_addoption(parser):
"""Declaring the command-line options for test run"""
parser.addoption('--host',
default='staging',
help='host options: "staging", "production", or your own host for local testing')
parser.addoption('--headless',
default='true',
help='headless options: "true" or "false"')
parser.addoption('--browser',
default='chrome',
help='option to define type of browser')
parser.addoption('--browser_type',
default='mobile',
help='option to define web or mobile browser')
@fixture(autouse=True)
def driver_type(request):
"""Return type of browser mobile or web
:param request:
:return:
"""
browser_type = request.config.getoption('--browser_type')
yield browser_type
@fixture(autouse=True)
def email_password():
"""
Return email password
"""
password = os.environ.get('EMAIl_PASSWORD')
yield password
@fixture(autouse=True)
def host(request):
"""Return the target host
:param request:
:return:
"""
# get host value
cli_value = request.config.getoption('--host')
if cli_value == '' or cli_value == 'staging':
domain = HOST_PARAM_STAGING
elif cli_value == 'prod':
domain = HOST_PARAM_PROD
else:
domain = cli_value
yield domain