gpt4 book ai didi

python - 如何使用 Python 测试 API 客户端?

转载 作者:太空狗 更新时间:2023-10-29 23:55:10 30 4
gpt4 key购买 nike

我正在为一个流行的 API 开发客户端库。目前,我对所述客户端的所有单元测试都是针对测试帐户进行实际的 API 调用。

这是一个例子:

def test_get_foo_settings(self):
client = MyCustomClient(token, account)
results = client.get_foo_settings()

assert_is(type(results), list)

我想停止对我的测试帐户进行实际的 API 调用。

我应该如何解决这个问题?我应该使用 Mock 吗?模拟对客户端的调用和响应?

此外,我对使用此客户端库测试什么的原理感到困惑。我对测试实际的 API 不感兴趣,但是当涉及不同的因素时,比如被调用的方法、可能的返回结果的排列等——我不确定我应该测试什么和/或什么时候可以安全地测试做出假设(例如模拟回应)。

如能提供有关如何在我的场景中使用 Mock 的任何指导和/或示例,我们将不胜感激。

最佳答案

我个人会首先创建一个接口(interface)或函数调用,您的库使用它来实际联系服务,然后在测试期间为此编写自定义模拟。

例如,如果该服务使用 HTTP,而您正在使用 Requests 联系该服务:

class MyClient(…):
def do_stuff(self):
result = requests.get(self.service_url + "/stuff")
return result.json()

我会首先围绕请求编写一个小包装器:

class MyClient(…):
def _do_get(self, suffix):
return requests.get(self.service_url + "/" + suffix).json()

def do_stuff(self):
return self._do_get("stuff")

然后,为了测试,我会模拟出相关的功能:

 class MyClientWithMocks(MyClient):
def _do_get(self, suffix):
self.request_log.append(suffix)
return self.send_result

并在这样的测试中使用它:

def test_stuff(self):
client = MyClientWithMocks(send_result="bar")
assert_equal(client.do_stuff(), "bar")
assert_contains(client.request_log, "stuff")

此外,编写您的测试可能会有好处,这样您就可以针对您的模拟针对真实服务运行它们,这样如果事情开始失败,您可以快速找出谁是错了。

关于python - 如何使用 Python 测试 API 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717595/

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