首页 > 解决方案 > 如何为向 Web 发出 API 请求的函数编写单元测试代码?

问题描述

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


编辑:添加测试代码

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

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

标签: pythonwebtestingpython-requestspytest

解决方案


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

它不会从测试函数进行 API 调用,因为我们使用的是 python 模拟。使用 mock,我们使用 @patch 并指定 python 在我们实际进行 API 调用的位置,以便它知道要模拟什么。

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

总结一下——

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

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

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


推荐阅读