Postman进阶篇(十)-在pre-request script或test script中使用pm对象访问变量

  • 在之前的文章中介绍过postman中的两个脚本——pre-request script或test script,在这两个脚本中都有使用到pm对象。(pre-request script详细介绍Test script详细介绍
  • pm对象是在postman的脚本中非常重要,也是十分常用的方法。
  • 本篇主要介绍pm对象的使用方法中变量的访问与操作部分。
  • 关于Postamn中的变量可以查看专栏之前的文章:Postman中的变量

一、pm对象介绍

  • pm对象是Postman提供的可以在请求脚本中使用的JavaScript API。
  • pm对象提供对请求和响应数据以及变量的访问,使用pm对象可以对请求数据或响应数据的进行操作。

二、使用PM对象访问变量

  • 使用pm.*可以访问和操作Postman中每个作用域的变量。

(1)判断变量是否存在

pm.*.has("变量名")
  • 这个方法返回值为布尔值:true 代表此变量存在;false 代表此变量不存在
  • 根据变量的范围,这个方法可以分为以下几种:
    1. 在所有范围中判断变量是否存在
      pm.variables.has("变量名")
      
    2. 在环境变量中判断变量是否存在
      pm.environment.has("变量名")
      
    3. 在集合变量中判断变量是否存在
      pm.collectionVariables.has("变量名")
      
    4. 在全局变量中判断变量是否存在
      pm.globals.has("变量名")
      
    5. 在数据变量中判断变量是否存在
      pm.iterationData.has("变量名")
      
  • 举例: 以pm.variables.has(“变量名”)为例。如下图,全局变量存在变量“test”,pm.variables.has()方法返回的是true;变量“test_2”不存在,pm.variables.has()方法返回的是false。
    在这里插入图片描述

(2)获取变量的值

pm.*.get("变量名")
  • 这个方法返回指定变量的值,如果变量不存在则返回“undefined”
  • 根据变量的范围,这个方法可以分为以下几种:
    1. 在所有范围中获取变量的值

      pm.variables.get("变量名")
      
      • 注意: 当多个范围内都有相同key的变量时,使用pm.variables.get()方法时会返回最接近的范围内的变量。简而言之,顺序如下:
        Local(局部变量)> Data(数据变量)> Environment(环境变量)> Collection(集合变量)> Global(全局变量)
        例如:在Environment(环境变量)中有一个test=1,Global(全局变量)中有一个test=2,使用pm.variables.get(“test”)将会返回1
    2. 在环境变量中获取变量的值

      pm.environment.get("变量名")
      
    3. 在集合变量中获取变量的值

      pm.collectionVariables.get("变量名")
      
    4. 在全局变量中获取变量的值

      pm.globals.get("变量名")
      
    5. 在数据变量中获取变量的值

      pm.iterationData.get("变量名")
      
  • 举例: 以pm.variables.get(“变量名”)为例。如下图,全局变量存在变量“test”,使用pm.variables.get()方法能够返回“test”变量的值;变量“test_2”不存在,使用pm.variables.has()方法返回的是“undefined”。
    在这里插入图片描述

(3)设置变量的值

pm.*.set("变量名", "值")
  • 这个方法可以修改指定变量的值,如果变量不存在则根据传入方法的变量名和值新增一个变量。
  • 根据变量的范围,这个方法可以分为以下几种:
    1. 新增本地变量或修改指定变量的值
      pm.variables.set("变量名", "值")
      
    • 注意,使用这个方法设置变量的值时,不会修改变量原始值,而是生成一个临时的本地变量,仅在当前请求或运行集合时生效。
    • 如下图,全局变量存在变量“test”,在使用pm.variables.set()方法改变变量的值后,打印出来的已经是新的值,但是全局变量中“test”变量的值并没有改变。
      在这里插入图片描述
    1. 新增环境变量或修改环境变量内指定变量的当前值
      pm.environment.set("变量名", "值")
      
    2. 新增集合变量或修改集合变量内指定变量的当前值
      pm.collectionVariables.set("变量名", "值")
      
    3. 新增全局变量或修改全局变量内指定变量的当前值
      pm.globals.set("变量名", "值")
      
    4. 与 .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()之外,指定变量的范围,还可以解析对应范围内的变量:
    1. 只能解析动态变量
      pm.variables.replaceIn("{
              
              {变量名}}")
      
    2. 可以解析动态变量和环境变量
      pm.environment.replaceIn("{
              
              {变量名}}")
      
    3. 可以解析动态变量和集合变量
      pm.collectionVariables.replaceIn("{
              
              {变量名}}")
      
    4. 可以解析动态变量和全局变量
      pm.globals.replaceIn("{
              
              {变量名}}")
      
    5. 在数据变量不支持这个方法
  • 举例:同时在字符串中引用环境变量、动态变量、全局变量。
    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({ {变量名}})只能解析出动态变量和全局变量。
      在这里插入图片描述

(5)返回所有变量与值

pm.*.toObject()
  • 这个方法返回一个对象,该对象包含指定范围内所有变量及其值。

  • 根据变量的范围,这个方法可以分为以下几种:

    1. 返回所有变量
      pm.variables.toObject()
      
    • 这个方法,返回的变量根据优先级顺序。
      优先级顺序: Global(全局变量)、Collection(集合变量)、Environment(环境变量)、Data(数据变量)、Local(局部变量)】
    • 运行后可以看到这个方法按顺序返回了所有变量。
      在这里插入图片描述
    1. 返回环境变量中的所有变量
      pm.environment.toObject()
      
    2. 返回集合变量中的所有变量
      pm.collectionVariables.toObject()
      
    3. 返回全局变量中的所有变量
      pm.globals.toObject()
      
    4. 返回数据变量中的所有变量
      pm.iterationData.toObject()
      
  • 举例:以pm.environment.toObject()为例,运行后可以看到这个方法返回了所有环境变量。
    在这里插入图片描述

(6)删除指定变量

pm.*.unset("变量名")
  • 这个方法可以删除指定范围内的指定变量。
  • 根据变量的范围,这个方法可以分为以下几种:
    1. 这个方法需要指定范围,所以pm.variables 不支持这个方法。
    2. 从环境变量中删除指定变量
      pm.environment.unset("变量名")
      
    3. 从集合变量中删除指定变量
      pm.collectionVariables.unset("变量名")
      
    4. 从全局变量中删除指定变量
      pm.globals.unset("变量名")
      
    5. 从数据变量中删除指定变量
      pm.iterationData.unset("变量名")
      
  • 举例:以pm.environment.unset(“变量名”)为例,删除环境变量"New_Environment"
    在这里插入图片描述
    • 运行脚本后,可以看到这个变量被删掉了
      在这里插入图片描述

(7)清空指定范围内的变量

pm.*.clear()
  • 这个方法可以清空指定范围内的所有。
  • 根据变量的范围,这个方法可以分为以下几种:
    1. 这个方法需要指定范围,所以pm.variables 不支持这个方法。
    2. 清空环境变量
      pm.environment.clear()
      
    3. 清空集合变量
      pm.collectionVariables.clear()
      
    4. 清空全局变量
      pm.globals.clear()
      
    5. 清空数据变量
      pm.iterationData.clear()
      
  • 举例:以pm.environment.clear()为例
    在这里插入图片描述
    • 运行之后可以看到,所有环境变量都被删除了
      在这里插入图片描述

(8)将数据变量转换为json格式

pm.iterationData.toJSON()
  • 顾名思义,这个方法只提供给数据变量使用。

附录:postman系列文章目录

零基础入门接口功能测试教程-目录

—————————————————————————————————
postman系列文章内所使用的示例文件已经上传到了本人运营公众号【软件测试必备技能】
在这里插入图片描述
有需要可点击文章下发二维码,前往领取~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40883833/article/details/127098909