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
- 获取URL中的host:
-
在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()
- 请求body是否为空:
- 但要具体到操作某一个参数,则需要访问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
- 请求body的模式:
- 这里介绍以常用的表单模式(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形式返回参数列表
- 请求body参数个数:
- 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系列文章目录
零基础入门接口功能测试教程-目录