推荐两款HTTP请求Mock利器
1、背景
在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息,进行模拟接口各种场景的异常。
mock是指模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对所依赖的模块的测试。
一般有两种场景:
- 前端对后端接口的 mock,
- 后端服务之间的测试中涉及的mock,常常发生在单元测试的时候。
前端mock可以通过一些工具来完成:
- 使用抓包工具Fiddler,Charles 来实现,通过修改代理返回的数据,实现多种场景的测试。
- 使用一些API管理工具来模拟,比如yapi,Easy Mock 等
- 当然有编码能力的,也可以使用node.js,python的fastAPI来模拟
后端的 Mock 则是从接口的角度,如果一个接口A返回的数据需要依赖于另一个接口B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。
对于测试人员,对接口测试的时候,部分接口尚未开发完成,在约定了接口定义之后,也可以使用 Mock 来模拟。
今天给大家介绍一款Python Mock工具:requests-mock
2、工具介绍
requests-mock是一个用于模拟HTTP请求的Python库,它可以帮助开发人员在测试和开发过程中模拟各种HTTP请求和响应。使用requests-mock,可以用来模拟接口的各种场景,就像真正的服务器一样。
特点:
- 灵活性:requests-mock允许开发人员根据需要灵活地定义虚拟的HTTP响应,包括状态码、头部信息、响应体等。
- 易用性:requests-mock的API设计简单易用,开发人员可以很容易地集成到他们的测试和开发工作流程中。
- 可扩展性:requests-mock支持自定义的响应生成器和请求匹配器,可以满足各种复杂的测试需求。
适用场景:
- 单元测试:开发人员可以使用requests-mock模拟HTTP请求和响应,以便在单元测试中测试他们的代码。
- 集成测试:在进行集成测试时,requests-mock可以帮助开发人员模拟外部服务的行为,以验证系统的整体功能。
- 开发过程中的快速原型验证:在开发过程中,开发人员可以使用requests-mock快速验证他们的代码对于不同的HTTP响应的处理情况。
通过Mock能够帮助我们模拟系统各种行为,包括网络请求、文件读写、数据库操作、系统时间等等。这能够在测试代码时降低对外部依赖的需求,从而提高代码的可测试性。
3、安装
安装必要的模块:requests, requests_mock。
pip install requests
pip install requests_mock
4、使用示例
示例一:使用Mock模拟GET、Post请求
以下是一个使用requests-mock模拟GET请求和POST请求的示例:
import requests
import requests_mock
# 模拟GET请求
with requests_mock.Mocker() as m:
# 模拟post请求内容,返回的json格式,返回码为200
m.get('http://example.com/api/data', json={"name":"测试开发技术"}, status_code=200)
response = requests.get('http://example.com/api/data')
print(response.json())
# 模拟POST请求
with requests_mock.Mocker() as m:
# 模拟post请求内容,返回的json格式,返回码为200
m.post('http://example.com/api/submit',json={"name":"测试开发技术"}, status_code=201)
response = requests.post('http://example.com/api/submit', data={'key': 'value'})
print(response.json())
在上面的示例中,我们使用requests-mock模拟了一个GET请求和一个POST请求。在每个模拟的上下文中,我们使用requests_mock.Mocker()创建了一个模拟器,并使用m.get()和m.post()分别定义了GET请求和POST请求的模拟响应。然后,我们使用requests库发送了实际的GET和POST请求,并打印了模拟的响应内容。
示例二:requests-mock在测试脚本中的用法
import requests
import requests_mock
def get_data():
response = requests.get('http://example.com/api')
return response.json()
def test_get_data():
adapter = requests_mock.Adapter()
mock_response = {"status": "ok", "datas": [{"name": "狂师", "description": "公众号:测试开发技术"}]}
adapter.register_uri('GET', 'http://example.com/api', json=mock_response)
with requests.Session() as session:
session.mount('http://', adapter)
data = get_data()
assert data["status"] == "ok"
assert len(news_data["datas"]) == 1
assert news_data["datas"][0]["name"] == "狂师"
示例三:requests-mock模拟请求错误异常
正常请求接口的时候,都会出现接口异常情况,比如超时哈,或者请求服务器异常等操作,接下来小编通过requests-mock进行模拟服务器异常的情况。
import requests
import requests_mock
from requests.exceptions import ConnectionError, Timeout
def test_exception():
with requests_mock.Mocker() as m:
# 模拟请求超时处理
m.get('http://example.com/api',exc=Timeout)
# 通过pytest.raises进行捕捉异常,如果存在异常,则判断为pass
with pytest.raises(Timeout):
requests.get('http://example.com/api',timeout=3)
# 模拟服务器错误
m.get('http://example.com/api', exc=ConnectionError)
# 发送请求并断言是否抛出了预期的异常
with pytest.raises(ConnectionError):
requests.get('http://example.com/api')
推荐两款HTTP请求Mock利器的更多相关文章
- 推荐两款好用的反编译工具(Luyten,Jadx)
使用JD-Gui打开单个.class文件,总是报错// INTERNAL ERROR 但当我用jd-gui反编译前面操作获得的jar文件的时,但有一部分类不能显示出来--constants类,仅仅显示 ...
- 推荐两款远程管理Linux工具(基于Windows系统)
推荐两款远程管理Linux工具(基于Windows系统) 1.Xshell 百度百科:Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows ...
- 推荐两款PC健康小软件
一.前言 对于经常需要坐在电脑前工作一整天的人来说,健康问题是不得不关注的.下面推荐我一直在用的两款体积非常小(几百KB)的健康小软件,也许可以在无形中保护你.提醒你. 1. FadeTop 这是一款 ...
- 推荐两款Xcode插件:KSImageNamed & ColorSense
之前没怎么接触过Xcode插件,最近发现有人给Xcode做了一些方便编程的插件.今天就推荐两个我个人认为比较好的. 1.KSImageNamed 网站地址 KSImageNamed是一款方便填写图片文 ...
- 推荐两款富文本编辑器:NicEdit和Kindeditor
做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多.下面要推荐的两款富文本编辑器都是使用JS编 ...
- 推荐两款简单好用的图片放大jquery插件
一.zoomfiy.js 推荐可以从这里下载 使用说明: 使用该jquery 插件引入该插件的js:zoomfiy.js 或 min引入该插件的css:zoomfiy.css 或 min前后顺序都可j ...
- 推荐两款免费的优质云服务MongoLab和RedisLabs
http://blog.didispace.com/liang-kuan-mian-fei-de-you-zhi-yun-fu-wu-mongolabhe-redislabs/ 由于最近想给白猫计划资 ...
- [推荐]两款Flash上传插件(1)–CFUpdate文件批量上传组件
搞开发的同学都知道,网上可搜到的可用的Flash图片上传的组件少之又少,可定制界面,不需要安装组件,且可免费用于任何商业系统的,更是凤毛麟角,如果你和我一样,迫切需要一款这样的一款组件的话,不妨试试C ...
- 推荐两款Windows管理工具
1.babun(cgywin) 一款包含cgywin的类似linux shell的软件,熟练linux脚本的小伙伴们,一定会在她身上找到快感. 2.pslist 微软官方的一款很强大的bat脚本,很实 ...
- 推荐两款国人开发的html前段框架
1.http://www.h-ui.net/ H-ui前端框架官方网站 2.http://www.builive.com/ BUI是基于JQuery的富客户端UI框架
随机推荐
- 使用OpenFeign远程调用时请求头处理报错问题
1. 错误信息 basic.result.exception.OtherException: feign error:系统异常:Content type 'multipart/form-data;bo ...
- Java 接口:比较对象的大小
1 package com.bytezreo.interfacetest; 2 3 /** 4 * 5 * @Description 接口:比较对象的大小 6 * @author Bytezero·z ...
- 解决Windows下json.hpp中文乱码问题
文中使用的是 json 库,整个库的代码由一个单独的头文件json.hpp组成,用普通的C++11编写的.它没有库,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来很方便. 先引用头文件和命名空 ...
- 【python】使用百度api进行音频文件转写
[python]使用百度api进行音频文件转写 脚本目标: 智能云的音频文件转写文档只给了个demo,每次只能传1分钟以内的音频啥的,不好直接用,简单打包一下,做到把音频放文件夹,直接出转写结果就行了 ...
- 安装VMware——Unable to install all modules.See log /tmp/vmware-han/vmware-6098.log for detalls.(Exit code 1)的解决方法(模块加载失败)
这是编译失败的原因在VM社区有这样一种解决方案,亲测有效,帮助我自己解决的麻烦,所有在这分享,希望能够帮助到小伙伴:不要被接下来的代码吓倒因为这是github上项目,所以要先在ubuntu上安装git ...
- 逆向通达信Level-2 续三 (KTL python控制台动态调试)
python控制台逆向分析. python 跟 js 自如切换 逆向通达信Level-2 续十一 (无帐号登陆itrend研究版) 逆向通达信Level-2 续十 (trace脱壳) 逆向通达信Lev ...
- Linux IPC(进程间通信)摘要(信号灯,共享内存,消息队列,管道)(一)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 记录--vue中使用vue-video-player实现直播推流播放m3u8
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.安装 vue-video-player npm install vue-video-player --save npm install ...
- WPF 图片锯齿解决办法(保证解决!!!)
无非几个属性统统加上,不能解决我倒立洗头,日五档电风扇 RenderOptions.BitmapScalingMode="HighQuality" UseLayoutRoundin ...
- 【VMware ESXi】HP Z4G4 Workstation安装ESXi停留在Shutting down firmware services...的解决办法。
家里有台HP Z4G4 Workstation工作站,底层安装运行了VMware的ESXi Hypervisor,作为Homelab的All in one环境. 之前安装ESXi 8的时候有个问题,在 ...