Moco接口框架的应用实战
一、moco框架的基本功能
- moco是一个模拟接口请求和发送的测试框架,包括但不局限于get请求,post请求,cookies和heades等等,是github上一个开源的测试框架,官网:https://github.com/dreamhead/moco,下载moco框架地址https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.2.0/
- 下载moco框架,下载完成后是一个jar包,将该jar包导入到idea中
在与mocojar包同级的目录下新建一个txt文件,用于说明如何启动moco服务
启动服务
java -Dfile.encoding=UTF-8 -jar ./moco-runner-1.2.0-standalone.jar http -p 8888 -c startupGet.json
Dfile.encoding=UTF-8
表示以UTF-8的编码启动,如果不加这个编码,有可能访问接口会出现乱码
-p
表示以哪个端口启动
-c
表示启动哪个json文件的内容,这里必须是json文件格式,这里的json文件可以写绝对路径,json文件也可以放到另外目录
http
表示访问该服务的协议
由于该文件中jar包和json文件放在同一目录,故jar包的路径写为./moco-runner-1.2.0-standalone.jar
二、模拟get请求
- 在和jar包同级的目录下新建一个json文件,json文件的内容有2中写法
第一种写法:
[
{
"resource": {
"name": "targets",
"get": [{
"id": "*",
"response": {
"json": {
"code": 1,
"message": "rest风格的不带参数的get请求"
}
}
}]
}
}
]
这里targets
是自己定义的名称,*
表示id可以为任何值,json的对象表示返回的code是1,message是“rest风格的不带参数的get请求”
第二种写法
[
{
"description": "不带参数的get请求",
"request": {
"uri": "/api/first" ,
"method":"get"
},
"response": {
"text": "这是不带参数的get请求"
}
}
]
description
描述此会话的用途。它只是用作注释,在运行时将被忽略
requests
请求的路径参数方法等等,可以不写,不写的时候访问该接口时不需要添加路径
response
请求的返回值
上面请求返回的结果为:
以上2种都是模拟get的请求,但是2中的写法不同,第一种get请求的参数不需要用?
拼接,第二种,如果需要参数则需要用?
拼接,如
[
{
"description": "带参数的get请求",
"request": {
"uri": "/api/withParam",
"method": "get",
"queries": {
"id":"1",
"name": "faith"
}
},
"response": {
"text": "翠花姐回来了!!!"
}
}
]
访问后的效果
三、模拟post请求
1. 不带参数
模拟post请求的第一种方式
[
{
"resource": {
"name": "targets",
"post": [
{
"response": {
"status": 201,
"headers": {
"Location": "/targets/123"
}
}
}
]
}
}
]
模拟post请求的第二种方式
[
{
"description": "不带参数的post请求",
"request": {
"uri": "/api/post",
"method": "post"
},
"response": {
"text": "这是不带参数的post请求"
}
}
]
访问截图
2. 带参数的post请求
带参数的post请求有2种方式,一种是form表单的提交方式,一种是json格式的提交方式
- form表单的提交方式默认的提交类型是
application/x-www-form-urlencoded; charset=UTF-8
{
"description": "带参数的post请求",
"request": {
"uri": "/api/withPost",
"method": "post",
"forms": {
"name": "faith",
"sex": "man"
}
},
"response": {
"text": "翠花姐带参数来了!!!"
}
}
请求的截图
响应成功后的截图
- json格式的提交方式
{
"description": "json格式的post请求",
"request": {
"uri": "/api/jsonParam",
"method": "post",
"json": {
"name": "marry",
"age":"18"
}
},
"response": {
"json": {
"message": "success",
"data": {
"sex": "women",
"score": "90"
}
}
}
}
这里模拟的是请求参数是json格式的,返回参数也是json格式
得到的响应结果为:
四、模拟cookies
- get请求中method就写
get
,post请求就写post
,别的没有区别
{
"description": "模拟cookies",
"request": {
"uri": "/api/withCookie",
"method": "get",
"cookies": {
"cookie": "fdsfdsjewobxgow825wgwe621"
}
},
"response": {
"json": {
"message": "cookies模拟成功"
}
}
}
访问带cookie的请求时,需要在jmeter中添加cookie管理器,cookie管理器中的配置如下,其中,127.0.0.1
和请求中的填写一致,不能填写localhost
,/
表示跟目录下的所有地址访问都生效
响应的结果为
- 在模拟的响应中可以添加
status
属性
{
"description": "模拟cookies",
"request": {
"uri": "/api/withCookie",
"method": "post",
"cookies": {
"cookie": "fdsfdsjewobxgow825wgwe621"
}
},
"response": {
"json": {
"message": "cookies模拟成功",
"status": 0
}
}
}
五、模拟headers
header信息在get请求和post请求中都一样,以下是以post请求为例
{
"description": "模拟header",
"request": {
"uri": "/api/withHeader",
"method": "post",
"headers": {
"content-type": "application/json"
}
},
"response": {
"json": {
"message": "header模拟成功",
"status": 200
}
}
}
访问该接口的响应为
访问该接口需要在jmeter中添加信息头管理器,管理器里面添加:"content-type": "application/json"
,如果要带参数,就在request
对象中添加json
格式的内容
六、模拟重定向
- 重定向到百度
{
"description": "模拟重定向",
"request":{
"uri": "/redirect"
},
"redirectTo": "http://www.baidu.com"
}
- 重定向到自己写的地址
[
{
"description": "重定向到自己写的地址",
"request": {
"uri": "/redirect/path"
},
"redirectTo": "/newPath"
},
{
"description": "被重定向到的请求",
"request": {
"uri": "/newPath"
},
"response": {
"json":{
"status": 200,
"message": "success",
"data": "true"
}
}
}
]
由于这是一个get请求,不写method
默认是get请求,所以可通过浏览器访问,输入http://localhost:8888/redirect/path,访问后的效果
七、当请求的内容和响应的内容过长时,可以通过json文件写内容
[
{
"description": "请求和响应都写在json文件里面",
"request": {
"uri": "/jsonFile",
"method": "get", //post请求就写成post
"file": {
"json": "request_file.json" //参数的json文件,绝对路径
}
},
"response" :
{
"file" : "response_file.json", //响应的json文件,绝对路径
"charset": "GBK" //响应的编码格式
}
}
]