python - 如何为向 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
解决方案
上面的代码片段看起来像单元测试。而且,由于您在实际代码中使用 requests 模块,因此最好在编写单元测试时模拟 API 调用。
它不会从测试函数进行 API 调用,因为我们使用的是 python 模拟。使用 mock,我们使用 @patch 并指定 python 在我们实际进行 API 调用的位置,以便它知道要模拟什么。
它正在验证代码是否可以处理响应。作为一个原因,我们不想在每次进行单元测试时都对外部服务进行 API 调用。
总结一下——
当您进行实际的 API 调用时,您并没有进行单元测试,这更像是集成测试
当您想要进行单元测试时,您正在测试您的代码是否可以接受并处理预期的 API 调用响应,而无需实际进行调用。您可以通过使用模拟库(例如“响应”库,它将模拟响应注入到请求发出的调用中)来做到这一点。
如果这有帮助,我也很乐意为 API 请求的 Python 模拟提供帮助。
推荐阅读
- javascript - node.js – 检查单词是否在前一个单词中添加/更改了字母
- linux - Git 补丁系列使用 git send-email 创建和发送
- python-3.x - 如何在 cpanel 中为 cron 作业安装 python 库
- powerbi - 将多个不同的聚合连接到 PowerBI 中的行级数据集
- oracle - Spring JPA Equal条件与LocalDate的派生查询不起作用
- python - 用于处理bedpe格式的python包
- php - PHP在函数内填充数组
- json - JSON可以有一个布尔根元素吗
- python - 导入函数的权限问题
- python - Tensorflow 获取一个张量的数量