gpt4 book ai didi

python - 将 fixture 传递给 PyTest 中的辅助函数?

转载 作者:行者123 更新时间:2023-12-04 20:31:16 25 4
gpt4 key购买 nike

我有一个需要在我的测试套件中使用 fixture 的函数。这只是一个帮助生成完整 URL 的小辅助函数。

def gen_url(endpoint):
return "{}/{}".format(api_url, endpoint)

我在 conftest.py 有一个固定装置返回 URL:
@pytest.fixture(params=["http://www.example.com"])
def api_url(request):
return request.param

@pytest.fixture(params=["MySecretKey"])
def api_key(request):
return request.param

最后,在我的测试函数中,我需要调用我的 gen_url :
def test_call_action_url(key_key):
url = gen_url("player")
# url should equal: 'http://www.example.com/player'
# Do rest of test here...

但是,当我这样做时,它会抛出一个错误,指出 api_url gen_url 时未定义叫做。如果我添加 api_url作为第二个参数,我需要将它作为第二个参数传递。那……不是我想做的。

我可以加 api_url作为 gen_url 的第二个参数无需通过测试?为什么我不能像 api_key一样使用它在我的 test_*功能?

最佳答案

如果你让 gen_url一个 fixture ,可以索取api_url没有明确传递它:

@pytest.fixture
def gen_url(api_url):
def _gen_url(endpoint):
return '{}/{}'.format(api_url, endpoint)
return _gen_url


def test_call_action_url(api_key, gen_url):
url = gen_url('player')
# ...
此外,如果 api_key仅用于发出请求,一个TestClient类
可以封装它,所以测试方法只需要客户端:
try:
from urllib.parse import urljoin # Python 3
except ImportError:
from urlparse import urljoin # Python 2

import requests

@pytest.fixture
def client(api_url, api_key):
class TestClient(requests.Session):
def request(self, method, url, *args, **kwargs):
url = urljoin(api_url, api_key)
return super(TestClient, self).request(method, url, *args, **kwargs)

# Presuming API key is passed as Authorization header
return TestClient(headers={'Authorization': api_key})


def test_call_action_url(client):
response = client.get('player') # requests <api_url>/player
# ...

关于python - 将 fixture 传递给 PyTest 中的辅助函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923876/

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