目录
- 一、什么是Moco
- 二、安装&配置
- 三、接口配置&测试
- 3.1 第一个简单的请求:
- 3.2 Get请求:
- 3.3 Post请求:
- 3.4 返回值为Json格式的请求:
- 3.5 带cookie信息才能访问的post请求:
- 3.6 重定向请求:
- 3.7 前后端联调mock实战:
- 四、搭建Moco服务器供其他人调用
一、什么是Moco
在开发过程中,经常会使用到一些http网络接口,而这部分功能通常是由第三方开发团队或者是后端同事进行开发的,在我们开发时不能给我们提供服务,这为我们的联调和测试造成了麻烦,这个时候就需要使用到mock测试。
Moco是一个简单搭建模拟服务器的程序库/工具:Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起请求满足一个条件时,它就给回复一个应答。
二、安装&配置
Jar包下载:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
Moco文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md
启动命令:
java -jar ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json
-p 就是port 端口号, -c 后面就是配置接口内容的json文件。
启动成功效果:
三、接口配置&测试
3.1 第一个简单的请求:
all.json文件中增加以下request&response内容
[{"description": "这是第一个demo","request": {"uri":"/demo"},"response": {"text":"这是第一个demo","headers":{"Content-Type":"text/html;charset=gbk"}}}
]
注意:moco模拟请求返回中文乱码问题,添加响应头编码格式为gbk,就可以解决返回结果中文乱码
"headers":{"Content-Type":"text/html;charset=gbk"}
测试接口请求结果:
3.2 Get请求:
{"description": "这是一个带参数的Get请求的Demo","request": {"uri": "/getWithParam","method": "get","queries": {"name": "张三","sex": "20"}},"response": {"text": "我张三会来了","headers":{"Content-Type":"text/html;charset=gbk"}}
}
测试接口请求结果:http://localhost:9090/getWithParam?name=张三&sex=20
3.3 Post请求:
{"description": "这是一个带参数的post请求","request": {"uri": "/postWithParam","method": "post","forms": {"name": "张三","sex": "man"}},"response": {"text": "我张三带着参数回来了","headers":{"Content-Type":"text/html;charset=gbk"}}
}
测试接口请求结果:
注意:带中文值的入参,如果换成x-www-form-urlencoded格式(post请求的默认格式),则会请求失败:
这是Moco目前的问题,没有解决,英文的入参则没有问题:
3.4 返回值为Json格式的请求:
{"description": "电话号码注册post请求","request": {"uri": "/postWithPhone","method": "post","forms": {"type": "1"}},"response": {"json":{"code": "0000","msg": "请求成功","data": {"userId": 111111,"phone": "12011111111","cardNo": "8000000000"}}}
}
测试接口请求结果:
3.5 带cookie信息才能访问的post请求:
{"description": "这是一个需要带有cookie信息才能访问的post请求","request": {"method": "post","uri": "/postWithCookie","cookies": {"login":"true"},"json": {"name": "zhangsan","age": "18"}},"response": {"status":200,"json": {"name":"张三","status": "1"}}
}
测试接口请求结果:
3.6 重定向请求:
{"description": "重定向到百度","request": {"uri":"/redirect"},"redirectTo":"http://www.baidu.com"
}
测试接口请求结果:
3.7 前后端联调mock实战:
- moco本地运行起来之后,后端server地址: 127.0.0.1:9090
- 通过前端页面操作请求来调用mock接口试验:
四、搭建Moco服务器供其他人调用
既然本地可以使用,那么放在服务器上去运行,则可以让更多的人(包括研发)使用,提供一个简易的mock服务。下载Moco的包到服务器上并解压,然后运行:
访问Moco服务:http://服务器IP:9090/postDemo
服务器上mock返回日志:
注意点:
- 前面说过本地运行时,如果返回内容有中文,需要加上一段header指定格式为gbk才能正常显示中文。测试时发现服务器上运行,mock返回内容Json文件中,反而需要去掉这一段,返回内容才能正常显示中文,有这一段反而会中文显示乱码:
"headers":{"Content-Type":"text/html;charset=gbk"
}
- 如果服务器上想让mock服务一直运行,使用命令:
nohup java -jar ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json > /dev/null 2> /dev/null &
如果只是在前面加nohup,会报错:
nohup: ignoring input and appending output to ‘nohup.out’
原因是nohup执行会产生日志,默认是写到nohup.out文件中,文件没有写入权限。需要配合后面的命令 > /dev/null 2> /dev/null & 将 nohup 的日志输出到 /dev/null,这个目录类似于linux的一个黑洞,会让所有到它这的信息自动消失。
如果想保留日志,可以新建一个文件,比如moco.log, 然后nohup时指定日志写到moco.log中:
nohup java -jar ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json >moco.log &
日志信息记录如下:
=====================================================================================
以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~