python - 如何使用 pytest 模拟请求?
问题描述
我正在编写一些单元测试代码,我想模拟requests
在我的函数中使用的模块:
import requests
def get_employee(id):
resp = requests.get(f'{__BASE_URL}/employee/{id}')
if resp.status_code == 404:
return None
return resp.json()
我尝试使用以下代码模拟它:
def test_get_employee(mocker):
get_request_mock = mocker.patch.object(get_employee, "resp")
print(get_request_mock)
get_request_mock.status_code = 200
get_request_mock.json.return_value = {'name': 'awesome-mock'}
resp = get_employee('random-id')
assert resp == {'name': 'awesome-mock'}
如何使用 mocker 模拟请求?有可能吗?
解决方案
您可以使用requests-mock ( PyPI ),有一个用于 pytest的夹具。
对于您的示例:
from correct.package import __BASE_URL
from requests import HTTPError
def test_get_employee(requests_mock):
test_id = 'random-id'
requests_mock.get(f'{__BASE_URL}/employee/{test_id}', json= {'name': 'awesome-mock'})
resp = get_employee('random-id')
assert resp == {'name': 'awesome-mock'}
def test_absent_employee(requests_mock):
test_id = 'does_not_exist'
requests_mock.get(f'{__BASE_URL}/employee/{test_id}', status_code=404)
with pytest.raises(HTTPError):
resp = get_employee(test_id)
推荐阅读
- css - 输入文本上的 CSS 过渡问题
- powerbi - DAX - 使用多个过滤器在线路级别 (SUMX) 进行计算
- kubernetes - Kubernetes集群传出流量IP
- python-3.x - Folium 地图标记中的温度数字
- javascript - 如何在 JavaScript 画布上显示 gif
- oracle - plsql 中的 stddev 函数给了我错误的值
- javascript - typescript 和 sweetalert2 未捕获的 ReferenceError:未定义导出
- laravel - 在 Laravel / PHPUnit 上测试时,事件监听器从不断言
- javascript - 没有调用 Office-fabric-react 文本字段的 onChange
- python - 字符串在添加到元组时拆分为字符