gpt4 book ai didi

python - 如何从函数中的 pytest fixture 获取返回值,这样我就不需要使用附加参数调用该函数?

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:29 34 4
gpt4 key购买 nike

我在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)

我只需要在 session 中设置此装置一次。我尝试使用:

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

但是,我不确定如何获取从此装置返回的值。

最佳答案

嗯,我已经按照 Hoefling 的建议做了。

在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

从更多函数中删除了不必要的固定装置,并且能够清理我的代码很多。谢谢!

关于python - 如何从函数中的 pytest fixture 获取返回值,这样我就不需要使用附加参数调用该函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53325313/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com