第七章:MOCK接口框架的应用实战
写在前面:很机械的学完第六章,报错很多,每解决一个问题虽然都能很开心,但是又不懂为什么。第六章到最后了一直无法实现***,心态很崩。。。后面完全实现了再补博客,第七章比较容易敲,但是不会用哈哈哈哈(悲伤T~T)。
一:什么是mock接口测试?
Mock:模拟的、仿制的、虚假的。
Mock测试:在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用一个虚拟的对象来代替的测试方法。
接口Mock测试:在接口测试过程中,对于某些不容易构造或者不容易获取的接口,可以用一个模拟接口来代替。
Mock平台应该具备哪些功能:Get,post,重定向,意味着是一个产出,不仅意味着可以给测试,还可以给前端使用(当前后端分离开发,后端开发未结束,前端需要调用后端的接口进行调试时,需要模拟一个接口给前端使用)。
二:实现方式
使用mock框架搭建mock服务,本次学习的是使用Moco框架。
Moco框架可以完全模拟http协议。
首先下载并调用moco-runner-1.1.0-standalone.jar
在terminal中进入配置的文件,再输入:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupwithRedirect.json
//java -jar ./ 后面接下载下来的moco jar包, 再接http -p 端口号,再接-c json配置文件全称。
这里学了一个新概念,热部署:服务不用停止就能完成升级的操作。更改json文件时候,更改后不用重新启动就能实现。
三:具体的json编写。
(json是啥?)
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
以下每一段都是一个新的json文件。
1:浏览器输入:localhost:8899/demo
即能出现text中的“第一个mock框架demo”,8899是前面设置的端口号。
startup1.json
[ { "description": "这是我们的第一个mock例子", "request": { "uri": "/demo" }, "response": { "text": "第一个mock框架demo" } } ]
2:实现get请求和带参数的get请求。
当访问的时候,没有参数的输入是:localhost:8899/getdemo
有参数时候的输入是:localhost:8899/getwithparam?name=huhuhu&sex=woman
页面即能出现"text"中的文本。
startupGet.json
[ { "description": "这是一个不带参数的get请求", "request": { "uri": "/getdemo", "method": "get" }, "response": { "text": "实现不带参数的get请求" } }, { "description": "这是一个带参数的get请求", "request": { "uri": "/getwithparam", "method": "get", "queries": { "name": "huhuhu", "age": "18" } }, "response": { "text": "实现带参数的get请求~~~" } } ]
3:实现post和带参数的post请求
检验是否配置成功时候,不能在网页中输入了,因为是post的请求,应该使用jmeter
创建线程组,创建一个http的post请求,察看结果树。
当有参数时候,需要在参数栏目添加参数。
[ { "description": "这是一个没有参数的post请求", "request": { "uri": "/postdemo", "method": "post" }, "response": { "text": "这是我实现的没有参数的post请求!" } }, { "description": "带参数的post请求", "request": { "uri": "/postwithparam", "method": "post", "forms": { "name": "huhuhu", "sex": "woman" } }, "response": { "text": "带参数的post!~" } } ]
4:实现带cookies的post请求
cookies是什么?
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
是在jmeter里进行测试,要设定一个cookies管理器,添加名字和域名等等
[ { "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": "huhuhu", "age": "18" } }, "response": { "status": 200, "json": { "huhuhu": "success", "18": "alsosuccess", "status": "1" } } } ]
5:实现带header的post请求
信息头是什么?
HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送http请求(get或者post)的时候,往往后端需要一些验证信息,比如说web服务器需要带过去cookie给服务器进行验证,一般就是放在请求头(header)中,因为对于此类请求,在Jmeter中就可以通过HTTP信息头管理器,在添加http请求之前,添加一个HTTP信息头管理器,发请求头中的数据通过键值对的形式放到HTTP信息头管理器中。在往后端请求的时候就可以模拟web携带header信息了。
要在消息数据体中添加
{
** "name":"wangxixi",**
** "sex":"man"**
** }**
且添加信息头管理器
[ { "description": "这是第一个带header的post请求", "request": { "uri": "/post/with/headers", "method": "post", "headers": { "content-type":"application/json" }, "json": { "name": "wangxixi", "sex": "man" } }, "response": { "json":{ "wangxixi": "success", "status": 1 } } } ]
6:实现重定向
[ { "description": "重定向到百度", "request": { "uri": "/redirect" }, "redirectTo": "http://www.baidu.com" }, { "description": "重定向到一个自己得网页", "request": { "uri": "/redirect/topath" }, "redirectTo": "/redirect/new" }, { "description": "这是被重定向到得请求", "request": { "uri": "/redirect/new" }, "response": { "text": "成功重定向辣~" } } ]