接口测试Mock利器--moco runner是如何工作的?
1.什么是MOCO?
moco是一个搭建模拟服务器的工具,其支持API和独立运行两种方式。
API运行:通常是在junit等测试框架中使用
独立运行:是通过一个jar包开启服务
2.moco能解决什么问题?
Moco是针对HTTP集成而生的,不过,现在也有人把它用在其它需要一个模拟服务器的场景中。比如,在移动开发中,有人开发一个移动应用,需要有一个远端服务,但在开发时,这个服务还不存在,他就用Moco模拟了一个服务,保证移动应用可以顺利的开发。同样,也有人把它用在Web前端开发里,当我们的页面需要通过与服务器交互时,就可以用Moco模拟这样一个服务。这种做法在开发一个页面原型时,非常有用,因为那个时候,我们还来不及开发一个完整的服务。
3.moco在接口测试中的作用?
对于前端开发而言:moco可以模拟服务器,来对开发出来的页面,进行交互调试
那么一般接口文档输出后,测试人员可能需要提前进行接口用例的编写,而这时接口开发工作还没完成,如果对接口用例进行执行的前提是开发人员完成接口开发。这样,降低测试开发效率。
这时,如果测试人员使用moco框架,就可以在接口文档输出后,在接口开发完成前,设计用例过程中,使用moco搭建一个模拟服务器。在用例设计完成后,即使接口开发工作还未完成,也可以立即进行执行接口用例,在这个过程中可以修改、补充用例,在接口开发完成以后,只需要简单的去执行所有的接口用例脚本就 OK,省去了很大的工作量,并且这些完善的用例脚本,用自动化去执行,效果更佳。
4、Mock服务moco-runner Demo
下载moco-runner的Jar包:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.12.0/moco-runner-0.12.0-standalone.jar
准备环境:
Windows 并且安装Java环境。
5、Get请求如何模拟呢?
配置文件config.json
GET请求定义访问路径和数据格式,如下:
[{
"description":"这是一个带参数的get请求",
"request":
{
"method":"get",
"uri":"/login"
},
"response":
{
"text":"返回这是一个带参数的get请求"
}
}]
参数说明:
description是描述
request是请求
uri是请求路径
response是返回结果
text是返回的是文本类型内容
运行jar包,启动moco-runner服务
java -jar moco-runner-0.12.0-standalone.jar start -p 8801 -c config.json
参数说明:
java -jar 是启动jar文件命令
http -p 是访问协议和访问端口号
-c 是模拟的接口文件
启动服务之后便可以在浏览器中进行测试接口,输入地址:http://127.0.0.1:8801/login 会返回上述config.json文件中定义的文本内容,此处使用postman进行测试,其返回结果如下:
从上面结果可看出已经正常显示,不过中文显示乱码,需要在配置文件中加入编码格式,解决中文乱码问题,这里直接编辑config.json文件保存即可,服务会监听到配置文件的改动之后自动重启服务。
"headers":
{
"Content-Type":"text/html;charset=gbk"
}
6、Post请求如何模拟呢?
只是post的请求方式中传递数据的方式不一样了,所以只需要稍微修改一下config.json内容即可,修改如下:
[{
"description":"这是一个带参数的POST请求",
"request":
{
"method":"post",
"uri":"/login_post",
"forms":{
"name":"Ruancexiaosheng",
"pwd":"testpwd"
}
},
"response":
{
"text":"返回这是一个带参数的POST请求",
"headers":
{
"Content-Type":"text/html;charset=gbk"
}
}
}]
完成修改之后同样是通过运行jar包启动moco runner服务,然后使用接口访问,结果如下:
java -jar moco-runner-0.12.0-standalone.jar start -p 8801 -c config_post.json
上述的文件中的接口都是单独存放,当然,所有接口可以维护在一个文件,如下:
[{
"description":"这是一个带参数的get请求",
"request":
{
"method":"get",
"uri":"/login"
},
"response":
{
"text":"这是一个带参数的get请求",
"headers":
{
"Content-Type":"text/html;charset=gbk"
}
}
},
{
"description":"这是一个带参数的POST请求",
"request":
{
"method":"post",
"uri":"/login_post",
"forms":{
"name":"Ruancexiaosheng",
"pwd":"testpwd"
}
},
"response":
{
"text":"这是一个带参数的POST请求",
"headers":
{
"Content-Type":"text/html;charset=gbk"
}
}
}]
文章合集
Selenium | Appium | Jenkins | Jmeter
软件测试方法汇总 | Postman接口参数化 | 测试用例设计 | 安卓App抓包
视频教程
Selenium | Appium | Jenkins | Jmeter
往期推文:
Python 如何使用 HttpRunner 做接口自动化测试
为何Android 7.0 以上Charles和Fiddler无法抓取HTTPS包?
AWS与Docker
如何使用AWS EC2+Docker+JMeter构建分布式负载测试基础架构
Docker容器数据持久化和容器网桥连接
Docker删除image和container
Docker与VM虚拟机的区别以及Docker的特点
END
觉得不错,可以“点赞”和“在看”,或者转发、留言
精彩的内容要和朋友分享哦