python - Python 单元测试失败的请求
问题描述
我正在尝试测试一个应该失败但我想返回一个值的 http 调用。但是我所做的测试没有通过覆盖范围:
def callAPI(self, tokenURL:str):
requestBuilder: RequestBuilder = RequestBuilder()
try:
response = requestBuilder.get(tokenURL)
return response.json()
# return "content"
except Exception as err:
Logger.error("An error occured while trying to call API "+ err)
return None
这是我的测试功能:
@responses.activate
def testCallDemFails():
responses.add(
responses.GET, 'http://calldem.com/api', json="{'err'}", status=500)
with pytest.raises(Exception):
demConfig = DemConfig()
resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
print("testCallAPIFail", resp)
assert resp == None
requestBuilder.get 方法只返回一个 request.get 函数。当我执行该函数时,我什至没有 testAPI 失败。你有什么想法 ?
解决方案
看起来测试函数没有将您正在使用的请求 URL 连接到您期望的响应 URL。http://callAPI.com/api/1/foobar
不匹配http://calldem.com/api
,测试响应也没有配置为正则表达式匹配,这将启用示例代码所暗示的子路径匹配。我猜测错误配置的 URL 映射返回的响应是 JSON 可解析的(或无),因此永远不会引发异常。
如果您尝试以下测试代码,它是否有效?:
import re
@responses.activate
def testCallDemFails():
responses.add(
responses.GET, re.compile('http://callAPI.com/api/.*'), json="{'err'}", status=500)
with pytest.raises(Exception):
demConfig = DemConfig()
resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
print("testCallAPIFail", resp)
assert resp == None
推荐阅读
- java - 如果语句返回空字符串的逻辑问题
- powershell - PowerShell - 将特定扩展移动到年/月/扩展文件夹?
- python - 有谁知道如何使用 yfinance 从 yahoo Finance 获取每周数据
- python - 预期条件等到可见 Selenium Python
- amazon-web-services - CLI 和 SDK 之间的 AWS Cloudwatch GetMetricData 差异
- python-3.x - 向数据框添加新类别
- if-statement - C#7 中的条件语句
- docker - 在不传递标志的情况下修改 ptrace
- deployment - netlify 重定向不适用于我的 create-react-app
- tensorflow - 无法从 tensorflow 导入 keras