postman之pm对象详解
Posted 小情绪1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postman之pm对象详解相关的知识,希望对你有一定的参考价值。
一、pm.info对象
方法 | 描述 | 结果类型 |
pm.info.eventName | 输出脚本是在哪个脚本栏中执行的 | 字符串类型 |
pm.info.iteration | 输出当前运行迭代的次数(从0开始,请求第几次执行) | 数值类型 |
pm.info.iterationCount | 输出计划运行的迭代总数(每个请求迭代执行的次数) | 数值类型 |
pm.info.requestName | 返回请求名 | 字符串类型 |
pm.info.requestId | 返回请求ID | 字符串类型 |
例:console.log(pm.info.eventName);:用于返回输出脚本是在哪个脚本栏中执行的(可以写法Tests栏下也可以写在Pre-request Script栏下)
在console输出脚本执行栏的名称
二、pm.sendRequest对象
pm.sendRequest对象允许异步发送HTTP/HTTPS请求。简单的来说就是:用户有一个繁重的计算任务或需要发送多个请求,那么现在可以在后台执行该逻辑。用户可以指定一个回调函数,并在底层操作完成时得到通知,而不是等待调用来完成(因为这会阻碍任何下一个请求)
pm.sendRequest()方法接收两个参数,一个URL(请求信息)和一个函数;函数又接收两个参数:第一个URL参数的响应(错误和正确响应),Postman内部将第一个URL参数的响应赋值给两个变量err,res(即err,res就是脚本请求的错误响应或正确响应,如果要对脚本请求的响应进行处理的话,就可以使用err,res来处理)
1、发送get请求
pm.sendRequest("https://postman-echo.com/get?name=mouse",function(err,res)
if (err)
console.log(err);
else
name = res.json()["args"]["name"];//name = res.json().args.name;也可以这么写
pm.environment.set("name",name);
);
实例:
- 查询接口返回的body信息
"msg": "操作成功", "code": 200, "data": "records": [ "id": "ff0a06e41e2043b798d445afb3243d5d", "creator": "666666", "creatorName": "系统管理员", "createTime": "2021-09-14 14:33:32", "modifiedTime": "2021-09-15 14:56:27", "status": 1, "title": "测试12", "intro": "11", "content": null, "link": 1, "url": "www.baidu.com", "time": "2021-09-14", "isTop": 0, "viewCount": 0 , "id": "26bafa7b390e467da6b8b9831efb5f34", "creator": "666666", "creatorName": "系统管理员", "createTime": "2021-09-13 15:00:23", "modifiedTime": "2021-09-15 14:56:32", "status": 1, "title": "测试21", "intro": "11", "content": null, "link": 1, "url": "www.baidu.com", "time": "2021-09-14", "isTop": 0, "viewCount": 0 , "id": "b6420cb7bc804cd883d2bc7bd2628bf3", "creator": "666666", "creatorName": "系统管理员", "createTime": "2021-09-14 09:59:35", "modifiedTime": "2021-09-15 14:56:37", "status": 1, "title": "测试22", "intro": "11", "content": null, "link": 1, "url": "www.baidu.com", "time": "2021-09-14", "isTop": 0, "viewCount": 0 ], "total": 3, "size": 10, "current": 1, "pages": 1
- 在编辑新闻接口中,写断言脚本:执行查询新闻接口,修改查询到的第一个新闻的名称
//http://192.168.10.206:8099/rest/news/list.page?sortType=1&title=%E6%B5%8B%E8%AF%95&pageNum=1&pageSize=10&status=1是查询的接口,返回新闻名称包含“测试”的数据
//将查询的响应赋值给function函数的参数,没报错就执行else语句
pm.sendRequest("http://192.168.10.206:8099/rest/news/list.page?sortType=1&title=%E6%B5%8B%E8%AF%95&pageNum=1&pageSize=10&status=1",function(err,res) if(err) console.log(err); else id=res.json().data.records[0].id; //这句话是获取查询新闻接口返回的body->data->records数据的第一个元素的id值 pm.environment.set("id",id); //将获取到的id的值设置为全局变量,方便在编辑新闻接口的body中使用 ) console.log(pm.environment.get("id")); //输出设置的全局变量的值,检验是否正确
//修改查询到的第一个新闻名称
在body中使用全局变量:id
这样在执行编辑新闻接口的时候,就会执行查询接口,将查询接口返回的信息作为编辑接口的参数,实现接口之间的调用
执行结果:
2、发送get请求并断言
pm.sendRequest("https://postman-echo.com/get?name=mouse",function(err,res) if (err) console.log(err); else //pm.test只能在test选项卡下面使用 //断言 pm.test("测试描述",function() pm.expect(err).to.equal(null); //错误信息为空 pm.expect(res).to.have.property("code",200); //返回信息中,code值为200 pm.expect(res).to.have.property("status","OK"); ); );
三、pm.global对象
global:全局变量,在postman中引用变量的形式必须为Variables的形式进行引用;
environment:环境变量
方法 | 描述 |
pm.globals.has("variableName") | 验证是否存在该全局变量 |
pm.globals.get("variableName") | 获取执行全局变量的值 |
pm.globals.set("variableName","variableValue") | 设置全局变量 |
pm.globals.unset("variableName") | 清除指定的全局变量 |
pm.globals.clear() | 清除全部全局变量 |
pm.globals.toObject() | 将全局变量以一个对象的方式全部输出 |
四、pm.environment对象
方法 | 描述 |
pm.environment.has("variableName") | 检测环境变量是否包含某个变量 |
pm.environment.get("variableName") | 获取环境变量中的某个值 |
pm.environment.set("variableName","variableValue") | 为某个环境变量设置值 |
pm.environment.unset("variableName") | 清除某个环境变量 |
pm.environment.clear() | 清除全部环境变量 |
pm.environment.toObject() | 将环境变量以一个对象的方式全部输出 |
五、pm.variables对象
1、在Postman中,所有的变量都符合特定的层次结构。在当前迭代中定义的所有变量优先于当前环境中定义的变量,这些变量覆盖全局范围内定义的变量,即迭代数据<环境变量<全局变量
2、调用:pm.variables.get("variableName") 获取变量中的某个值,全局变量和环境变量都可以获取到
六、pm.request对象
1、pm.request对象用来获取请求对象。但request中的参数只可读
2、在"Pre-request Script"选项卡下,pm.request对象表示:将要发送的请求
3、在"Tests"选项卡下,pm.request对象表示:上一个发送的请求(与在"Pre-request Script"选项卡下感觉没什么区别:都是同一个请求)
4、pm.request对象包含以下方法可供调用
方法 | 描述 |
pm.request | 获取当前发起请求的全部headers |
pm.request.url | 获取当前发起请求的url |
pm.request.headers | 以数组的方式返回当前请求中的header信息 |
七、pm.response对象
pm.response对象包含响应有关的所有信息
方法 | 描述 |
pm.response.code | 获取当前请求返回的状态码如200,404,500等 |
pm.response.reason() | 当前请求成功返回OK |
pm.response.headers | 以数组的形式返回当前请求成功后的response的headers |
pm.response.responseTime | 获取执行此次请求的时间单位为ms |
pm.response.text() | 以文本的方式获取响应里面的body的内容 |
pm.response.json() | 将body里面的内容解析为一个json对象 |
响应内容格式相互转换
- JSON.parse():从一个字符串中解析出json对象
- JSON.stringify():从一个对象中解析出字符串
八、pm.cookies对象
方法 | 描述 |
pm.cookies.has("cookieName") | 检查请求的url站点是否存在cookie,返回值Boolean |
pm.cookies.get("cookieName") | 获取存在的cookie的值 |
pm.cookies.toObject | 将请求的url站点中获取到的所有存在的cookie输出到一个对象中去 |
九、pm.iterationData对象
方法 | 描述 |
pm.iterationData.get("variable") | 获取指定变量的值 |
pm.iterationData.toObject | 将数据文件集转化成一个对象 |
十、pm.response.to.be对象
方法 | 描述 |
pm.response.to.be.info | 检查响应码是否为1XX,如果是则断言为真,否则为假 |
pm.response.to.be.success | 检查响应码是否为2XX,如果是则断言为真,否则为假 |
pm.response.to.be.redirection | 检查响应码是否为3XX,如果是则断言为真,否则为假 |
pm.response.to.be.clientError | 检查响应码是否为4XX,如果是则断言为真,否则为假 |
pm.response.to.be.serverError | 检查响应码是否为5XX,如果是则断言为真,否则为假 |
pm.response.to.be.error | 检查响应码是否为4XX或5XX,如果是则断言为真,否则为假 |
pm.response.to.be.ok | 检查响应码是否为200,如果是则断言为真,否则为假 |
pm.response.to.be.accepted | 检查响应码是否为202,如果是则断言为真,否则为假 |
pm.response.to.be.badRequest | 检查响应码是否为400,如果是则断言为真,否则为假 |
pm.response.to.be.unauthorised | 检查响应码是否为401,如果是则断言为真,否则为假 |
pm.response.to.be.forbidden | 检查响应码是否为403,如果是则断言为真,否则为假 |
pm.response.to.be.notFound | 检查响应码是否为404,如果是则断言为真,否则为假 |
pm.response.to.be.rateLimited | 检查响应码是否为429,如果是则断言为真,否则为假 |
十一、pm.response.to.have
方法 | 描述 | |
pm.response.to.have.status(code:Number) | 根据状态码判断响应是否成功 |
pm.test("code = 200",function()
pm.response.to.have.status(200);//检查响应状态码是否是200
);
|
pm.response.to.have.status(reason:String) | 根据返回的状态值判断响应是否成功 |
pm.test("status = OK",function()
pm.response.to.have.status("OK");//检查status是否是ok
);
|
pm.response.to.have.header(key:String) | 根据response中的headers的key判断响应是否成功 |
pm.test("key = Date",function()
pm.response.to.have.header("Date");//根据response headers的key,判断响应是否成功,也就是key中是否有我们所写的脚本的值
);
|
pm.response.to.have.header(key:String, optionalValue:String) | 对response中的header中的key和value校验,判断响应是否成功 |
pm.test("header-Connection = keep-alive",function()
pm.response.to.have.header("Connection","keep-alive");
);
|
pm.response.to.have.body() | 获取响应返回的资源 | |
pm.response.to.have.body(optionalValue:String) | 对响应返回的body内容校验,判断响应是否成功 |
pm.test("body is msg:操作成功,code:200",function()
pm.response.to.have.body(\'"msg":"操作成功","code":200\');
);
|
pm.response.to.have.body(optionalValue:RegExp) | 对响应返回的body进行正则校验,判断响应是否成功 | |
pm.response.to.have.body(optionalValue:RegExp) | 判断响应返回的body是否是json,判断响应是否成功 | |
pm.response.to.have.jsonBody(optionalExpectEqual:Object) | 判断响应返回的body是否是json,并对json内容进行校验 |
pm.test("body not have error",function()
pm.response.to.not.have.jsonBody(\'error\');
)
|
十二、test对象
方法 | 描述 |
pm.test("testName", specFunction) | 测试方法,第二个方法中填写测试内容 |
pm.expect(assertion:*) | 断言 |
pm.test()方法用于创建一个测试(告诉Postman这是测试)。其接受两个参数,一个是测试的相关描述,一个是一个函数:用于执行断言相关的语句
pm.expect是一个通用的断言函数。这个是ChaiJS expect BDD库,使用这个库可以编写可读性很高的测试 。pm.expect用于处理来自响应或变量的数据断言
十三、测试脚本
脚本 | 描述 |
pm.test("响应中存在:操作成功",function()
pm.expect(pm.response.text()).to.include("操作成功");
);
|
//检查response body中是否包含某个string
|
tests["测试响应是否含有某个字符串"]=responseBody.has("操作成功");
|
//检查response body中是否包含某个string
|
var data = JSON.parse(responseBody); //将返回的body转换为json格式
tests["msg = 操作成功"]=data.msg === "操作成功";
|
//监测json中的某个值是否等于预期的值
|
十四、request.data获取请求头
方法 | 描述 |
request.data | 用于获取请求头的表单内容 |
request.headers | 用于获取请求头 |
request.method | 用于获取请求的请求方法 |
request.url | 用于获取请求的URL |
以上是关于postman之pm对象详解的主要内容,如果未能解决你的问题,请参考以下文章
postman——集合——执行集合——测试脚本——pm对象简单示例02
postman——集合——执行集合——测试脚本——pm对象简单示例01