一: PostMan结构:
1: 便于管理,先创建Collection=》然后创建folder =》 然后folder下创建request。
Collection可以对应理解为项目。
Folder可以理解为一个模块,一个项目可能有肯多模块,多以,collection下可以有多个folder。
request可以理解为该模块下的各个接口。比如报价单系统,可能会有 报价单的新增,修改,删除,查询等接口。
![]()
2: 可以批量执行Collection里的用例
![]()
二:设置环境
![]()
三:在环境下设置全局变量:
![]()
四:引用设置的环境变量:
![]()
五:响应参数提取 & 并设置为全局变量
参数提取:
======》从响应头提取参数:
响应头的内容为:
{'Content-Type': 'application/json', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Length': '14', 'Vary': 'Cookie', 'Set-Cookie': 'sessionid=u7h23wqdplugbwmrsuyx0nbvl2pziy0u; HttpOnly; Path=/', 'Date': 'Mon, 13 Sep 2021 02:54:51 GMT', 'Server': '0.0.0.0'}
![]()
===》 也可以用这种方式:
//获取课程id
var classId = pm.response.json().id
console.log(classId)
pm.globals.set("ClassID", classId);
======》从响应体提取参数 & JSON方式提取(适用于响应体为json格式)
![]()
======》从响应体提取参数 & 正则表达式提取
响应体中有一段值, "id":123 ,其中的具体id是需要提取出来的, 使用正则表达式,用(.+?)来代替要提取的值。
responseBody.match(new RegExp('"id":(.+?)'))
![]()
![]()
六:动态参数:
postman中常用的动态参数:
==》1:timestamp:以秒为单位计算当前时间
==》2:randomint:生成1到1000之间的随机整数
==》3:guid:生成一串guid字符串
引用方式{{$timestamp}}
==》4:读取外部数据: 支持CSV 和json格式文件。以csv格式文件为例。
=>1: 先准备一个CSV格式的文件,比如文件内容为如下:
![]()
=》2:在接口中引用该列名:className, 比如: 然后跑接口=》 run整个测试集,你不是单独一个接口send
=》在UI界面check,这几个课程新增成功:
![]()
七:断言
===》断言方式一 => Status code: Code is 200
//判断接口的请求是否被服务器处理了
pm.test("判断此接口的请求按是否被服务器处理,即状态码是否为200", function () {
pm.response.to.have.status(200);
});
===》断言方式二 =》Response code: Contains string
//判断响应状态信息,区分大小写。
pm.test("判断响应状态信息是否为OK", function () {
pm.response.to.have.status("OK");
});
===》断言方式三 => Status code: successful POST request
//判断响应状态码是否为多个中的任意一个
pm.test("判断响应状态码是否为指定的200,201,202中的一个", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202,200]);
});
===》断言方式四
//Response body: Contains string
//判断响应体中的文本是否包含指定的字符串。
//注意,response.text()得到的是纯文本内容,对于中文是会进行Unicode编码,所以后面要对比的预期中文字符串要进行Unicode编码,而且要注意\的转义,此处多加一遍\就成功了
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("\\u521d\\u4e2d\\u5316\\u5b66");
});
===》断言方式五
//Response body: JSON value check
//只适用于响应是JSON格式的
pm.test("判断某个键对应的值是否为指定的值", function () {
var jsonData = pm.response.json();
var dataName = jsonData.retlist[0].name
console.log(dataName)
pm.expect(dataName).to.eql("小学语文");
});
===》断言方式六 => Response body: Is equal to a string
//检查某个节点是否等于某个值。 这种用的非常少。用的时候要将响应体整个转换成raw的格式
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
===》断言方式七(响应头断言) =》 Response headers: Content-type header check
//响应头断言。只能检查响应头中是否有某个keykey,检查不到对应的value
pm.test("响应头的检查", function () {
pm.response.to.have.header("Server");
});
===》断言方式八(响应时间)
//检查响应时间是否小于某个值;Response time is less then 200ms
pm.test("检查影响时间是否小于2s即: 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(2000);
});