在接口测试时需要频繁的改变接口参数, 有些接口可能要求请求参数需要加密,这样使得每次修改请求参数都需要重新加密接口数据,增加了测试时间,也使得测试流程更加繁琐。
本篇文章的代码均由JavaScript编写
接口请求加密是放在接口请求前,所以Pre-request Script的运行机制适合用来解决接口请求加密的问题。
(Pre-request Script详细介绍请看之前文章:
Postman进阶篇(一)-pre-request script入门及实现参数使用随机数)
理想的方案,是在编辑参数时使用明文编辑,然后在点击发送时,使用Pre-request Script对参数进行加密,再发送。
- 假设要加密请求body中的test的值。
一、AES加密
先贴上AES加密的完整代码
function AesEncrypt(data,secret_key){
//将AES加密写成有一个方法
var ECBOptions = {
mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7};//密码,文本,偏移量、模式等设置
var AesSecert = CryptoJS.enc.Utf8.parse(secret_key);//加密密码
var data_enc = CryptoJS.AES.encrypt(data, AesSecert, ECBOptions).toString()//AES加密
return data_enc //返回加密后的数据,格式为字符串
}
var test = pm.request.body.formdata.get('test') //获取接口参数
pm.request.body.formdata.remove('test') //移除原参数
pm.request.body.formdata.add({
'key':'test','value':AesEncrypt(test,'ABCDEFGHIjklmnop')}) //调用加密方法,并把加密后的结果作为test的value重新加入body中
- 点击发送之后可以从控制台看到,test的value变为AES加密后的状态。
代码解释
- 整个代码最核心的地方是AES加密的过程,crypto-js是JavaScript中的一个加密库,在postman中内置了这个方法,可以直接使用CryptoJS来调用。
CryptoJS.AES.encrypt()是AES加密方法,对应的还有AES解密方法CryptoJS.AES.decrypt() - 这里不详细介绍crypto-js了,网上有很多相关教程。关于解密的相关偏移量,秘钥、AES的工作模式、填充模式的设置可以与接口的开发人员确认后再修改为对应设置。
var ECBOptions = {
mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7};//密码,文本,偏移量、模式等设置
var AesSecert = CryptoJS.enc.Utf8.parse(secret_key);//加密密码
var data_enc = CryptoJS.AES.encrypt(data, AesSecert, ECBOptions).toString()//AES加密
- 第二个部分就是获取接口参数的值与重新设置加密后的参数。pm.request不仅可以获取body的值也可以获取请求头参数和URL的值,如果需要加密的是URL或是请求头参数,步骤也大致相同。
- 关于pm对象的详细介绍可看专栏文章:【在脚本中使用pm对象访问接口请求(pm.request.*)】
var test = pm.request.body.formdata.get('test') //获取接口参数
pm.request.body.formdata.remove('test') //移除原参数
pm.request.body.formdata.add({
'key':'test','value':AesEncrypt(test,'SecretKey')}) //调用加密方法,并把加密后的结果作为test的value重新加入body中
二、MD5加密
function Md5Encrypt(value){
// MD5加密
var val_md5 = CryptoJS.MD5(value).toString()
return val_md5 //返回加密后的数据
}
var test = pm.request.body.formdata.get('test') //获取接口参数
pm.request.body.formdata.remove('test') //移除原参数
pm.request.body.formdata.add({
'key':'test','value':Md5Encrypt(test)}) //添加加密后的参数
点击发送之后可以从控制台看到,test的value变为MD5加密后的状态。
代码解释
MD5的加密比AES的简单一些,还是使用CryptoJS方法,少了一些需要设置的参数。只要调用CryptoJS.MD5(),再用.toString()转为字符串就可以。
var val_md5 = CryptoJS.MD5(value).toString()
获取值与设置加密后的数据与AES加密中的方法一样,就不在重复介绍。
var test = pm.request.body.formdata.get('test') //获取接口参数
pm.request.body.formdata.remove('test') //移除原参数
pm.request.body.formdata.add({
'key':'test','value':Md5Encrypt(test)}) //添加加密后的参数
postman系列文章目录:
https://blog.csdn.net/weixin_40883833/article/details/126452017
—————————————————————————————————
postman系列文章内所使用的示例文件已经上传到了本人运营公众号【软件测试必备技能】
有需要可点击文章下发二维码,前往领取~