性能测试:Jmeter-Beanshell请求加密实例

目录

[1. 打包加密方法Jar包,导入Jmeter](#1. 打包加密方法Jar包,导入Jmeter)

[2. 加密参数](#2. 加密参数)

总结:


进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送。

这种场景下,使用Jmeter实现性能测试,则也需要使用同样的加密规则发送请求报文。

要实现此类性能测试有几种策略:

  1. 直接去除密文规则 - 由于报文加密并非性能关键,那么简单起见,直接测试明文请求一定程度上是可以接受的。
  2. 使用同样的加密规则加密报文发送 - 这样处理显然更接近实际场景,所以是一般比较推荐的做法。

本文讨论使用Jmeter发送加密请求实现性能测试。

1. 打包加密方法Jar包,导入Jmeter

首先,确认被测产品的加密策略。

这个过程应该通过阅读接口定义文档,询问开发人员,辅以抓包解析。

比如说,对于创建订单接口的抓包结果:

请求报文:

python 复制代码
POST https://ops.********.cn/***-api/member/system/login HTTP/1.1
Accept-Language: zh-CN,zh;q=0.8
User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 4A Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
token: 90e76710e105b217d185832057220cdd
appCode: ******
compCode: ****
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Host: ops.********.cn
Connection: Keep-Alive
Accept-Encoding: gzip

account=*********&password=2ac9cb7dc02b3c0083eb70898e549b63&sign=4b9932154067b4a35bd4c2e9eba8036f

以上的请求可以分析得出,加密的部分主要是password参数以及验签码sign(本例中是对请求参数部分加密,实际上整体报文加密可能更常见)。

然后,我们需要准备相应的加密方法。

这里推荐让开发人员直接给出产品原始的加密方法,予以导出形成jar包,以保证性能测试的加密方法与产品原始加密规则一致。

或者如果明确加密方式,也可以使用第三方加密jar包,或者自己编写。这里更推荐第一种,与开发协调取得。

最后,将准备好的jar包,导入Jmeter测试计划当中。

2. 加密参数

使用BeanShellPreProcessor,实现对请求的加密。

思路是:

  1. 导入使用第一步中的jar包作为加密工具库
  2. 使用特定密钥,对需要加密的字段进行加密处理
  3. 将加密后的字段存储为变量,供接口调用使用。

BeanShell代码如下:

python 复制代码
import cn.hutool.json.JSONUtil;
import com.***.controller.HttpClientUtil;
import com.***.encrypt.EncryptUtil;
import com.***.encrypt.gmhelper.MD5Util;
import java.util.HashMap;//设置密钥
   String signKey = "47fbbbd********0b8d7378";

   //读取用户账户变量
   String useraccount = vars.get("user");
   String pass = vars.get("pass");

   //加密处理
   paramMap = new HashMap();

   String password = MD5Util.encrypt(pass);
   
   paramMap.put("account", useraccount);
   paramMap.put("password", password);
   
   String sign = EncryptUtil.md5sign1(paramMap, signKey).toLowerCase();

   //将加密后的参数存储为变量
   vars.put("password",password);
   vars.put("sign",sign)

随后,只要在接口请求当中,使用变量的形式传参,即可实现请求报文部分加密传送。

调用接口发送请求,验证得知报文加密已实现:

同理可以实现多个不同接口的请求加密过程,整体Jmeter项目构成如下:

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

Python自动化测试学习交流群: 全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

相关推荐
懒大王爱吃狼30 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover3 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
API快乐传递者4 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃6 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
茶馆大橘8 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
丕羽9 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng9 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
2401_857622669 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
力姆泰克9 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节