1、mock测试
mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
2、mock作用
前后端开发进度不一致,如果前端开发速度快于后端,需要一个假的接口用于模拟后端返回;
项目需要用到第三方接口,如果第三方接口未开发好,或者第三方接口没有测试环境,为了保证进度,需要模拟接口用于调试。
3、mock不足
mock的模拟行为与真实行为可能存在差异(返回结果是自己构造的),其结果就是虽然基于mock的测试通过了,但是基于真实对象的测试可能会存在失败。
Mock 一个 Server ,构造一个假的服务返回预期的结果,也是为了进行自己的测试。主要适用于接口&性能测试,Mock 方案和程序使用的语言无关,可以用 Java 实现,也可以用 Python 实现等。
Flask的特点是:结构简单,容易入门,利用Flask编写一个最简单的接口,如果没有Flask,则需要安装;
Flask的安装
pip install flask
如果pip没有安装的话,先执行如下代码进行安装pip:
curl https://bootstrap.pypa.io/get-pip.py | python3
安装成功,可以通过
pip --version
查看pip的版本。
下面是Mock 一个 Server ,构造一个假的服务返回预期的结果。
服务端代码:
from flask import Flask,request,json
app=Flask(__name__)
@app.route('/trade/purchase' ,methods=['POST'])
def purchase():
res=json.loads(request.get_data())
out_trade_no=res['out_trade_no']
data = {
'code':'400004',
'msg':'Business Failed',
'sub_code':'ACQ.TRADE_HAS_SUCCESS',
'sub_msg':'交易已被支付',
'trade_no':'222222222222',
'out_trade_no':'20150320010101002'
}
data['out_trade_no'] = out_trade_no
if out_trade_no != '20150320010101002':
return {'code':'404','msg':'请求失败!'}
return data
if __name__ == '__main__':
app.run('127.0.0.1', '9999')
客户端代码:
import requests
data={
'out_trade_no':'20150320010101001',
'auth_code':'28763443843945664',
'buyer_id':'2088201954065786',
'seller_id':'2088102146225135',
'subject':'Iphone6',
'total_amount':'88.88',
}
resp=requests.post('http://127.0.0.1:9999/trade/purchase',json=data)
print(resp.json())
运行截图:
通过对真实的调用信息进行发起请求,生成模拟的返回结果,大大简化了测试对调用接口的依赖,大大提高测试效率。