1、postman从接口调试到自动化测试:
1、自动判断执行是否成功。 -通过代码 来进行结果的断言。
2、多个接口如何批量运行。 -通过 postman的 collection 进行运行。
3、测试数据管理方式
4、工作中如何定时执行或者将自动化测试结合到研发体系中。
2、Postman断言:
1、想清楚断言的标准是什么,断言的对象是什么。
断言什么? 返回内容
返回行: 状态码
返回头: 可以携带某些信息 一般很少关注。
返回体: 验证重点是返回体。
2、postman 里 怎么完成断言:
tests菜单(其实是执行请求之后,得到返回了再执行的内容)中,编写断言脚本。
1、在tests编辑中,用//表示注释,是不执行的代码,说明文字。
可以用 ctrl+/ 快速注释一行。
2、常用的断言模板:
Status Code:Code is 200 断言返回状态码是200
Response Body:Contains string 断言返回体包含某个字符串
Response Headers:Content-Type header check 断言返回体中的头域信息
<pre data-language="javascript" id="inPj9" class="ne-codeblock language-javascript" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959">// 判断返回的状态码是否为200的测试
pm.test("返回的状态码是否为200", function () {
// function中的内容是真正执行的判断操作。
pm.response.to.have.status(200);
});
// 判断返回头中的内容。
pm.test("返回头有内容", function () {
pm.response.to.have.header("Access-Control-Allow-Metho");
});
// 表示判断返回体包含一个字符串
pm.test("返回体中包含成功", function () {
//返回中的文本内容
pm.expect(pm.response.text()).to.include("成功");
});</pre>
最常用的:
Response Body:JSON value check 断言返回结果json中的字段值
<pre data-language="javascript" id="IlK6P" class="ne-codeblock language-javascript" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959">// 判断返回体和指定内容完全相等。
//注意:使用body的时候,获取到的是原始格式字符串的内容,中文等特殊字符以unicode编码呈现,所以断言的预期结果中,也要写unicode编码,记得用\u来转义\u,否则postman依然会认为这是中文。
pm.test("返回内容是正确的", function () {
pm.response.to.have.body('{"code": 1000, "msg": "\u606d\u559c\u60a8\u767b\u5f55\u6210\u529f", "data": [{"id": 12, "username": "roy", "pwd": "******", "nickname": "roy\u8001\u5e08", "gender": "\u7537", "dept": "\u6d4b\u8bd5\u90e8\u95e8", "position": "\u81ea\u52a8\u5316\u6d4b\u8bd5"}]}');
});
//验证code结果为1000
pm.test("code结果为1000", function () {
//将返回结果转为json格式,赋值给变量(variable) jsonData
var jsonData = pm.response.json();
// eql是equal 相等
//jsonData.msg表示 在json根层级中,获取msg键的内容
//1000是个数字,所以直接写。
pm.expect(jsonData.code).to.eql(1000);
});
//验证msg结果为登录成功
pm.test("msg结果为登录成功", function () {
//将返回结果转为json格式,赋值给变量(variable) jsonData
var jsonData = pm.response.json();
// eql是equal 相等
//jsonData.msg表示 在json根层级中,获取msg键的内容
//恭喜您登录成功是个字符串,所以用""引起来
pm.expect(jsonData.msg).to.eql("恭喜您登录成功");
});
//验证nickname是roy老师
pm.test("nickname是roy老师", function () {
var jsonData = pm.response.json();
//将字符串进行拼接,输出到console控制台。
console.log("data值的是:"+jsonData.data)
console.log(jsonData.data)
console.log("data中的第一个值是:"+jsonData.data[0])
console.log(jsonData.data[0])
console.log("data中的第一个值的nickname的值是"+jsonData.data[0].nickname)
pm.expect(jsonData.data[0].nickname).to.eql("roy老师");
});</pre>
3、json格式:是js中用于描述对象的语言。
有标准的格式规范:{"键":值,"键":值}
json中的值的可选项是:
数字或者布尔数true/false: 不用带双引号
字符串: "内容" 要被双引号括起来。
数组: [值,值,值]:比如:[1,2,3] 或者 ["roy","will"]
json子串: {"键":值,"键":值}
js中json解析核心语法符号:
.号 :表示往下进行一层选取。
[数字]表示取数组中的对应下标的值
js里面可以用两种方式来解析json中某个键的值:
jsonData.键: 获取json根层级下的某个键的值。
jsonData["键"]:如果键中有一些特殊字符的时候用这种方式
如果要解析数组中的第n个值: 注意编程语言中,下标从0开始计数。
jsonData.数组键[n-1]
例如:jsonData.data[0]
如果要解析一个子json中的键:
jsonData.子json键.键名
例如:jsonData.data[0].nickname
4、正则表达式解析: 通过某种规则,从字符串中获取对应的内容。
js中的正则表达式写法是 : /正则表达式/ 用//把正则表达式括起来。
例子:
<pre data-language="javascript" id="bMjwe" class="ne-codeblock language-javascript" style="border: 1px solid #e8e8e8; border-radius: 2px; background: #f9f9f9; padding: 16px; font-size: 13px; color: #595959">//首先提取出来json内容
//编写正则表达式
//<return>(.?)</return> 其中/表示用\对/进行转义操作
//(.?) 表示要获取的内容。
var regex=/<return>(.?)</return>/
//用正则表达式获取返回结果中的内容
var result= regex.exec(pm.response.text())
//匹配出来包含两部分,一部分是有(.?)以外的规则的内容
//另一部分是只有(.*?)的内容,注意这是字符串,不是json
console.log(result[1])
//将普通字符串,处理为json格式。
var jsonData=JSON.parse(result[1]);
//断言的时候要用的,是已经经过层层解析的jsonData
console.log(jsonData)
pm.test("返回结果msg是success", function () {
pm.expect(jsonData.msg).to.eql("success");
});</pre>
5、postman中进行调试:
console.log(内容)可以将指定内容输出到console控制台。
console控制台在postman的左下角。
同时console中可以看到postman发出去请求的具体信息,相当于给发包过程抓了个包。
6、postman 测试集collection 运行:
记得勾上 save responses ,方便查看运行的返回结果具体状态。
7、保持登录状态,进行接口的测试:
项目中进行登录鉴权的机制:
1、cookie机制
Cookie 用于服务器对用户的状态进行记录。
cookie 和session :
cookie和session 都是由服务器生成的。
session(酒店入住记录)保留在服务器上,cookie(房卡)会由服务器通过返回头中的Set-Cookie返回给客户端,由客户端保存在本地。
下次进行请求的时候,客户端在请求头中通过Cookie头携带cookie去请求服务器的接口。
cookie机制保持登录状态,核心是带上cookie:
1、尝试带上已有的cookie来进行访问(把别人的房卡直接拿来用),不一定靠谱
postman中添加头域,直接在Headers中填写键值对即可。
2、借助postman自动保存cookie的机制,先去登录(自己办一张房卡),然后请求其它接口(拿自己的房卡去房间)
postman要做的事情就是,
1、先调用一下登录接口,让postman自动保存cookie
2、然后再调用其它接口。
注意postman中cookie的管理在这里。
如果使用的是cookie机制,用postman会自动保存各种网站的cookie,和浏览器一样。
调用一下登录接口之后,就不需要额外操作就可以请求登录后的接口
2、token机制
8、postman中的环境变量/全局变量。
变量就类似于在手机通讯类 为电话号码建立一个联系人。
1、方便于进行修改
2、重复使用的时候,可以更简略。
3、方便别人进行使用 参数关联。
环境变量是创建一组变量进行分组,可以有选择性地使用。
全局变量是大家都可以用的变量。
Postman中使用环境变量:
创建环境变量组:相当于创建一个通讯录。
创建一个变量:相当于加个联系人。
使用变量:
选择环境变量组之后,在请求中,可以用{{变量名}}来使用组中的环境变量。