mock测试
今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。
什么是mock?
-
测试桩,模拟被测对象的返回,用于测试
-
通常意义的mock指的就是mock server, 模拟服务端返回的接口数据,用于前端开发,第三方接口联调
为什么要mock?
1. 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以使用mock模拟被依赖接口,完成目标接口的测试。
2.单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试
3.模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实 这个和解决接口依赖是一样的原理。
4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,可以借助mock来模拟后台这个接口返回你想要的数据。
如何mock?
1.利用抓包工具比如fiddler
2.可以利用web框架模拟,Django Flask ---python web开发框架,Flask的特点就是,结构简单,容易入门
一:利用flask编写一个最简单的接口
安装Flask, 在dos窗口输入:pip install flask
搭建mock服务端代码:
import random
import time
from 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+d2
if __name__ == '__main__':
#运行服务,并确定服务运行的IP和端口
app.run('127.0.0.1','9090')
启动mock服务端:
客户端代码:
import requests
body={
'd1':'hi',
'd2':'falsk12312312'
}
resp=requests.post('http://127.0.0.1:9090/post',data=body)
print(resp.text)
结果如下:
二:mock接口测试实战案例
接口文档如下:
极简交易支付接口
接口路径:?/trade/purchase
请求方式:?POST
请求参数:
响应参数:
请求头:键:Content-Type 值:application/json?
请求示例:
{
'out_trade_no':'20150320010101001',
'auth_code':'28763443825664394',
'buyer_id':'2088202954065786',
'seller_id':'2088102146225135',
'subject':'Iphone6',
'total_amount':'88.88',
}
成功返回示例:?
{
'code':'40004',
'msg':'Business Failed',
'sub_code':'ACQ.TRADE_HAS_SUCCESS',
'sub_msg':'交易已被支付',
'trade_no':'2013112011001004330000121536',
'out_trade_no':'6823789339978248'
}
失败返回示例:
{'error': {'password': '密码错误'}, 'success': 'false'}
搭建mock服务端:
import random
import time
from 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 data
if __name__ == '__main__':
#运行服务,并确定服务运行的IP和端口
app.run('127.0.0.1','9090')
客户端代码:
#利用request发送post请求给服务端
import requests
data={
'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接口测试了,小伙伴们学会了吗?
????????????? 【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】
一、Python编程入门到精通
二、接口自动化项目实战?
三、Web自动化项目实战
四、App自动化项目实战?
五、一线大厂简历
六、测试开发DevOps体系?
七、常用自动化测试工具
八、JMeter性能测试?
九、总结(尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!?
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!