Как получить возвращаемое значение из Pytest фикстуры в функции, чтобы мне не нужно вызывать эту функцию с дополнительным параметром? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть следующее приспособление в conftest.py, которое возвращает словарь настроек среды, такой как пользователь, пароль и т. Д .:

@pytest.fixture
def envparams(request):
    env = request.config.getoption("--env")
    return env_params[env]

Тогда у меня есть модуль, как:

def request_master_url(envparams):
    cje_master_url = envparams['url']+'/'+test_master
    cje_user = envparams['user']
    cje_pass = envparams['password']
    local = testinfra.get_host("ssh://localhost")
    results = local.command(
                        'curl -L -I --user '+cje_user+':'
                        + cje_pass+' '+cje_master_url+'| grep HTTP\
                        |tail -1').stdout
    if '200 OK' in results:
        return True
    else:
        return False

и тест, который использует этот модуль, как:

def test_cje_high_availability(envparams, env_option, script_loc):
    workstation = testinfra.get_host('ssh://'+testinfra_hosts[0])
    if not security.request_master_url(envparams):
        print(test_master+' - is not available\n')
        create_team_master(test_master, envparams, script_loc)

Можно ли как-то избавиться от параметра envparams из функции модуля, чтобы я мог вызвать его без дополнительного параметра? как:

security.request_master_url(envparams)

Мне нужно настроить прибор только один раз за сеанс. Я пытался использовать:

@pytest.mark.usefixtures('envparams')
def request_master_url():

Но я не уверен, как получить значения, возвращаемые этим прибором.

1 Ответ

0 голосов
/ 06 декабря 2018

Ну, я сделал так, как подсказал.

Создана небольшая функция в conftest.py:

def get_env_params():
    env_name = pytest.config.getoption("--env")
    return env_params[env_name]

и вызывайте его из функций моего модуля, где это необходимо. Пример функции выглядит следующим образом:

def request_master_url(team_id):
    envparams = get_env_params()
    cje_master_url = envparams['url']+'/'+team_id
    cje_user = envparams['user']
    cje_pass = envparams['password']
    local = testinfra.get_host("ssh://localhost")
    results = local.command(
                        'curl -L -I --user '+cje_user+':'
                        + cje_pass+' '+cje_master_url+'| grep HTTP\
                        |tail -1').stdout
    if '200 OK' in results:
        return True
    else:
        return False

удалил ненужное приспособление из многих других функций и смог очистить мой код. Спасибо!

...