Postman进阶篇(三)-实战:pre-request script加密接口请求参数(AES、MD5)

在接口测试时需要频繁的改变接口参数, 有些接口可能要求请求参数需要加密,这样使得每次修改请求参数都需要重新加密接口数据,增加了测试时间,也使得测试流程更加繁琐。
本篇文章的代码均由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系列文章内所使用的示例文件已经上传到了本人运营公众号【软件测试必备技能】
在这里插入图片描述
有需要可点击文章下发二维码,前往领取~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40883833/article/details/126593704