如何为向 Web 发出 API 请求的函数编写单元测试代码?

Dav*_*kim 3 python testing pytest web python-requests

我正在使用 pytest 为我的 python 函数编写单元测试代码。这些功能与requests模块一起使用,使我们能够轻松地与网络服务器通信。问题是函数通信的 Web 服务器不会返回相同的值。例如,函数进行通信以www.toolmarket.com询问多少钱Tommy drill。但有时,Tommy drill不在网上商店的列表中。在这种情况下,我的测试代码返回f. 对于这种功能的代码我该如何编写测试代码呢?


编辑:添加测试代码

def test_get_data():
    assert Info(None, None, None).get_data("Tommy drill") == (
        "id" : "KRG552100411"
    )

Run Code Online (Sandbox Code Playgroud)

我想做上面那样的测试。Tommy drill这只是商店里的商品之一。但问题是有时,该项目会从列表中消失。所以测试返回f

小智 6

上面的代码片段看起来像单元测试。而且,由于您在实际代码中使用 requests 模块,因此最好在编写单元测试时模拟 API 调用。

它不会从测试函数进行 API 调用,因为我们使用 python 模拟。对于模拟,我们使用 @patch 并指定 python,我们实际上在其中进行 API 调用,以便它知道要模拟什么。

它正在验证代码是否可以处理响应。因此,我们不想每次进行单元测试时都对外部服务进行 API 调用。

总结一下——

当您进行实际的 API 调用时,您并不是在进行单元测试,这更像是集成测试

当您想要进行单元测试时,您需要测试您的代码是否可以接受并处理预期的 API 调用响应,而无需实际进行调用。您可以通过使用模拟库(例如“响应”库,它将模拟响应注入到请求发出的调用中)来完成此操作。

如果这有帮助,我也很乐意为 API 请求的 Python Mocking 提供帮助。