Mock测试&Moco框架
mock测试
:mock这个单词有“模拟”,“虚假”的意思,百度百科的定义mock测试指在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。简言之就是在前后端联调之前,供给前端使用的一个虚假的数据接口服务。moco框架
:moco是一个搭建模拟服务器的工具,它是GitHub上的一个开源项目,可模拟http,https,socket协议。其支持API和独立运行(standalone)两种方式,前者通常是在junit等测试框架中使用,后者则是通过运行一个jar包开启服务,本文使用的是standalone方式,更多用法可参考https://github.com/dreamhead/moco/blob/master/moco-doc/usage.md
Moco的启动和demo
到github上下载moco的jar包,Standalone Moco Runner下载地址,将jar包放在某个目录下,在同目录下新建json配置文件:demo.json,
1 2 3 4 5 6 7 8 9 10 11 12 |
[ { "description":"这是我们的第一个mock例子", "request":{ "uri":"/demo" }, "response": { "text":"Hello,Moco" } } ] |
将该目录用VS Code等编辑器或者终端程序打开,在终端中执行如下命令:java -jar jar包文件 协议类型 -p 端口号 -c json文件
,如本文的例子命令为
java -jar moco-runner-1.0.0-standalone.jar http -p 12306 -c demo.json

如图所示则为运行成功,在浏览器中输入
127.0.0.1:12306/demo
就能获取到text数据值"Hello,Moco",但是有部分中文数据出现了乱码,如果你安装了JDK,可以用WebStorm或者IDEA打开该目录,输入java -jar -Dfile.encoding=UTF-8 ./moco-runner-1.0.0-standalone.jar http -p 12306 -c demo.json
便可解决该问题。另外我们还可以修改hosts文件来实现fake一个域名地址,Windows操作系统找到C:\Windows\System32\drivers\etc
目录,将hosts文件用管理员权限打开并在最后添加一段映射,格式是跳转的ip地址 被修改的域名
,如图所示
这样通过data.com能跳转到我们的本地127.0.0.1的内容,同时我们在开启moco的命令中把端口改为80,就可以在本地通过域名访问接口啦

常见请求示例
Get请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[ { "description":"不带参数的get请求", "request":{ "uri":"/withGetDemo", "method":"get" }, "response":{ "text":"这是不带参数的get请求" } }, { "description":"带参数的get请求,p1,p2分别的参数1,参数2,名称可随便起,个数也可任意", "request":{ "uri":"/wihtGetDemobyParam", "method":"get", "queries":{ "p1":"hh", "p2":"good" } }, "response":{ "text":"this is a get method with paramter" } } ] |
后者的url为/wihtGetDemobyParam?p1=hh&p2=good
,返回值是"this is a get method with paramter"
Post请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[ { "description":"模拟一个post请求", "request":{ "uri":"/postdemo", "method":"post" }, "response":{ "text":"这是我的第一个mock的post请求" } }, { "description":"这是一个带参数的post请求", "request":{ "uri":"/postdemoparam", "method":"post", "forms":{ "name":"huhansan", "sex":"man" } }, "response":{ "text":"胡汉三带参数来了" } } ] |
和Get请求不同的是,此处用forms替换了queries,也可以使用json格式,但切记也用再次访问也用json格式传参
带Cookies的请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[ { "description":"这是一个带cookies信息的get请求", "request":{ "uri":"/get/with/cookies", "method":"get", "cookies":{ "login":"true" } }, "response":{ "text":"这是一个需要携带cookies信息的get请求" } }, { "description":"这是一个带cookies信息的post请求", "request": { "uri": "/post/with/cookies", "method": "post", "cookies": { "login": "true" }, "json": { "name": "huhansan", "age": "18" } }, "response":{ "status":200, "json":{ "huhansan":"success", "status":"1" } } } ] |
如出现跨域问题
,加入如下头部即可
1 2 3 4 5 6 7 |
"headers": { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "*", "Access-Control-Allow-Headers": "*", "Access-Control-Allow-Credentials": "true", "Content-Type": "application/json;charset=utf-8" }, |
参考链接https://blog.csdn.net/qq_32706349/article/details/80472445,https://www.jianshu.com/p/2270360a827f
文章评论(0)