- 在之前的文章中介绍过postman中的两个脚本——pre-request script或test script,在这两个脚本中都有使用到pm对象。(pre-request script详细介绍、Test script详细介绍)
- pm对象是在postman的脚本中非常重要,也是十分常用的方法。
- 本篇主要介绍pm对象的使用方法中变量的访问与操作部分。
- 关于Postamn中的变量可以查看专栏之前的文章:Postman中的变量
文章目录
- 一、pm对象介绍
- 二、使用PM对象访问变量
- (1)判断变量是否存在
- (2)获取变量的值
- (3)设置变量的值
- (4)在脚本中使用动态变量
- (5)返回所有变量与值
- (6)删除指定变量
- (7)清空指定范围内的变量
- (8)将数据变量转换为json格式
- 附录:postman系列文章目录
一、pm对象介绍
- pm对象是Postman提供的可以在请求脚本中使用的JavaScript API。
- pm对象提供对请求和响应数据以及变量的访问,使用pm对象可以对请求数据或响应数据的进行操作。
二、使用PM对象访问变量
- 下面的介绍当中不仅有涉及到脚本、变量的知识(pre-request script详细介绍、Test script详细介绍、Postman中的变量)
- 在举例的过程中也有使用到控制台,具体介绍可以查看文章:console控制台
- 使用pm.*可以访问和操作Postman中每个作用域的变量。
(1)判断变量是否存在
pm.*.has("变量名")
- 这个方法返回值为布尔值:true 代表此变量存在;false 代表此变量不存在。
- 根据变量的范围,这个方法可以分为以下几种:
- 在所有范围中判断变量是否存在
pm.variables.has("变量名")
- 在环境变量中判断变量是否存在
pm.environment.has("变量名")
- 在集合变量中判断变量是否存在
pm.collectionVariables.has("变量名")
- 在全局变量中判断变量是否存在
pm.globals.has("变量名")
- 在数据变量中判断变量是否存在
pm.iterationData.has("变量名")
- 在所有范围中判断变量是否存在
- 举例: 以pm.variables.has(“变量名”)为例。如下图,全局变量存在变量“test”,pm.variables.has()方法返回的是true;变量“test_2”不存在,pm.variables.has()方法返回的是false。
(2)获取变量的值
pm.*.get("变量名")
- 这个方法返回指定变量的值,如果变量不存在则返回“undefined”
- 根据变量的范围,这个方法可以分为以下几种:
-
在所有范围中获取变量的值
pm.variables.get("变量名")
- 注意: 当多个范围内都有相同key的变量时,使用pm.variables.get()方法时会返回最接近的范围内的变量。简而言之,顺序如下:
Local(局部变量)> Data(数据变量)> Environment(环境变量)> Collection(集合变量)> Global(全局变量)
例如:在Environment(环境变量)中有一个test=1,Global(全局变量)中有一个test=2,使用pm.variables.get(“test”)将会返回1
- 注意: 当多个范围内都有相同key的变量时,使用pm.variables.get()方法时会返回最接近的范围内的变量。简而言之,顺序如下:
-
在环境变量中获取变量的值
pm.environment.get("变量名")
-
在集合变量中获取变量的值
pm.collectionVariables.get("变量名")
-
在全局变量中获取变量的值
pm.globals.get("变量名")
-
在数据变量中获取变量的值
pm.iterationData.get("变量名")
-
- 举例: 以pm.variables.get(“变量名”)为例。如下图,全局变量存在变量“test”,使用pm.variables.get()方法能够返回“test”变量的值;变量“test_2”不存在,使用pm.variables.has()方法返回的是“undefined”。
(3)设置变量的值
pm.*.set("变量名", "值")
- 这个方法可以修改指定变量的值,如果变量不存在则根据传入方法的变量名和值新增一个变量。
- 根据变量的范围,这个方法可以分为以下几种:
- 新增本地变量或修改指定变量的值
pm.variables.set("变量名", "值")
- 注意,使用这个方法设置变量的值时,不会修改变量原始值,而是生成一个临时的本地变量,仅在当前请求或运行集合时生效。
- 如下图,全局变量存在变量“test”,在使用pm.variables.set()方法改变变量的值后,打印出来的已经是新的值,但是全局变量中“test”变量的值并没有改变。
- 新增环境变量或修改环境变量内指定变量的当前值
pm.environment.set("变量名", "值")
- 新增集合变量或修改集合变量内指定变量的当前值
pm.collectionVariables.set("变量名", "值")
- 新增全局变量或修改全局变量内指定变量的当前值
pm.globals.set("变量名", "值")
- 与 .get() .has()不同,数据变量不支持 .set() 这个方法。
- 新增本地变量或修改指定变量的值
- 举例: 以pm.environment.set()为例。如下图,环境变量存在变量“Environment_test”,使用pm.environment.set.set()方法,会修改原变量的当前值;变量“New_Environment”不存在,会新增一个变量。
- 运行前:
- 运行后:
(4)在脚本中使用动态变量
pm.*.replaceIn("{{变量名}}")
- 这个方法是专门用于在脚本中使用动态变量,在专栏的前一篇文章中也有详细介绍过这个方法。
(动态变量(Dynamic variables)详细介绍) - 使用这个方法,可以返回字符串中动态变量的解析值,最终的返回值也是字符串。例如:
console.log(pm.variables.replaceIn("返回一个随机时间戳:{{$timestamp}}"))
- 除pm.variables.replaceIn()之外,指定变量的范围,还可以解析对应范围内的变量:
- 只能解析动态变量
pm.variables.replaceIn("{{变量名}}")
- 可以解析动态变量和环境变量
pm.environment.replaceIn("{{变量名}}")
- 可以解析动态变量和集合变量
pm.collectionVariables.replaceIn("{{变量名}}")
- 可以解析动态变量和全局变量
pm.globals.replaceIn("{{变量名}}")
- 在数据变量不支持这个方法
- 只能解析动态变量
- 举例:同时在字符串中引用环境变量、动态变量、全局变量。
str_var = "环境变量:{{Environment_test}},动态变量:{{$timestamp}},全局变量:{{global_test}}" console.log("使用环境变量的方法:",pm.environment.replaceIn(str_var)); console.log("使用全局变量的方法:",pm.globals.replaceIn(str_var));
- 运行脚本之后可以看到,使用pm.environment.replaceIn({{变量名}})只能解析出动态变量和环境变量,使用pm.globals.replaceIn({{变量名}})只能解析出动态变量和全局变量。
- 运行脚本之后可以看到,使用pm.environment.replaceIn({{变量名}})只能解析出动态变量和环境变量,使用pm.globals.replaceIn({{变量名}})只能解析出动态变量和全局变量。
(5)返回所有变量与值
pm.*.toObject()
-
这个方法返回一个对象,该对象包含指定范围内所有变量及其值。
-
根据变量的范围,这个方法可以分为以下几种:
- 返回所有变量
pm.variables.toObject()
- 这个方法,返回的变量根据优先级顺序。
【优先级顺序: Global(全局变量)、Collection(集合变量)、Environment(环境变量)、Data(数据变量)、Local(局部变量)】 - 运行后可以看到这个方法按顺序返回了所有变量。
- 返回环境变量中的所有变量
pm.environment.toObject()
- 返回集合变量中的所有变量
pm.collectionVariables.toObject()
- 返回全局变量中的所有变量
pm.globals.toObject()
- 返回数据变量中的所有变量
pm.iterationData.toObject()
- 返回所有变量
-
举例:以pm.environment.toObject()为例,运行后可以看到这个方法返回了所有环境变量。
(6)删除指定变量
pm.*.unset("变量名")
- 这个方法可以删除指定范围内的指定变量。
- 根据变量的范围,这个方法可以分为以下几种:
- 这个方法需要指定范围,所以pm.variables 不支持这个方法。
- 从环境变量中删除指定变量
pm.environment.unset("变量名")
- 从集合变量中删除指定变量
pm.collectionVariables.unset("变量名")
- 从全局变量中删除指定变量
pm.globals.unset("变量名")
- 从数据变量中删除指定变量
pm.iterationData.unset("变量名")
- 举例:以pm.environment.unset(“变量名”)为例,删除环境变量"New_Environment"
- 运行脚本后,可以看到这个变量被删掉了
- 运行脚本后,可以看到这个变量被删掉了
(7)清空指定范围内的变量
pm.*.clear()
- 这个方法可以清空指定范围内的所有。
- 根据变量的范围,这个方法可以分为以下几种:
- 这个方法需要指定范围,所以pm.variables 不支持这个方法。
- 清空环境变量
pm.environment.clear()
- 清空集合变量
pm.collectionVariables.clear()
- 清空全局变量
pm.globals.clear()
- 清空数据变量
pm.iterationData.clear()
- 举例:以pm.environment.clear()为例
- 运行之后可以看到,所有环境变量都被删除了
- 运行之后可以看到,所有环境变量都被删除了
(8)将数据变量转换为json格式
pm.iterationData.toJSON()
- 顾名思义,这个方法只提供给数据变量使用。
附录:postman系列文章目录
零基础入门接口功能测试教程-目录