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

news2024/9/21 10:50:14
  • 在之前的文章中介绍过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系列文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文华财经期货多空趋势指标公式,期货幅图高抛低吸逃顶抄底精准买卖点信号系统

刚开始接触交易时,看着满屏的K线图,各种的 指标,脑子里自然会认为交易时一个非常复杂的事情,复杂到处处透露着神秘感,随着对交易学习的不断深入,看着厚厚的交易书籍,还 有复杂的图形演变、复杂的…

[附源码]Python计算机毕业设计SSM景区在线购票系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]计算机毕业设计共享汽车系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

昨晚停网后,我写了一段Python代码攻破了隔壁老王家的wifi密码

前言 本文给大家分享的是如何通过 Python 脚本实现 WIFI 密码的暴力攻防,从而实现免费蹭网。 开发工具 Python版本: 3.8 相关模块: pywifi模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 文中密码本…

前端问题解决方法

src动态绑定的时候,千万不要忘记了 : ​ display:inline-block导致高度缩小,而且height增大也没有任何变化display:inline-block其他问题,参考这篇博客前端 - 解决inline-block元素的3个 bug_个人文章 - SegmentFault …

基于DNN深度学习网络的OFDM信号检测算法的matlab仿真,对比LS和MMSE两个算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在OFDM系统中,信道估计器的设计上要有两个问题:** 一是导频信息的选择,由于无线信道的时变特性,需要接收机不断对信道进行跟踪,因此导频信息也必须…

【科技与狠活】如何利用Python绘制足球场

卡塔尔世界杯赛程近半,朋友圈都在晒中奖的体育彩票,而我在搬砖🧱。 今天我将介绍如何使用Python Matplotlib创建一个足球场,本文设计球场尺寸为10568。 首先导入所需的依赖包: import pandas as pd import numpy as…

Spring框架(八):基于xml方式Bean的配置

基于xml方式Bean的配置引子基于xml方式Bean的配置Sping工厂实现静态工厂实例工厂FactoryBeanBean的依赖注入Spring的xml标签Spring的getBean方法Spring配置非自定义BeanSpringBean实例化的基本流程引子 痛定思痛,主要问题出现在自己雀氏不熟悉框架底层、一些面试题…

Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.1 计算属性

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.5 计算属性和侦听器1.5.1 计算属性1 基础 1.5 计算属性和侦听器 1.5.1 计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。 在模板中放入太多的逻辑会让模板过重且…

【Linux内核】Linux内核介绍

Linux学习内核思路 学习过程: Linux内核引导及如何初始化进程管理、内存管理 内核引导及过程:CPU通电后,首先执行引导程序,引导程序把内核加载到**内存,**然后执行内核,内核初始化完成后,启动…

[附源码]计算机毕业设计二次元信息分享平台的设计及实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

年产2万吨山楂酒工厂的设计-陈酿工段及车间的设计(lunwen+任务书+cad图纸)

目录 摘 要 I Abstract II 1前 言 1 1.1设计背景及目的 1 1.1.1山楂酒的介绍及功效 1 1.1.2目标人群 1 1.1.3发展前景 2 1.2设计依据 2 1.3设计内容 2 1.4原材料的选择 3 第二章 山楂酒生产工艺设计 5 2.1工艺流程 5 2.2 操作要点 5 2.2.1 原料选择 5 2.2.2清洗: 5 …

机器学习:详细推导高斯混合聚类(GMM)原理(附Python实现)

目录0 写在前面1 高斯概率密度2 混合高斯分布3 GMM算法3.1 定义3.2 参数估计4 Python实现4.1 算法流程4.2 E步4.3 M步4.4 可视化0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“…

用 NEON 实现高效的 FIR 滤波器

系列文章目录 数字信号处理中的 SIMDNeon intrinsics 简明教程 文章目录系列文章目录写在前面前言FIR 滤波器优化方案何时应该使用时域的滤波器?如何加快FIR滤波器的实现速度?初步假设有限长度信号反转的滤波器系数实际的卷积公式卷积过程可视化线性卷积…

第二期 微信云开发之位置信息获取(wx.getLocation)

很多小伙伴在开发微信小程序的时候,需要获取当前用户位置信息时,都会遇到该如何获取位置详细信息的问题,以下是我的处理方法。 首先,我在生活智打卡小程序使用的是微信小程序自带的获取用户的位置信息的接口(wx.getLoc…

基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)

分类号:TP315 U D C:D10621-408-(2007)5978-0 密 级:公 开 编 号:2003031227 成都信息工程学院 学位论文 基于JSP技术的猎头公司管理软件的设计和实现 ——内部事务部分 基于JSP技术的猎头公司管理软件的设计和实现 ——内…

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

文章目录 Python零基础快速制作足球游戏(附源代码) 前言 一、Python环境说明 二、游戏程序说明 1、游戏开始界面 2、人物移动规则说明,可支持两位玩家 3、足球规则 4、主方法调取 三、游戏运行效果与比赛结果 1、游戏开始界面 2、…

桥接设计模式

一、桥接模式 1、定义 桥接模式(Bridge Pattern)又称作桥梁模式,指将抽象部分与具体实现部分分离,使它们都可以独立地变化,属于结构型设计模式。 桥接模式的主要目的是通过组合的方式建立两个类之间的联系&#xff0c…

java计算机毕业设计ssm社区养老服务管理系统iq0w7(附源码、数据库)

java计算机毕业设计ssm社区养老服务管理系统iq0w7(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…