本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/126752386
工作中,会常常遇到 有些接口会用到加密,倘若这部分接口要做压测,加密这部分 要怎么处理呢?本期 分享些我自己的做法。
【实际这篇博客推迟发布N个月】
个人博客:https://blog.csdn.net/zyooooxie
【以下所有内容仅为个人项目经历,如有不同,纯属正常】
接口
/DevicePromote是 我们项目 在公司某设备 专门推广时,提供的接口,传参只有一个 param(参数值 是加密字符串)。
param的 参数值,明文 是一个JSON串, {“mobile”: phone, “spNet”: dept, ‘qq’: ‘153132336’, “name”: “zyooooxie”};使用的是 AES加密,加密模式是ECB (如何加密,之前分享过一些 https://blog.csdn.net/zyooooxie/article/details/117022776 )。
偷懒-用不同情景来压测
在完成 当前版本的功能测试后,急着压测(为了得到QPS,方便 生产环境Sentinel 配置限流规则),
所以为了快速、简单得出结论,我和开发 确定了:以不同情景 分别来压测(这个接口内里的情景 分为5种)。
不巧的是:在测试过程中,也就只有我的账号准备了数据(没法参数化了),不得已,只能选(我的手机号+特定dept)来压。
【压测时,param 的值 直接 写死;这是一个偷懒且无奈的做法,但 断言(根据情景来设置)却是 有效且准确的:每个情景的返回值固定】
param 的值,是通过下面的方法 拿到的。
"""
@blog: https://blog.csdn.net/zyooooxie
"""
def encrypted_0908(phone: str, dept: str):
"""
:param phone:手机号
:param dept:
:return:
"""
mobile = encrypted_phone_number(phone)
data_json = {"mobile": mobile, "spNet": dept}
data_json = json.dumps(data_json, ensure_ascii=False)
encrypt_func(encrypt_str=data_json, key='qq:153132336')
请求
断言
压测报告
情景1的:
情景5的:
稳妥-要做参数化
param 的值,最好 是做 参数化。
【这是一个稳妥的做法,但 断言却是 不精准的:每次请求(走的情景是不确定的)返回值可能完全不同,只能做 通用的断言】
请求
断言
加密这一部分工作,是 可以放到JMeter里来做的,当然也可以放到JMeter外面来做。
方案1-加密 在JMeter里完成
在压力机压测 发请求时,要先完成加密计算,这样 会消耗掉 压力机本身的部分性能。
参数化
phone、dept 都 要做参数化。
调用Jar包
有其他依赖的jar包,也需要一起放入。
BeanShell PreProcessor
添加 > 前置处理器 > BeanShell PreProcessor
https://jmeter.apache.org/usermanual/component_reference.html#BeanShell_PreProcessor
压测报告
本文链接:https://blog.csdn.net/zyooooxie/article/details/126752386