主要内容:
1.熟悉moco框架实现接口模拟
2.基于Flask框架实现模拟接口
1.1 什么是MOCK
mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
这个虚拟的对象就是mock对象.
1.2 MOCK应用场景
1.模拟第三方接口:第三方接口开发未完成或接口不稳定,业务测试需要提前进行接口测试。
2. 模拟后端接口:前后端分离项目,后端工没有完成接口开发,Mock模拟接口返回的数据。
3. 测试场景模拟:测试场景进行测试时需要了解真实对象如何被调用
4. 生产环境接口:业务接口不方便调用,防止产生脏数据等等
1.3 MOCO框架
Moco 是类似一个 Mock 的工具框架,一个简单搭建模拟服务器的程序库/工具,下载就是一个JAR包
MOCO特点:
1.只需要简单的配置request、response等即可满足要求
2. 支持http、https、socket,非常灵活
3. 支持在request 中设置 Headers , Cookies , StatusCode
4. 支持GET、POST、PUT、DELETE等请求方式
5. 无需环境配置,有java环境即可:安装环境必须先安装好jdk
6. moco采用热部署,修改配置后,立刻生效,无需重启服务。
只需要维护接口,也就是契约即可。
7. 对可能用到的数据格式都支持,如json、text、xml、file
8. 能与其他工具集成,如Junit、Maven、Gradle
1.4 moco下载安装
下载方式:直接获取现成的jar包(推荐)
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.3.0/
按需选择相应版本下载
1.5 模拟接口json配置
运行moco前建立一个json文件,因为模拟接口相关配置是在json文件里配置的。
熟悉并理解json格式的配置非常关键。
{
"description":"鉴权接口-mock",
"request":{
"method":"POST", #约定方法,支持GET、POST、PUT、DELETE等请求方式
"uri":"/api/generateToken", #约定uri
"headers":{ #约定请求头
"Content-Type":"application/json"
},
"json":{ #约定请求体参数-json
"appid":"wcX78980055XNGD999452",
"serect":"qoghzgKYTNyrqw88766DH"
}
},
"response":{ #约定响应头
"headers":{
"Content-Type":"application/json"
},
"status":200, #约定返回状态码
"json":{ #约定响应体
"status": "200",
"errorCode": "SUCCESS",
"msg": "ok",
"data": {
"Token": "wViSR7spVXW889GNKeOY",
"softwareType": "APP"
}
}
}
}
1.6 启动moco服务
step1:cd /xx/moco/ //jar包所在文件夹
step2:
java -jar moco-runner--standalone.jar http -p 12306 -c foo.json
http代表这个模拟的是http请求
-p 12306 定义是服务端口号
-c foo.json 模拟对象配置json文件名`
2.基于Flask框架实现模拟接口
from flask import Flask, render_template, jsonify, request
import json
from flask import request
app = Flask(__name__)
@app.route('/api/demo', methods=['POST'], strict_slashes=False)
def api_login():
data = request.get_json()
print(' url= {url}, body= {body}'.format(url=request.url, body=json.dumps(data, ensure_ascii=False)))
if data["var1"] == "value1" and data["var2"] == 'value2':
return jsonify({
"status": "200",
"errorCode": "SUCCESS",
"msg": "ok",
"data": {
"data": "xxxxxxxxxxxx",
"softwareType": "xxxx"
}
})
else:
return jsonify({"errorCode": "10021","msg": "systemError!"})
@app.route("/importData", methods=['GET','POST','PUT','DELETE'],strict_slashes=False)
def api_test():
if request.method == 'POST':
return jsonify({"code":"100200","msg":"importSuccess!"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5555', debug=True, ssl_context=('server.crt', 'server.key'))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)