gpt4 book ai didi

python - Pytest Fixtures - 参数化 - 调用 Fixture 一次

转载 作者:行者123 更新时间:2023-12-01 00:46:33 27 4
gpt4 key购买 nike

我有一个固定装置,它返回该端点名称(传入)的端点

名称是测试中设置的字符串。我在测试中每次调用端点(参数化)都搞砸了,现在我不知道如何在不每次调用端点的情况下获得相同的功能。

基本上,我只需要调用一次端点,然后在该文件中的所有测试之间传递该数据(理想情况下不需要创建类并在测试中调用它之类的东西。我有大约 12 个文件,每个文件都有类似的测试,并且我想要减少样板。理想情况下,如果它可以在没有全局变量的 fixture/参数化级别完成。

这是我到目前为止所拥有的:

@pytest.mark.parametrize('field', [('beskrivelse'), ('systemId')])
def test_intgra_001_elevforhold_req_fields(return_endpoint, field):
ep_to_get = 'get_elevforhold'
ep_returned = return_endpoint(ep_to_get)
apiv2 = Apiv2()
apiv2.entity_check(ep_returned, field, ep_to_get, False)


@pytest.fixture()
def return_endpoint():

def endpoint_initialisation(ep_name):
apiv2 = Apiv2()
ep_data = apiv2.get_ep_name(ep_name)
response = apiv2.get_endpoint_local(ep_data, 200)
content = json.loads(response.content)
apiv2.content_filt(content)
apiv2_data = content['data']

return apiv2_data

return endpoint_initialisation

最佳答案

创建return_endpoint作为范围session的固定装置,并在获取数据后将数据存储在字典中。 fixture 不返回初始化函数,而是返回访问字典的函数。

@pytest.mark.parametrize('field', [('beskrivelse'), ('systemId')])
def test_intgra_001_elevforhold_req_fields(return_endpoint, field):
ep_to_get = 'get_elevforhold'
ep_returned = return_endpoint(ep_to_get)
apiv2 = Apiv2()
apiv2.entity_check(ep_returned, field, ep_to_get, False)


@pytest.fixture(scope='session')
def return_endpoint():
def endpoint_initialisation(ep_name):
apiv2 = Apiv2()
ep_data = apiv2.get_ep_name(ep_name)
response = apiv2.get_endpoint_local(ep_data, 200)
content = json.loads(response.content)
apiv2.content_filt(content)
apiv2_data = content['data']

return apiv2_data

ep_data = dict()
def access(ep_name):
try:
return ep_data[ep_name] # or use copy.deepcopy
except KeyError:
ep_data[ep_name] = endpoint_initialisation(ep_name)
return ep_data[ep_name] # or use copy.deepcopy

return access

这里有一些注意事项。如果 endpoint_initialization() 返回的对象是可变的,那么您可能会在测试之间创建不需要的依赖关系。您可以通过返回对象的(深层)副本来避免这种情况。您可以使用 copy module为此。

关于python - Pytest Fixtures - 参数化 - 调用 Fixture 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940571/

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