Postman进阶使用
前言
postman不止可以让我们便捷地完成接口调用,还有许多进阶的技巧可以帮忙我们处理一些特殊场景参数。本文将对postman的一些进阶技巧进行分享
本篇文章是以Postman Version 9.31.0
作为案例进行演示,不同版本的页面布局可能有所区别
一、生成不同格式的请求url
postman支持我们把配置好的请求转成各种方式的请求格式,比如转成linux
操作系统的curl
格式请求。这是一个十分实用的功能,具体操作如下:
(一)打开需要转换的原始请求
(二)找到code按钮
(三)选择自己需要的请求格式
其实根据自己的使用经验来看,不同的postman版本对于
code
功能的展示位置是存在差异的,个人觉得能够知道postman有这个功能,有需要的时候能够找到并使用就行。
二、多环境配置变量
相同接口的访问,开发环境和测试环境一般除了请求参数和域名不同外,其他参数都是相同的。我们没必要为不同环境的接口调用单独创建一个接口,只需要配置好不同环境的环境变量即可。下面是具体的操作步骤:
(一)找到配置变量的功能入口
(二)根据实际需要配置不同环境所需的变量
用相同的步骤再定义测试环境的配置
(三)实际使用中通过右上角的环境切换来调用不同环境的接口
需要注意的是,切换好环境后,我们需要使用双大括号{{变量名}}
的方式来表示我们将在此处使用我们定义好的环境变量
三、postman脚本的使用
个人觉得postman真正的强大之处其实还在于支持写脚本来辅助我们实现接口调用,要知道其实现在很多接口的调用都会夹杂着各种加密算法或者动态参数,如果没有脚本去辅助我们实现动态参数的生成的话,那么其实是很难完成接口的调用的。而postman
的脚本功能主要在于pre-request script
的使用上,我们可以通过js
代码来辅助我们完成一些逻辑的书写。下面是一些常见的使用技巧:
(一)变量定义和使用
postman
支持我们在脚本中设置变量(实际上这也是postman支持生成动态参数的原理)和获取变量,具体方式如下:
- 变量的定义
pm.variables.set(variableName:String, variableValue:*)
pm.environment.set("key", value); # 设置当前环境下生效的变量
pm.globals.set("key", value); # 设置全局变量
pm.collection.set("key", value); # 设置Collection生效的变量
- 变量的获取
pm.variables.get(variableName:String)
pm.environment.get("key"); # 从当前环境下获取变量的值
pm.globals.get("key"); # 从全局中获取变量的值
pm.collection.get("key"); # 从当前Collection下获取变量的值
- 其他关于变量的api
(1)判断是否存在某个变量
pm.environment.has(variableName:String)
(2)动态拼接变量
pm.environment.replaceIn(variableName:String)
const stringWithVars = pm.environment.replaceIn("Hi, my name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
(3)移除某个变量
pm.environment.unset
(4)移除所有变量
pm.environment.clear()
(二)获取请求中的参数
有时候我们需要在脚本中去获取url、param或者header等参数,postman也支持我们通过pm.request.xxx
的语法来进行获取。下面是常见的API
:
pm.request.url # 获取url参数
pm.request.headers # 返回所有请求头参数
pm.request.method # 返回请求的方法类型
pm.request.body # 返回请求体的参数
pm.request.headers.add(header:Header) # 通过脚本的方式来加请求头
# 下面是用例
pm.request.headers.add({
key: "client-id",
value: "abcdef"
});
pm.request.headers.remove(headerName:String) # 通过脚本的方式来移除请求头
这里我们可以简单的用postman演示一下:
(三)使用内置或者第三方库的函数
对于一些简单的逻辑处理我们都可以通过自己写js脚本来解决,但是有时候涉及到复杂的加密算法,就很难通过自己手写代码的方式来解决了,我们肯定是希望有第三方的函数来解决我们的需求。实际上postman本身就内置了一小部分组件库,同时也支持我们引入第三方的组件来帮助我们进行脚本执行。
- Lodash:JS实用程序库
- cheerio:jQuery子集,提供更快速,精简的API(4.6.0及更高版本中提供)
- BackboneJS 不推荐使用:提供简单的模型,视图和集合。这将在未来版本的沙箱中删除。
- SugarJS 不推荐使用:使用有用的方法扩展本机JS对象。这将在未来版本的沙箱中删除。
- tv4 JSON模式验证器:针对json-schema草案的v4,用于验证JSON对象
-
CryptoJS:标准和安全的加密算法。支持的算法:AES,DES,EvpKDF,HMAC-MD5,HMAC-SHA 1/3/256/512,MD5,PBKDF2,Rabbit,SHA1/3/224/256/512,TripleDES
更多官方提供的内置库,可以自己去官网上面看:postman官方提供的第三方库
因为加密算法我们使用的频率比较高,所以这里针对加密算法的使用我们单独用案例来演示一下:
- 使用CryptoJS组件进行SHA512算法加密
var times = Date.now();
var finalSecret = CryptoJS.SHA512("123"+times).toString();
pm.environment.set("finalSecret", finalSecret);
当然了,除了SHA512
加密外,我们还可以使用CryptoJS
来完成更多的操作。
// 使用SHA256进行加密
var finalSecret = CryptoJS.SHA256("待加密字符串").toString();
// HmacSHA256加密
var finalSecret = CryptoJS.HmacSHA256("待加密的字符串","秘钥").toString();
// BASE64加密
var finalSecret =CryptoJS.enc.Utf8.parse("待加密字符串").toString(CryptoJS.enc.Base64);
// BASE64解密
var finalSecret =CryptoJS.enc.Base64.parse(test).toString(CryptoJS.enc.Utf8)
// AES加密
var finalSecret = CryptoJS.AES.encrypt('待加密字符串',"秘钥").toString()
// AES解密
finalSecret = CryptoJS.AES.decrypt("待解密字符串","秘钥").toString()
(四)postman自带的变量
对于诸如uuid
、timestamp
(当前时间戳)、某个范围内的随机数字
等经常使用的变量,postman也内置了一些函数变量来方便我们直接使用。
{{$guid}}:添加一个V4风格GUID(如: aa002-44ac-45ca-aae3-52bf19650e2d)
{{$timestamp}}:将当前的时间戳,精确到秒
{{$randomInt}}:添加0和1000之间的随机整数
{{$randomIP}}:生成一个IPv4格式的随机IP
{{$randomDateFuture}}:生成一个随机的未来时间
{{$randomPhoneNumber}}:生成随机的手机号,eg:700-008-5275
更多变量内容,建议可以直接看官方文档:postman提供的直接变量
结语
postman的进阶功能还有很多,例如断言和test
功能的使用可以帮助我们做接口返回值的校验,对于测试同学来说会更加好用,但因为这个功能平时我用的不多,就不进行介绍了,有兴趣的同学可以自行查资料。对于更多postman
的使用技巧,也可以通过官方文档:https://learning.postman.com/docs/introduction/overview/ 来进行了解,熟练掌握postman工具,相信能够帮助我们更好的完成日常工作的内容,提升测试效率。