如何从函数中的pytest固定装置获取返回值,所以我不需要使用附加参数调用此函数?

时间:2018-11-15 17:54:26

标签: python pytest fixtures

我在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 :(得分:0)

好吧,我已经按照建议的方法做了。

在conftest.py中创建了小函数:

for /f "skip=1" (...)

,并在需要时从我的模块函数中调用它。函数示例如下所示:

KB*

从许多其他功能中删除了不必要的固定装置,并能够大量清理我的代码。谢谢!