[转帖]Python-Mock接口测试
https://www.cnblogs.com/zhangwuxuan/p/12928850.html
前言
今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。
什么是mock?
测试桩,模拟被测对象的返回,用于测试
通常意义的mock指的就是mock server, 模拟服务端返回的接口数据,用于前端开发,第三方接口联调
为什么要mock?
1. 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以使用mock模拟被依赖接口,完成目标接口的测试。
2.单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试
3.模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实 这个和解决接口依赖是一样的原理。
4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,可以借助mock来模拟后台这个接口返回你想要的数据。
如何mock?
1.利用抓包工具比如fiddler
2.可以利用web框架模拟,Django Flask ---python web开发框架,Flask的特点就是,结构简单,容易入门

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import randomimport timefrom flask import Flask,request,json#实例化一个web服务对象app=Flask(__name__)#创建一个方法来处理请求#定义一个路由--访问服务的根目录就可以得到结果@app.route('/')def hello(): return '<h1>hello flask</h1>'#构造一个接受post请求的响应@app.route('/post',methods=['POST'])def test_post(): #处理接口发送过来的两个参数,将两个参数合并成一个字符串返回 d1=request.form['d1'] d2=request.form['d2'] return d1+d2if __name__ == '__main__': #运行服务,并确定服务运行的IP和端口 app.run('127.0.0.1','9090') |
启动mock服务端:
客户端代码:
import requests
|
1
2
3
4
5
6
|
body={ 'd1':'hi', 'd2':'falsk12312312'}resp=requests.post('http://127.0.0.1:9090/post',data=body)print(resp.text) |
结果如下:

二:mock接口测试实战案例
接口文档如下:
极简交易支付接口
接口路径: /trade/purchase
请求方式: POST
请求参数:
|
参数 |
类型 |
是否必填 |
最大长度 |
描述 |
示例值 |
|
out_trade_no |
String |
是 |
64 |
商户订单号,64个符以内、可包含字母、数字、下划线;需保证在商户端不重复 |
20150320010101001 |
|
auth_code |
String |
是 |
64 |
支付授权码,25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准 |
28763443825664394 |
|
subject |
String |
是 |
356 |
订单标题 |
Iphone6 16G |
|
buyer_id |
String |
否 |
28 |
买家的支付宝用id,如果为空,会从传入的码值信息中获取买家 ID |
2088202954065786 |
|
seller_id |
String |
否 |
28 |
如果该值为空,则默认为商户签约账号对应的支付宝用户ID |
2088102146225135 |
|
total_amount |
Price |
否 |
11 |
订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] 如果同时传入【可打折金额】和【不可打折金 额】,该参数可以不用传入;如果同时传入了 【可打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【可打折金额】+【不可打折金额】 |
88.88 |
响应参数:

请求头:键:Content-Type 值:application/json
请求示例:
{
'out_trade_no':'20150320010101001',
'auth_code':'28763443825664394',
'buyer_id':'2088202954065786',
'seller_id':'2088102146225135',
'subject':'Iphone6',
'total_amount':'88.88',
}
成功返回示例:
失败返回示例:
{'error': {'password': '密码错误'}, 'success': 'false'}
搭建mock服务端:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import randomimport timefrom flask import Flask,request,json#实例化一个web服务对象app=Flask(__name__)#创建一个方法来处理请求#定义一个路由--访问服务的根目录就可以得到结果#构造一个接受post请求的响应#处理极简交易接口@app.route('/trade/purchase',methods=['POST'])def purchase(): #拿到客户端返回的数据 res=json.loads(request.get_data()) out_trade_no=res['out_trade_no'] auth_code=res['auth_code'] data={ 'code': '40004', 'msg': 'Business Failed', 'sub_code': 'ACQ.TRADE_HAS_SUCCESS', 'sub_msg': '交易已被支付', 'trade_no': '2013112011001004330000121536', 'out_trade_no': '6823789339978248' } #把out_trade_no改成客户端发送过来的数据 data['out_trade_no']=out_trade_no data['trade_no']=time.strftime('%Y%m%d%H%M%S')+str(random.random()).replace('0.','') #验证授权码 if auth_code !='28763443825664394': return {'coode':'50000','msg':'请求码验证失败'} return dataif __name__ == '__main__': #运行服务,并确定服务运行的IP和端口 app.run('127.0.0.1','9090') |
客户端代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#利用request发送post请求给服务端import requestsdata={ 'out_trade_no':'20150320010101001', 'auth_code':'2876344382566439', 'buyer_id':'2088202954065786', 'seller_id':'2088102146225135', 'subject':'Iphone6', 'total_amount':'88.88',}resp=requests.post('http://127.0.0.1:9090/trade/purchase',json=data)print(resp.json()) |
返回结果如下:

这样就完成了mock接口测试了,小伙伴们学会了吗?
[转帖]Python-Mock接口测试的更多相关文章
- Python mock
在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法. 关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主, ...
- 使用 Python Mock 类进行单元测试
数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...
- Python Mock的入门(转)
原文:https://segmentfault.com/a/1190000002965620 Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西. ...
- 【转】基于Python的接口测试框架实例
下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...
- Python Mock的入门学习
一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象 ...
- 基于python的接口测试框架设计(三)接口测试的框架
基于python的接口测试框架设计(三)接口测试的框架 其实我这里用到的是unittest单元测试框架,,这个框架好就好在比较清楚,,setup terdown都可以处理一些初始化及完成后的工作 主要 ...
- 基于python的接口测试框架设计(二)配置一些参数及文件
基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里 毕竟导入的时候方便了一些 首先是url 图略 建 ...
- 基于python的接口测试框架设计(一)连接数据库
基于python的接口测试框架设计(一)连接数据库 首先是连接数据库的操作,最好是单独写在一个模块里, 然后便于方便的调用,基于把connection连接放在__init__()方法里 然后分别定义D ...
- 基于Python的接口测试框架实例
文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. ...
- python request接口测试笔记(1)
python request接口测试笔记(1) 涉及到的功能说明: 需要登录拿到token,才能进行下一个接口的请求 读取csv文件中的信息,作为接口的参数 将接口响应结果,写入csv文件,以便分析统 ...
随机推荐
- 6、Flutter 列表组件 滑动
列表有以下分类: 1.垂直列表 class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget bui ...
- Quartz.Net系列(八):Trigger之CalendarIntervalScheduleBuilder详解
所有方法图 CalendarIntervalScheduleBuilder方法 在SimpleScheduleBuilder基础上实现了日.周.月.年 WithInterval:指定要生成触发器的时间 ...
- Boost程序库完全开发指南:1.2-C++基础知识点梳理
主要整理了N多年前(2010年)学习C++的时候开始总结的知识点,好长时间不写C++代码了,现在LLM量化和推理需要重新学习C++编程,看来出来混迟早要还的. 1.const_cast <n ...
- 开源的代名词「GitHub 热点速览」
当开发者谈论开源时,通常会想到 GitHub,它不仅仅是一个代码托管平台,更是一个汇聚了全球开发者的社交中心.过去,开发者发布一款软件后,都是在自己的小圈子里默默努力和交流,现在通过 GitHub 平 ...
- html5鼠标拖动排序及resize实现方案分析及实践
对列表进行拖动排序,尺寸改变.之前一般会使用jQuery-UI.其通过mousedown.mousemove.mouseup这三个事件来实现页面元素被鼠标拖拽的效果.vue-drag-resize v ...
- 再谈BOM和DOM(4):DOM0/DOM2事件处理分析
JavaScript能够让网站对用户的各种操作及时做出"反馈",响应用户交互行为,而这些就是:DOM,事件以及事件处理 DOM就是操作的元素,这个看<再谈BOM和DOM(1) ...
- 【教程】React Native 应用中的代码混淆与安全性管理
混淆是指对源代码进行加密.重命名等操作,以增加代码的复杂度,使其难以理解和反编译. 在React Native中,混淆可以通过以下步骤实现: 1. 将JavaScript源代码转换为基于本机平台的 ...
- 如何在 EF Core 中使用乐观并发控制
什么是乐观并发控制? 乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低.在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时, ...
- 脑机接口 | 面向步态&神经电生理研究的非人灵长类模型与系统
近期,海南大学生物医学工程学院脑机芯片神经工程团队在Frontiers in Neuroscience期刊上发表了题为<面向步态&神经电生理研究的非人灵长类模型与系统>的学术论文. ...
- Linux day2:文件和文件夹相关命令 文件内容编辑命令 Linux常用目录 Linux重要文件
目录 问题说明 前期必备知识 系统运行命令 shutdown -c 快捷方式命令 ctrl+e 目录结构相关命令 mkdir -p 文件和文件夹相关命令 创建文件 touch 查看文件和目录 ls - ...