• Postman进阶篇(十一)-在脚本中使用pm对象访问接口请求(pm.request.*)


    • 在之前的文章中介绍过postman中的两个脚本——pre-request script或test script,在这两个脚本中都有使用到pm对象。(pre-request script详细介绍Test script详细介绍
    • pm对象是在postman的脚本中非常重要,也是十分常用的方法。
    • 本篇主要介绍pm对象的使用方法操作接口请求。

    一、pm对象介绍

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

    二、使用PM对象访问与操作请求参数(pm.request.*)

    • pm.request 对象可以在脚本中对请求数据进行访问。
    • 对于预请求脚本来说,pm.request对象访问的是即将运行的请求,而对于测试脚本,则是已经运行的请求。
    • 如果在预请求脚本中使用pm.request,还可以在请求之前对请求参数进行增删改。
    • 注意:使用pm.request对请求参数的增删改,不会修改接口原始数据,只在本次接口运行时生效

    下面内容涉及以下知识点:
    pre-request script详细介绍console控制台详细介绍

    (1)接口请求的URL

    • 接口URL
    pm.request.url //接口URL
    
    • 1
    • 通过URL对象对接口URL进行访问和操作:

      • 获取URL中的host:
        pm.request.url.getHost()
        
        • 1
      • 返回请求路径:
        pm.request.url.getPath()
        
        • 1
      • 返回请求中完整路径,包括查询字符串:
        pm.request.url.getPath()
        
        • 1
      • 以字符串格式,返回查询参数:
        pm.request.url.getQueryString()
        
        • 1
      • 返回主机和端口,用“:”分隔:
        pm.request.url.getRemote()
        
        • 1
      • 传入键值对,添加查询参数:
        pm.request.url.addQueryParams({key: "variable_key",value: "variable_value"})  
        //运行后添加的查询参数为 variable_key=variable_value
        
        • 1
        • 2
      • 删除指定查询参数:
        //删除单个查询参数
        pm.request.url.removeQueryParams(“variable_key”)  //运行后删除查询参数 variable_key
        
        //删除多个查询参数
        pm.request.url.removeQueryParams([“variable_key”,“variable_key2”]) //运行后删除查询参数 variable_key和variable_key2
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 设置URL,只会在此次运行生效:
        pm.request.url.update("http://postman-echo.com/post")
        //运行后添加的URL为 http://postman-echo.com/post
        
        • 1
        • 2
    • 在pre-request script中使用上述方法,通过控制台查看运行之后的效果:
      在这里插入图片描述

    (2)接口请求头

    • 接口请求头
    pm.request.headers //接口请求头列表
    
    • 1
    • 对接口请求头进行访问和操作:
      • 传入键值对,添加请求头参数:
        pm.request.headers.add({key: "variable_key",value: "variable_value"})  
        //运行后添加请求头参数为 variable_key=variable_value
        
        • 1
        • 2
      • 返回所有请求头参数:
        pm.request.headers.all()
        
        • 1
      • 通过key获取对应的value:
        pm.request.headers.get("variable_key")  
        
        • 1
      • 通过key判断参数是否存在:
        pm.request.headers.has("variable_key")
        
        • 1
      • 清空请求头参数:
        pm.request.headers.clear() 
        
        • 1
      • 添加一个请求头参数,或修改一个已存在的请求头参数:
        pm.request.headers.upsert({key: "variable_key",value: "variable_value"}) 
        
        • 1
      • 移除指定请求头参数:
        pm.request.headers.remove("variable_key")
        
        • 1
      • 除标准请求头参数之外的请求头列表的大小:
        pm.request.headers.contentSize()
        
        • 1
      • 请求头列表的长度:
        pm.request.headers.count()
        
        • 1
    • 在pre-request script中使用上述方法,通过控制台查看运行之后的效果
    • 方法比较多,就不一一演示了。可以参照示例,在postman中实际运行一下。
      在这里插入图片描述
    • 大部分时候使用上诉方法已经足够了。除此之外,也可以使用内置方法对请求头参数进行操作,感兴趣可以试一下:
      pm.request.headers.each(function(i) {console.log(i)}) //返回请求头列表里每一个参数,并可以通过函数处理参数
      pm.request.headers.filter({value: "value_1"})//过滤器,根据条件返回对应的请求头参数。此方法的返回结果为数组,只要符合条件的参数都会返回。
      pm.request.headers.find({value: "value_1"}) //查找请求头参数,返回符合条件的参数。此方法只会返回第一个匹配的结果。
      pm.request.headers.idx(0) //传入整数,返回请求头参数列表中对应位置的参数
      pm.request.headers.insert({key: "header_3",value: "value_3"},"header_1") //插入一个请求头参数,默认插入在末尾,如果第二个参数传入请求头参数的key,也可以插入这个请求头参数之前。
      pm.request.headers.insertAfter({key: "header_3",value: "value_3"},"header_1") //与insert类似,不一定的是这个方法是插入在指定参数之后
      pm.request.headers.prepend({key: "header_3",value: "value_3"})//在请求头列表的第一位添加请求头参数
      pm.request.headers.toObject() //以Object形式返回请求头列表
      pm.request.headers.toString() //以字符串形式返回请求头列表
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    (3)接口请求body

    请求body各个类型的介绍可以参考专栏之前的文章:
    请求body类型介绍与配置

    • 接口请求头
    pm.request.body //接口请求头列表
    
    • 1
    • 针对请求body可以直接使用方法:
      • 请求body是否为空:
        pm.request.body.isEmpty()
        
        • 1
      • 以json格式返回请求body:
        pm.request.body.toJSON()
        
        • 1
    • 但要具体到操作某一个参数,则需要访问pm.request.body的属性:
      • 请求body的模式:
        pm.request.body.mode
        
        • 1
      • 请求body url编码模式:
        pm.request.body.urlencoded
        
        • 1
      • 请求body表单模式:
        pm.request.body.formdata
        
        • 1
      • 请求body的文件:
        pm.request.body.file 
        
        • 1
      • 请求body图形语言模式:
        pm.request.body.graphql
        
        • 1
      • 请求body源模式:
        pm.request.body.raw 
        
        • 1
    • 这里介绍以常用的表单模式(formdata)为例:
    • 如果接口请求参数设置时,配置在表单模式下,则可以用下面的方法操作参数:
      在这里插入图片描述
      • 请求body参数个数:
        pm.request.body.formdata.count()
        
        • 1
      • 新增参数:
        pm.request.body.formdata.add({key: "key",value: "value"})
        
        • 1
      • 在请求body末尾新增参数:
        pm.request.body.formdata.append({key: "key",value: "value"}) 
        
        • 1
      • 返回所有body参数:
        pm.request.body.formdata.all()
        
        • 1
      • 以JSON形式返回参数列表:
        pm.request.body.formdata.toJSON() 
        
        • 1
      • 清空请求body:
        pm.request.body.formdata.clear()
        
        • 1
      • 获取参数值:
        pm.request.body.formdata.get("key")
        
        • 1
      • 判断参数是否存在:
        pm.request.body.formdata.has("key")
        
        • 1
      • 移除指定参数:
        pm.request.body.formdata.remove("key")
        
        • 1
      • 添加一个请求头参数,或修改一个已存在的请求头参数:
        pm.request.body.formdata.upsert({key: "key",value: "value"}) 
        
        • 1
      • 与请求头列表类似,请求body也可以只用内置方法,有兴趣可以试一下:
        pm.request.body.formdata.each(function(i) {console.log(i)})
        console.log("过滤器:",pm.request.body.formdata.filter({value: "value_"}))//过滤器,根据条件返回对应的参数。此方法的返回结果为数组,只要符合条件的参数都会返回。
        console.log("查找:",pm.request.body.formdata.find({value: "value_"})) //查找参数,返回符合条件的参数。此方法只会返回第一个匹配的结果。
        console.log("获取排在第x位的参数:",pm.request.body.formdata.idx(0)) //传入整数,返回请求头参数列表中对应位置的参数
        pm.request.body.formdata.insert({key: "body_3",value: "body_3"},"body_") //插入一个参数,默认插入在末尾,如果第二个参数传入参数的key,也可以插入这个请求头参数之前。
        pm.request.body.formdata.insertAfter({key: "body_4",value: "body_4"},"body_3") //与insert类似,不一定的是这个方法是插入在指定参数之后
        pm.request.body.formdata.prepend({key: "body_0",value: "body_0"})//在参数列表的第一位添加请求头参数
        console.log("参数列表(Object):",pm.request.body.formdata.toObject()) //以Object形式返回参数列表
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • URL编码模式(urlencoded)与表单模式类似,操作参数时,只需要把pm.request.body.formdata换成pm.request.body.urlencoded即可。
    • 源模式(raw)的参数可以使用内置的字符串方法进行操作:
      pm.request.body.raw.toString() //以字符串的形式返回参数
      pm.request.body.raw.toUpperCase() //将字符串中的所有字母字符转换为大写。
      pm.request.body.raw.trim() //从字符串中删除前导空格和尾随空格以及行终止符。
      pm.request.body.raw.toLowerCase() //将字符串中的所有字母字符转换为小写。
      pm.request.body.raw.split() //使用指定的分隔符将字符串拆分为子字符串,并将其作为数组返回。
      pm.request.body.raw.slice() //返回字符串的一部分。
      pm.request.body.raw.search() //在正则表达式搜索中查找第一个子字符串匹配项。
      pm.request.body.raw.replace() //使用支持字符串内替换的对象替换字符串中的文本。
      pm.request.body.raw.match() //匹配支持匹配的字符串或对象,并返回数组包含该搜索的结果,如果未找到匹配项,则为空。
      pm.request.body.raw.length //长度
      pm.request.body.raw.indexOf() //在字符串中搜索关键字,返回关键字第一次出现的位置。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    (4)接口请求方法

    pm.request.method //接口请求头列表
    
    • 1
    • 请求头方法可以直接调用,返回值为字符串,也可以只用内置的字符串方法,这里就不再详细介绍。

    三、示例:在脚本中修改请求参数模式(formdata改为raw)

    关于pm.request的实际运用也可以参考专栏另一个篇文章:
    实战:pre-request script加密接口请求参数(AES、MD5)

    • 在脚本中如果想要修改参数模式,需要将pm.request.body.mode的值进行修改
    //设置请求参数模式
    pm.request.body.mode = "raw"
    
    • 1
    • 2
    • 举一个例子,接口参数设置在formdata模式下
      在这里插入图片描述
    • 在预请求脚本中设置模式为“raw”
    pm.request.body.mode= "raw"//body的模式
    pm.request.body.raw = "raw_value,raw_value2" //设置raw参数
    
    • 1
    • 2
    • 运行接口之后可以看到,接口参数最后以“raw”模式请求。
      在这里插入图片描述

    附录:postman系列文章目录

    本篇文章姊妹篇:
    Postman进阶篇(十二)-在脚本中使用pm对象访问接口响应数据(pm.response.*)

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

  • 相关阅读:
    1.8 faker简单应用
    易懂-SpringMvc介绍和简单搭建
    3D游戏开发中的矩阵详解
    mysql数据库安装
    设计模式之享元模式(结构型)
    收藏|机械工程师面试常问问题
    Tdengine技术实践
    Qt day3
    在HTML里,attribute和property有什么区别?
    RayFire破碎基础
  • 原文地址:https://blog.csdn.net/weixin_40883833/article/details/127951696