requests-mock:轻松模拟HTTP请求的利器
一、 简介
requests-mock一个python库,用于单元测试中模拟HTTP请求的响应,它可以进行来模拟接口的各种场景。
安装:
pip install requests-mock
二、 使用方法
模拟post请求
import requests import requests_mock def test_01(): with requests_mock.Mocker() as m: # 模拟post请求内容,返回的json格式,返回码为200 m.post('https://www.wxwxwx.com', json={'name': 'wx'}, status_code=200) # 根据模拟的请求进行通过requests进行发送模拟信息,查看返回结果内容 r = requests.post('https://www.wxwxwx.com', json={'name': 'wx'}) print(r.text) assert r.status_code == 200 assert r.json()['name'] == 'wx' test_01()
模拟动态post请求
import requests import requests_mock def test_01(): with requests_mock.Mocker() as m: # 模拟post请求内容,返回的json格式,返回码为200 def echo_response(request, context): data = request.json() return {'json': data, 'status_code': 200} m.post('https://www.wxwxwx.com', json=echo_response) data = {'name': 'wx'} r = requests.post('https://www.wxwxwx.com', json=data) print(r.text) assert r.status_code == 200 assert r.json()['json']['name'] == 'wx' test_01()
模拟请求错误异常
import pytest import requests import requests_mock from requests.exceptions import ConnectionError, Timeout def test_01(): with requests_mock.Mocker() as m: # 模拟请求超时处理 m.get('https://www.wxwxwx.com', exc=Timeout) # 通过pytest.raises进行捕捉异常,如果存在异常,则判断为pass with pytest.raises(Timeout): requests.get('https://www.wxwxwx.com', timeout=1) # 模拟服务器错误 m.get('https://www.wxwxwx.com/api', exc=ConnectionError) # 发送请求并断言是否抛出了预期的异常 with pytest.raises(ConnectionError): requests.get('https://www.wxwxwx.com/api')