1.mock是什么
不容易构造、获取的对象,用一个虚拟的对象来替代他,这个虚拟的对象就是mock。
场景:前后端分离的项目,后端工程师还没有完成接口,可以通过mock的方式先虚拟这些接口返回回来进行代替,提高工作效率。
mock实现方式:通过json文件添加脚本关键字
,来模拟各种情况下的请求和返回值。
脚本关键字
:cookies、header、重定向等各种参数。
注意事项:mock是热更新,启动jar包服务之后,即使修改了json文件中的内容,也不需要重启服务就生效。
2.mock需要了解的概念
mock需要了解mock数据和mock服务。
- mock数据:即mock一个对象,写入一些预期值,通过它进行自己想要的测试。比如:easymock、mockito、wiremock、jmockit。主要用于单元测试。
- mock服务:mock一个sever,构造一个依赖的服务并给予他预期的服务返回值,适合集成测试。如moco框架。
moco框架:mock的工具框架,一个简单搭建模拟服务器的程序库/工具,下载一个jar包。特点如下:
- 只需要简单的配置request、response等
- 支持http、https、socket协议
- 支持在request中设置Headers、cookies、statuscode等
4.对GET、POST、PUT、DELETE等请求方式 - 无需环境配置,有java环境即可
- 修改配置后,立刻生效。只需要维护接口
- 支持多种数据格式,如JSON、Text、XML、File等
- 可与其他工具集成,如Junit、Maven
3.moco框架
- moco框架jar包下载:gitlab下载moco的jar包:https://github.com/dreamhead/moco
- 配置json文件
json文件,用来模拟不同的请求,返回不同的响应。
>test.json文件
[{
"description":"demo", #注释(描述)
"request":{ #请求的值
"uri":"/demo1" #接口的统一资源标识符,可以根据模拟的接口自行定义
},
"response":{ #响应的值
"text":"Hello,demo1" #返回的值
}
}]
- 启动moco
moco项目是采用java开发,需要优先安装jdk。
输入命令:java -jar moco-runner-1.1.0-standalone.jar http -p 9090 -c test.json
其中
jar包的名称可根据自己下载的jar包版本来写
http代表这个模拟的是http请求
-p 9090 定义是端口号
-c test.json 是我们编辑的那个json文件名。
浏览器访问:http://localhost:9090/demo1
4. moco中json脚本关键字
headers
cookies
text、json
redirectTo
>1.约定URI
[{
"description": "demo1=约定URI",
"request": {
"uri": "/demo1"
},
"response": {
"text": "Hello,demo1"
}
}]
>2.约定请求参数
[{
"description": "demo2=约定请求参数",
"request": {
"queries": {
"key1": "abc",
"key2": "123"
}
},
"response": {
"text": "Hello,demo2"
}
}]
>demo3:约定请求方法
[{
"description":"demo3=约定请求方法",
"request":{
"method":"DELETE"
},
"response":{
"text":"Hello,demo3"
}
}]
>demo4:约定请求头
[{
"description":"demo4=约定请求头",
"request":{
"headers":{
"Content-Type":"application/xml"
}
},
"response":{
"text":"Hello,demo4"
}
}]
>demo5:约定请求体参数-form
[{
"description":"demo5=约定请求体参数-form",
"request":{
"forms":{
"key1":"abc"
}
},
"response":{
"text":"Hello,demo5"
}
}]
>demo6:约定请求体参数-json
[{
"description":"demo6=约定请求体参数-json",
"request":{
"headers":{
"Content-Type":"application/json"
},
"json":{
"key1":"value1",
"key2":"value2"
}
},
"response":{
"text":"Hello,demo6"
}
}]