pm对象

pm对象包含与正在执行的脚本有关的所有信息,并允许访问正在发送的请求的副本或接受到的响应,它还允许获取和设置环境变量和全局变量

pm.info对象

pm.info对象包含与正在执行的脚本有关的信息,如请求名称、请求ID和迭计数等有用信息储存在该对象中

方法 描述 结果类型
pm.info.eventName 输出脚本是在哪个脚本栏中执行的 字符串类型
pm.info.iteration 输出当前运行迭代的次数(从0开始) 数值类型
pm.info.iterationCount 输出计划运行的迭代总数 数值类型
pm.info.requestName  返回请求名 字符串类型
pm.info.requestId  返回请求ID  字符串类型

例1:pm.info.eventName
1、用于返回:输出脚本是在哪个脚本栏中执行的

2、可以写法Tests栏下也可以写在Pre-request Script栏下

例1_1:
1、其余四个方法主要是返回与集合运行器相关的信息

2、下面例子中集合中共有2个请求,迭代运行次数为3(每个请求执行3次)

pm.sendRequest对象

1、pm.sendRequest对象允许异步发送HTTP/HTTPS请求。简单的来说就是:用户有一个繁重的计算任务或需要发送多个请求,那么现在可以在后台执行该逻辑。用户可以指定一个回调函数,并在底层操作完成时得到通知,而不是等待调用来完成(因为这会阻碍任何下一个请求)

2、该方法接收一个兼容SDK的请求和一个回调。回调接收两个参数,其中一个是错误(如果有的话),另一个是SDK兼容的响应

3、该方法可以在预请求或测试脚本中使用

4、感觉就是:pm.sendRequest()方法接收两个参数,一个URL(请求信息)和一个函数;函数又接收两个参数:第一个URL参数的响应(错误和正确响应),Postman内部将第一个URL参数的响应赋值给两个变量err,res(即err,res就是脚本请求的错误响应或正确响应,如果要对脚本请求的响应进行处理的话,就可以使用err,res来处理)

例2:发送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);}});

例2_1:发送get请求并断言

pm.sendRequest("https://postman-echo.com/get?name=mouse",function(err,res){if (err){console.log(err);}else{pm.test("测试描述",function(){pm.expect(err).to.equal(null);pm.expect(res).to.have.property("code",200);pm.expect(res).to.have.property("status","OK");});}
});

注:
关于脚本请求更多的例子可以参考前面的笔记:预请求脚本

pm.globals对象

pm.globals对象包含以下方法可供调用

方法  描述
pm.globals.has("variableName") 验证是否存在该全局变量
pm.globals.get("variableName")  获取执行全局变量的值
pm.globals.set("variableName","variableValue")  设置全局变量
pm.globals.unset("variableName")  清除指定的全局变量
pm.globals.clear() 清除全部全局变量
pm.globals.toObject() 将全局变量以一个对象的方式全部输出

例3:

console.log(pm.globals.has("variableName"));console.log(pm.globals.toObject());
console.log(typeof(pm.globals.toObject()));console.log(JSON.stringify(pm.globals.toObject()));//将json对象转为字符串

pm.environment对象

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对象包含以下方法可供调用

方法  描述
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信息

例3:pm.request

var headers = pm.request;
console.log(headers);
console.log(typeof(headers));
console.log(pm.request.body.mode);//获取请求头中具体某个值
console.log(headers.url.host[0]);
//console.log(headers.header[0].key);//不知道为什么这样就不行了(下面有另一种方法)

例3_1:pm.request.url

例3_1:pm.request.headers    

pm.response对象

1、在测试脚本中,pm.response对象包含响应有关的所有信息

2、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对象

例4:

//获取响应头状态码
var headers_code = pm.response.code;
console.log(headers_code);
//获取响应头状态码文本
var headers_reason = pm.response.reason();
console.log(headers_reason)
//获取响应时间
var headers_time = pm.response.responseTime
console.log(headers_time)

例4_1:响应头
获取响应头中具体某个属性的值时可以使用:postman.getResponseHeader("键名")

var headers_headers = pm.response.headers;
console.log(headers_headers);//不知道为什么明明返回的是个数组,还不能用索引了,request header也有这个问题
console.log(headers_headers[0]);//获取响应头中信息的具体值可以用postman.getResponseHeader
var value = postman.getResponseHeader("Transfer-Encoding");
console.log(value);console.log(postman.getResponseHeader("Date"))

例4_2:

var response_body = pm.response.text();
console.log(response_body);//其实这个方法就是前面说的:将pm.response方法返回的信息转换成字符串型
var body = pm.response;
console.log(body.text());

例4_3:
1、因为返回的值为json格式,因此可以使用字典的"索引"和列表的索引

2、在查找某个键的值时:
    ⑴如果响应内容是嵌套的字典格式,则一层层引用即可
    ⑵如果字典中嵌套了列表,则按照索引引用即可

var response_body = pm.response.json();
console.log(response_body);//获取json对象中某个键的值:值为字典时就一层层的引用,值为列表时就使用索引
console.log(response_body.translateResult[0][0].src);//其实这个方法就是前面说的:将pm.response方法返回的信息转换成JSON对象
var body = pm.response;
console.log(body.json());

例4_4:顺便补充下python
1、如果返回结果是字符串型的:要获取字符串中具体某个键的值的话,不能使用遍历的方法,可以将字符串转为字典(前提是字符串是json格式的)

2、个人感觉:不管是在python中还是在js中:只要请求返回的是一个json格式的,就可以直接用python或js处理字典的方式来进行处理了

import jsonbody = """
{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"心有猛虎,细嗅蔷薇","tgt":"The heart has the tiger, fine smell rose"}]]}"""
result = body.split(",",3)[3]
print(result)
print("--------------------")
"""
因为返回的是字符串型的。因此肯定就不能有字符串的遍历了:字符串里面的每一个符号、每一个字都是一个元素
因此可以用字符串的分片、正则表达式等
因为字符串是json格式的字符串,因此可以使用json.loads()方法将json格式的字符串转为字典,再用字典的索引
"""new_body = json.loads(body)
print(new_body)
print(type(new_body))
print(new_body['translateResult'])print("--------------------")
#字典的遍历:只会遍历出字典的键
body_json = {"type":"ZH_CN2EN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"心有猛虎,细嗅蔷薇","tgt":"The heart has the tiger, fine smell rose"}]]}
for i in body_json:print(i)#字典的"索引"
print(body_json["translateResult"])"""
"translateResult":[[{"src":"心有猛虎,细嗅蔷薇","tgt":"The heart has the tiger, fine smell rose"}]]}
--------------------
{'errorCode': 0, 'elapsedTime': 2, 'type': 'ZH_CN2EN', 'translateResult': [[{'tgt': 'The heart has the tiger, fine smell rose', 'src': '心有猛虎,细嗅蔷薇'}]]}
<class 'dict'>
[[{'tgt': 'The heart has the tiger, fine smell rose', 'src': '心有猛虎,细嗅蔷薇'}]]
--------------------
errorCode
elapsedTime
type
translateResult
[[{'tgt': 'The heart has the tiger, fine smell rose', 'src': '心有猛虎,细嗅蔷薇'}]]
"""

例4_5:响应内容格式相互转换
1、JSON.parse():从一个字符串中解析出json对象

2、JSON.stringify():从一个对象中解析出字符串

//返回json型响应
var body_json = pm.response.json();
//将json格式的响应转为字符串
console.log(JSON.stringify(body_json));
console.log(typeof(JSON.stringify(body_json)));//返回string型响应
var body_str = pm.response.text();
//将字符串格式的响应转为json对象
console.log(JSON.parse(body_str));
console.log(typeof(JSON.parse(body_str)));

pm.cookies对象

pm.cookies对象包含一个与请求所创建的域相关联的Cookies列表

方法 描述
pm.cookies.has("cookieName") 检查请求的url站点是否存在cookie,返回值Boolean
pm.cookies.get("cookieName") 获取存在的cookie的值
pm.cookies.toObject 将请求的url站点中获取到的所有存在的cookie输出到一个对象中去

例5:

//判断该请求域下是否有指定的Cookies
console.log(pm.cookies.has("OUTFOX_SEARCH_USER_ID"));
console.log(pm.cookies.has("sails.sid"));//在该请求域下获得指定键名Cookies的值
console.log(pm.cookies.get("OUTFOX_SEARCH_USER_ID"));
console.log(pm.cookies.get("sails.sid"));//在该请求域下以对象的形式返回Cookies的键值对
console.log(pm.cookies.toObject("OUTFOX_SEARCH_USER_ID"));
console.log(pm.cookies.toObject("sails.sid"));
//可以使用JSON.stringify()方法将json对象转为字符串型
console.log(JSON.stringify(pm.cookies.toObject("OUTFOX_SEARCH_USER_ID")));

:从上面例子的输出可以看出
1、pm.cookies.has()方法:是用于判断该请求域下是否存在指定的cookies,不存在或存在与其他请求域时,返回空

2、pm.cookies.get()方法:用于获取该请求域下指定键名的cookies的值,不存在或存在与其他请求域时,返回NULL

pm.iterationData对象

iterationData对象包含数据集运行期间提供的数据文件,主要方法有如下

方法 描述
pm.iterationData.get("variable")  获取指定变量的值
pm.iterationData.toObject  将数据文件集转化成一个对象

Postman中的Test

在Postman中用于测试、断言的函数主要有如下

方法 描述
pm.test("testName", specFunction) 测试方法,第二个方法中填写测试内容
pm.expect(assertion:*) 断言

注:
1、pm.test("testName", specFunction):此函数用于在沙箱中编写测试规范。在这个函数中编写测试可以准确地命名测试,并确保在这个函数内出现任何错误的情况下,脚本的其余部分不会被阻塞

2、pm.expect是一个通用的断言函数。这个是ChaiJS expect BDD库,使用这个库可以编写可读性很高的测试 。pm.expect用于处理来自响应或变量的数据断言

3、pm.test()方法用于创建一个测试(告诉Postman这是测试)。其接受两个参数,一个是测试的相关描述,一个是一个函数:用于执行断言相关的语句

例6:

pm.test("response should be okay to process", function () {pm.response.to.not.be.error;//这种也是断言的一种pm.response.to.not.have.jsonBody('error');});pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});

测试脚本中的响应断言API

Postman提供的测试脚本响应断言包含以下API:pm.response.to

方法  描述
pm.response.to.have.status(code:Number)  根据状态码判断响应是否成功
pm.response.to.have.status(reason:String) 根据返回的状态值判断响应是否成功
pm.response.to.have.header(key:String) 根据response中的headers的key判断响应是否成功
pm.response.to.have.header(key:String, optionalValue:String) 对response中的header中的key和value校验,判断响应是否成功
pm.response.to.have.body() 获取响应返回的资源
pm.response.to.have.body(optionalValue:String) 对响应返回的body内容校验,判断响应是否成功
pm.response.to.have.body(optionalValue:RegExp)  对响应返回的body进行正则校验,判断响应是否成功
pm.response.to.have.body(optionalValue:RegExp)  判断响应返回的body是否是json,判断响应是否成功
pm.response.to.have.jsonBody()  
pm.response.to.have.jsonBody(optionalExpectEqual:Object)  
pm.response.to.have.jsonBody(optionalExpectPath:String)  
pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*)  

例7:

pm.response.to.be.*对象

通过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,如果是则断言为真,否则为假

例8:

拓展:

测试脚本

在Postman中关于测试脚本有不同的写法;且同样的断言也有不同的写法

例1:

//检查response body中是否包含某个string
pm.test("测试1:检查响应是否含有某个字符串", function () {pm.expect(pm.response.text()).to.include("心有猛虎,细嗅蔷薇");
});tests["测试2:检查响应是否含有某个字符串"] = responseBody.has("心有猛虎,细嗅蔷薇");//检测JSON中的某个值是否等于预期的值
var data = JSON.parse(responseBody);
tests["测试3:某个值是否等于预期的值"] = data.translateResult[0][0].src === "心有猛虎,细嗅蔷薇";//检查json中某个数组元素的个数(这里检测programs的长度)
var data = JSON.parse(responseBody);
tests["测试4:检查某个数组元素的个数"] = data.translateResult.length === 1;

获取request.data值

1、本文章前面说过一个pm.request对象,用该对象在获取headers信息时,会有点问题,因此这里介绍另一种

2、获取请求头可以使用这个方法,获取响应头可以使用postman.getResponseHeader方法

方法 描述
request.data 用于获取请求头的表单内容    
request.headers  用于获取请求头
request.method  用于获取请求的请求方法
request.url  用于获取请求的URL

例2:

数据转换时报错

在使用JSON.parse()方法进行数据转换时,报错:JSONError | Unexpected token 'o' at 1:2 [object Object] ^
1、首先看下函数作用
    ⑴JSON.parse():用于从一个字符串中解析出json对象
    ⑵JSON.stringify():用于从一个对象解析出字符串

2、报错的原因:
因为要转换的数据本来就是object,这个方法是把一个字符串解析出json对象,再转换就会报错

3、为什么会有这样的错误:
因为把Object作为参数传到JSON.parse()里时,它会默把Object转为string,
就会先调用原型上的toString()方法;结果为”[object Object]”,JSON.parse将第一个字符’[‘理解为数组的开始,第二字符’o’不知道怎么处理;所以就抛出了上面的错误信息 Unexpected token o in JSON at position 1。

4、JSON字符串:

var str1 = '{ "name": "cxh", "sex": "man" }'; 

5、JSON对象:

var str2 = { "name": "cxh", "sex": "man" };

Postman:脚本应用_pm对象相关推荐

  1. Postman脚本发送请求pm.sendRequest

    Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)都有Pre-request script和Tests两个脚本区域, 分别可以在发送请求前和请求后使用 ...

  2. SQLServer 事务复制中使用脚本添加某个对象的发布

    SQLServer 事务复制中使用脚本添加某个对象的发布 原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec s ...

  3. unity双击打不开脚本_游戏对象和脚本 (创建一个时钟)

    该文章是一篇译文,附上原文链接 Game Objects and Scripts​catlikecoding.com 使用简单对象构建一个时钟 编写一个C#脚本 转动时钟的指针来显示时间 创建指针动画 ...

  4. newman执行测试_newman执行postman脚本

    postman是基于javascript语言编写的,而导出的json格式的postman脚本也无法直接在服务器运行,它需要在newman中执行(可以把newman看做postman脚本的运行环境) 所 ...

  5. 【Unity3D入门教程】使用C#脚本控制游戏对象

    前言 使用C#脚本控制游戏对象,是一项必备的基本技能.Unity3D可以使用的脚本有C#和javascript等.我们主要讲注意力集中在C#上.本文将会介绍怎样使用脚本控制场景中的游戏对象. 1 创建 ...

  6. Postman接口自动化之postman脚本编写

    这是之前搞的接口自动化方案,已经在业务测试中实现了使用postman编写接口脚本,通过GitHub+Jenkins+email +html report实现了接口自动化,现在分块整理一下. postm ...

  7. unity在脚本中获取游戏对象有三种_Unity3D中用于删除当前脚本所在游戏对象的代码是:_学小易找答案...

    [单选题]297 . 乙醇的颜色为 [单选题]219 . 下列物质中含有极性共价键的是 [单选题]OnWillCreatAsset( string path) 上面命令的作用是: [填空题]针对单个或 ...

  8. 【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 创建 GroovyShell 对象并执行 Groovy 脚本 | 完整代码示例 )

    文章目录 一.Groovy 类中调用 Groovy 脚本 1.创建 GroovyShell 对象并执行 Groovy 脚本 2.代码示例 二.完整代码示例 1.调用者 Groovy 脚本的类 2.被调 ...

  9. 捡对象引流脚本 内容_对象和索引流

    捡对象引流脚本 内容 我本来要写一篇关于如何将流与每个元素的索引混合的文章,但是Baeldung上的人们已经很好地涵盖了这个主题 ! 鉴于我是他们编辑团队的一员,我为他们/我们感到自豪. 有趣的是,特 ...

  10. postman安装路径_Newman进行postman脚本自动化

    欢迎关注公众号 学习资料不会少 主要内容:newman 的使用 Newman的讲解 Newman是postman命令行集成工具,使用Newman可以在命令行中运行postman的脚本,方便与Jenki ...

最新文章

  1. C#如何把List of Object转换成List of T具体类型
  2. ./src/cuda.c:36: check_error: Assertion `0‘ failed
  3. SpringSecurity OAuth2中表结构说明
  4. 计算机组成原理第二版复习大纲,计算机组成原理复习大纲
  5. burg算法的matlab代码实现_导向滤波算法及其matlab代码实现
  6. 统计概率分布_概率统计中的重要分布
  7. How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)
  8. cisco 通过tftp备份/恢复配置和3560交换机IOS升级
  9. 服务器一般在什么位置,云服务器比较普通服务器差异在哪里
  10. 以太坊Bloom过滤器实现原理及应用场景分析
  11. unity 彩带粒子_Unity3d粒子特效:制作火焰效果
  12. 好的数据分析平台有多重要
  13. 嵌入式开发|STM32工程中添加Bootloader实现串口程序下载
  14. cpuz测试分数天梯图_cpubenchmark(2020电脑cpu性能天梯图)
  15. 使用Selenium模拟登陆百度盘
  16. python3下载手机安卓版,python3.0手机版下载
  17. 三大 Windows 文件搜索神器 Everything、Listary、AnyTXT Searcher 功能特色与区别详解
  18. html怎么设计关键字,干货分享——关键词如何做标记
  19. curl命令详解 (实例使用方法)
  20. C语言简单的双人小游戏

热门文章

  1. java的list和map区别,list和map的区别是什么
  2. 8类网线利弊_网线标准(从一类线到八类线)
  3. 群晖虚拟机VMM定时开启
  4. 一名合格的Web前端工程师需要具备的8项技能!
  5. k3 设置 虚拟服务器,金蝶k3远程服务器设置
  6. DCMI 接口DMA 传送数据问题
  7. kron matlab_Matlab运用kron()函数计算Kronecker乘法
  8. Word中使用表格排版公式时,表格内序号纵向居中的问题。
  9. Flink中的Window计算-增量计算全量计算
  10. 管理员登陆页面php,Dedecms管理员登录输入账号密码点击登陆又回到登陆界面