一、什么是mock
mock指的就是使用mock创建出来的一个虚拟的接口
二、对于测试人员而言,我们为什么要使用mock
当我们进行接口测试时,如果对应的接口还没有开发好,但是我们又需要用到这个接口响应的信息,这个时候我们就可以使用mock技术给我们创建一个虚拟接口
三、如何实现mock
我们要创建mock数据,还有mock服务
要想创建mock服务,首先我们要下载一个mock工具,他是jar文件
我们可以在Github上 找到这个.jar包,这里分享一下地址
我们不需要下载它的所有项目,往下翻找到 Quick Start下载即可
注意这是个jar包,不要解压
接下来我们新建一个.json文件,写.json文件用什么写都行,HbuildX,Pycharm,VScode都可以,不推荐用记事本写,因为看着会很乱,缩进也不方便
[
{
"description":"这是我们使用mock模拟第一个接口",
"request":{
"uri":"/demo1"
},
"response":{
"text":"helloworld"
}
}
]
我们看这段代码,在这里面description就是代表注释,不会执行
注意只能用这种方法注释,什么// /**/ # 等各种语言的注释都不能用只能用description
request这面写的使我们的请求
里面是uri, 不是url,注意别写错了,后面跟一个接口地址,因为是我们模拟的接口,所以地址怎么写都行,看自己的爱好
response这里面写的是返回信息
这里我们让它返回一个text信息,叫做helloword!!!
这是最基本的写法,我们还可以设定它是什么类型的接口,比如GET和POST请求都可以模拟,还有提交方式,比如表单,JSON,XML等等,写完以后我们就启动服务
打开命令提示符
java -jar moco-runner-1.3.0-standalone.jar http -p 9090 -c test.json
moco-runner-1.3.0-standalone.jar是你下载的.jar包的放的位置,你放什么位置就替换上
-p 9090 我们给他提供一个端口号,最好是一万以外的端口号
http 开启http服务
test.json 这是上面写的json文件的地址
输入完我们就能看到开启了服务,如果输入发现报错无法启动服务,那大概率是里面内容有错误,注意标点符号,单词错误,符号只能是英文标点,不能用中文
然后打开浏览器输入http://localhost/demo1,我们就能访问这个接口,还能看到返回内容,如果不想用浏览器看我们也可以用Postman,操作一样
三、GET方式提交
mock 模拟get类型的有参提交:
[
{
"description":"这是我们使用mock模拟第一个接口",
"request":{
"uri":"/demo1",
"queries":{
"username":"lisi",
"password":"123456"
}
},
"response":{
"text":"helloworld have parmas"
}
}
]
这里提交了一个queries,提交内容是json格式的
一个文件可以写多个mock接口,之间用隔开就行了,他这个是热更新的,只要启动了服务在里面编辑就能实时使用,不需要再关闭开启服务
接下来我们用postman来访问这个接口
注意:GET请求后面跟提交信息
http://localhost/demo1?username=dice&password=123456
可以看到这里面手动写了一个username=dice&password=123456,这样才能正常看到返回信息,如果用postman我们只需要在下面写入这些信息就行
四、POST方式提交
mock 模拟post类型的表单提交
[
{
"description":"这是我们使用mock模拟第一个接口",
"request":{
"uri":"/demo1",
"method":"post",
"headers":{
"content-type":"application/x-www-form-urlencoded"
},
"forms":{
"username":"lisi",
"password":"123456"
}
},
"response":{
"text":"helloworld have parmas"
}
}
]
我们看到在request里面添加了一个
"method":"post"
这是表示post请求
"headers":{
"content-type":"application/x-www-form-urlencoded"
}
这里面写的是头部提交,其实可写可不写
"forms":{
"username":"lisi",
"password":"123456"
}
这时候我们可以看到 forms里面是请求,跟GET不一样,注意一下
五、post类型的json数据提交
{
"description":"这是我们使用mock模拟josn请求的提交",
"request":{
"uri":"/json/demo1",
"method":"post",
"headers":{
"content-type":"application/json"
},
"json":{
"username":"lisi",
"password":"123456"
}
},
"response":{
"text":"helloworld have parmas"
}
}
依旧是改变了请求提交,改为json
六、模拟post类型,响应数据是json
{
"description":"这是我们使用mock响应信息有响应的状态码的",
"request":{
"uri":"/demo3",
"method":"post",
"headers":{
"content-type":"application/json"
},
"json":{
"username":"lisi",
"password":"123456"
}
},
"response":{
"status":200,
"headers":{
"Content-Type":"application/json;charset=utf-8"
},
"json":{
"code":200,
"message":"操作成功",
"token":"34234234234jkjfojsfojsdifojofsd"
}
}
}
这里我们更改了返回的信息,更改为json的返回
注意:
"headers":{
"Content-Type":"application/json;charset=utf-8"
}
Content-Type不要写错大小写,写错的话返回信息中有中文就会乱码
七、模拟请求转发的操作
{
"description":"演示一个重定向操作",
"request":{
"uri":"/demo4"
},
"redirectTo":"https://www.baidu.com"
}
这个很简单,我们只要加上转发的地址就行了
八,链接到一起
[
{
"description":"这是我们使用mock模拟第一个接口",
"request":{
"uri":"/demo1"
},
"response":{
"text":"helloworld"
}
},
{
"description":"这是我们使用mock模拟GET接口",
"request":{
"uri":"/demo1",
"queries":{
"username":"lisi",
"password":"123456"
}
},
"response":{
"text":"helloworld have parmas"
}
},
{
"description":"这是第一个mock模拟的POST请求接口",
"request":{
"uri":"/dicedome1",
"method":"post",
"forms":{
"username":"DICE",
"password":"123456"
}
},
"response":{
"text":"hellowword!!!"
}
},
{
"description":"mock模拟的PSOTD的JSON接口",
"request":{
"uri":"/dicedome2",
"method":"post",
"headers":{
"content-type":"application/json"
},
"json":{
"username":"DICE",
"password":"123456"
}
},
"response":{
"text":"hellowword!!!"
}
},
{
"description":"模拟状态码200返回操作成功以及token",
"request":{
"uri":"/dicedome3",
"method":"post",
"headers":{
"content-type":"application/json"
},
"json":{
"username":"DICE",
"password":"123456"
}
},
"response":{
"status":200,
"headers":{
"description":"这里的Content-Type注意大小写,不然会乱码",
"Content-Type":"application/json;charset=utf-8"
},
"json":{
"code":200,
"message":"操作成功",
"token":"156hjkrd4153sdgrs2315"
}
}
},
{
"description":"模拟跳转",
"request":{
"uri":"/dicedome4"
},
"redirectTo":"https://www.bing.com"
}
]
把各个地方都连接起来,用逗号隔开