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

    (2)获取变量的值

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

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

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

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

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

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

    (3)设置变量的值

    pm.*.set("变量名", "值")
    
    • 1
    • 这个方法可以修改指定变量的值,如果变量不存在则根据传入方法的变量名和值新增一个变量。
    • 根据变量的范围,这个方法可以分为以下几种:
      1. 新增本地变量或修改指定变量的值
        pm.variables.set("变量名", "值")
        
        • 1
      • 注意,使用这个方法设置变量的值时,不会修改变量原始值,而是生成一个临时的本地变量,仅在当前请求或运行集合时生效。
      • 如下图,全局变量存在变量“test”,在使用pm.variables.set()方法改变变量的值后,打印出来的已经是新的值,但是全局变量中“test”变量的值并没有改变。
        在这里插入图片描述
      1. 新增环境变量或修改环境变量内指定变量的当前值
        pm.environment.set("变量名", "值")
        
        • 1
      2. 新增集合变量或修改集合变量内指定变量的当前值
        pm.collectionVariables.set("变量名", "值")
        
        • 1
      3. 新增全局变量或修改全局变量内指定变量的当前值
        pm.globals.set("变量名", "值")
        
        • 1
      4. 与 .get() .has()不同,数据变量不支持 .set() 这个方法。
    • 举例: 以pm.environment.set()为例。如下图,环境变量存在变量“Environment_test”,使用pm.environment.set.set()方法,会修改原变量的当前值;变量“New_Environment”不存在,会新增一个变量。
      • 运行前:在这里插入图片描述
      • 运行后:
        在这里插入图片描述

    (4)在脚本中使用动态变量

    pm.*.replaceIn("{{变量名}}")
    
    • 1
    • 这个方法是专门用于在脚本中使用动态变量,在专栏的前一篇文章中也有详细介绍过这个方法。
      动态变量(Dynamic variables)详细介绍
    • 使用这个方法,可以返回字符串中动态变量的解析值,最终的返回值也是字符串。例如:
      	console.log(pm.variables.replaceIn("返回一个随机时间戳:{{$timestamp}}"))
      
      • 1

    在这里插入图片描述

    • 除pm.variables.replaceIn()之外,指定变量的范围,还可以解析对应范围内的变量:
      1. 只能解析动态变量
        pm.variables.replaceIn("{{变量名}}")
        
        • 1
      2. 可以解析动态变量和环境变量
        pm.environment.replaceIn("{{变量名}}")
        
        • 1
      3. 可以解析动态变量和集合变量
        pm.collectionVariables.replaceIn("{{变量名}}")
        
        • 1
      4. 可以解析动态变量和全局变量
        pm.globals.replaceIn("{{变量名}}")
        
        • 1
      5. 在数据变量不支持这个方法
    • 举例:同时在字符串中引用环境变量、动态变量、全局变量。
      str_var = "环境变量:{{Environment_test}},动态变量:{{$timestamp}},全局变量:{{global_test}}"
      console.log("使用环境变量的方法:",pm.environment.replaceIn(str_var));
      console.log("使用全局变量的方法:",pm.globals.replaceIn(str_var));
      
      • 1
      • 2
      • 3
      • 运行脚本之后可以看到,使用pm.environment.replaceIn({{变量名}})只能解析出动态变量和环境变量,使用pm.globals.replaceIn({{变量名}})只能解析出动态变量和全局变量。
        在这里插入图片描述

    (5)返回所有变量与值

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

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

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

    (6)删除指定变量

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

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

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

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

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

    附录:postman系列文章目录

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

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

  • 相关阅读:
    【LeetCode刷题(数据结构与算法)】:合并两个有序链表
    Docker基本原理
    NPM- 滚动进度可视化插件
    Quantlab整合Alpha158因子集,为机器学习大类资产配置策略做准备(代码+数据)
    解析java中的包装类
    刷完这个笔记,17K不能再少了....
    vue、react数据绑定的区别?
    Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
    构建基于neo4j知识图谱、elasticsearch全文检索的数字知识库
    6-3 求链式表的表长分数 10
  • 原文地址:https://blog.csdn.net/weixin_40883833/article/details/127098909