当前位置: 首页 > news >正文

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

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

文章目录

  • 一、pm对象介绍
  • 二、使用PM对象访问与操作请求参数(pm.request.*)
      • (1)接口请求的URL
      • (2)接口请求头
      • (3)接口请求body
      • (4)接口请求方法
    • 三、示例:在脚本中修改请求参数模式(formdata改为raw)
  • 附录:postman系列文章目录

一、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
  • 通过URL对象对接口URL进行访问和操作:

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

(2)接口请求头

  • 接口请求头
pm.request.headers //接口请求头列表
  • 对接口请求头进行访问和操作:
    • 传入键值对,添加请求头参数:
      pm.request.headers.add({key: "variable_key",value: "variable_value"})  
      //运行后添加请求头参数为 variable_key=variable_value
      
    • 返回所有请求头参数:
      pm.request.headers.all()
      
    • 通过key获取对应的value:
      pm.request.headers.get("variable_key")  
      
    • 通过key判断参数是否存在:
      pm.request.headers.has("variable_key")
      
    • 清空请求头参数:
      pm.request.headers.clear() 
      
    • 添加一个请求头参数,或修改一个已存在的请求头参数:
      pm.request.headers.upsert({key: "variable_key",value: "variable_value"}) 
      
    • 移除指定请求头参数:
      pm.request.headers.remove("variable_key")
      
    • 除标准请求头参数之外的请求头列表的大小:
      pm.request.headers.contentSize()
      
    • 请求头列表的长度:
      pm.request.headers.count()
      
  • 在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() //以字符串形式返回请求头列表
    

(3)接口请求body

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

  • 接口请求头
pm.request.body //接口请求头列表
  • 针对请求body可以直接使用方法:
    • 请求body是否为空:
      pm.request.body.isEmpty()
      
    • 以json格式返回请求body:
      pm.request.body.toJSON()
      
  • 但要具体到操作某一个参数,则需要访问pm.request.body的属性:
    • 请求body的模式:
      pm.request.body.mode
      
    • 请求body url编码模式:
      pm.request.body.urlencoded
      
    • 请求body表单模式:
      pm.request.body.formdata
      
    • 请求body的文件:
      pm.request.body.file 
      
    • 请求body图形语言模式:
      pm.request.body.graphql
      
    • 请求body源模式:
      pm.request.body.raw 
      
  • 这里介绍以常用的表单模式(formdata)为例:
  • 如果接口请求参数设置时,配置在表单模式下,则可以用下面的方法操作参数:
    在这里插入图片描述
    • 请求body参数个数:
      pm.request.body.formdata.count()
      
    • 新增参数:
      pm.request.body.formdata.add({key: "key",value: "value"})
      
    • 在请求body末尾新增参数:
      pm.request.body.formdata.append({key: "key",value: "value"}) 
      
    • 返回所有body参数:
      pm.request.body.formdata.all()
      
    • 以JSON形式返回参数列表:
      pm.request.body.formdata.toJSON() 
      
    • 清空请求body:
      pm.request.body.formdata.clear()
      
    • 获取参数值:
      pm.request.body.formdata.get("key")
      
    • 判断参数是否存在:
      pm.request.body.formdata.has("key")
      
    • 移除指定参数:
      pm.request.body.formdata.remove("key")
      
    • 添加一个请求头参数,或修改一个已存在的请求头参数:
      pm.request.body.formdata.upsert({key: "key",value: "value"}) 
      
    • 与请求头列表类似,请求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形式返回参数列表
      
  • 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() //在字符串中搜索关键字,返回关键字第一次出现的位置。
    

(4)接口请求方法

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

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

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

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

附录:postman系列文章目录

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

相关文章:

  • Go语言中context原理及使用
  • Kafka分级存储概念(一)
  • L6201PSTR DMOS全桥驱动器
  • WPS二次开发系列:一文快速了解WPS SDK功能场景
  • 自我模拟面试
  • 力扣:416. 分割等和子集(Java,动态规划:01背包问题)
  • IPD(集成产品开发)—核心思想
  • K8s Pod资源管理组件
  • 编译opencv gpu版的条件
  • 51单片机-(定时/计数器)
  • 光学3D表面轮廓仪微纳米三维形貌一键测量
  • 数学建模论文、代码百度网盘链接
  • mysql之SQL练习
  • List——顺序表与链表(二)
  • [附源码]Python计算机毕业设计SSM景区在线购票系统(程序+LW)
  • 时序数据库基本概念学习
  • [架构设计] 结构型模型
  • [附源码]计算机毕业设计基于springboot的汽车租赁系统
  • [附源码]Python计算机毕业设计SSM竞赛报名管理系统(程序+LW)
  • mssql(1433端口)介绍
  • 文华财经期货傻瓜式操作设置期货止盈止损指标公式,期货技术分析多空平仓离场信号
  • java计算机毕业设计医院挂号管理系统源程序+mysql+系统+lw文档+远程调试
  • Springboot流浪动物管理系统p2326计算机毕业设计-课程设计-期末作业-毕设程序代做
  • Dreamweaver网页设计与制作100例 餐饮主题简洁日式料理餐饮网页设计(4页)HTML+CSS+JavaScript
  • [附源码]计算机毕业设计点餐系统
  • 海口市美兰区图书馆建筑结构设计(计算书+任务书+建筑结构施工组织设计cad图纸)
  • 昨晚停网后,我写了一段Python代码攻破了隔壁老王家的wifi密码
  • [激光原理与应用-36]:《光电检测技术-3》- 光学测量基础 - 光电效应与光电探测器的基本原理
  • 计算机毕业设计Java电子病历系统(源码+系统+mysql数据库+lw文档)
  • 【LIN总线测试】——LIN主节点数据链路层测试
  • Docker consul的容器服务更新与发现
  • [附源码]计算机毕业设计小区物业管理系统Springboot程序