测试驿栈-由浅入深学性能 jmeter 压测签名算法

飞天小子的性能课堂 · 2020年09月10日 · 最后由 飞天小子的性能课堂 回复于 2020年09月11日 · 4531 次阅读

概述

接到上级通知,需要配合第三方供应商,对他们的合同签署流程进行一次压测。听起来很简单,但是中间涉及到的东西很多

业务流程

这个第三方的签署流程大致如下
1.登录获取 token
2.获取当前时间戳
3.对合同 pdf 进行 base64 转码
4.转码过的合同写到 body 里
5.根据 token,时间戳,body,以及我们的私钥,通过算法生成一个 sign 签名
6.sign 计算之后,body 里面的 base64 会再一次转码
7.将 token,时间戳,私钥,sign 签名作为头部信息,和二次转码的 body 一起传参
大致如下图

技术难点

1.token 是动态的
2.时间戳是动态的
3.合同 pdf 转码之后太长,没有办法直接贴到 jmeter 的 body 里面,贴进去就彻底卡死
4.由于上面的几个参数都是动态,导致生成的 sign 也是动态的,随时在变
5.同一份合同只能签署一次,也就意味着如果想做压测,只能手动传不同的合同,不停地改 sign

解决方案

写 java 方法,实现以下功能
1.调接口自动获取 token
2.自动获取当前时间戳
3.读取本地文件的转码 body
4.通过 body,时间戳,token 生成 sign,然后将这三组参数分列存到本地文件。如果有多份 pdf 文件,就生成多组。如下所示

| sign | time | body |
| -------- | -------- |
| 1 | 2 | 3 |

5.jmeter 做参数化,并发去读取这三行参数

大致思路就是这些

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞

jmeter 使用 java 计算 sign 值,并添加到 url 里,虽然功能实现了,但这个 sign 的计算,导致严重影响 jmeter 的性能,不知道你有没有出现

sign 我是在本地代码跑出来的,jmeter 直接读取

重来看雨 回复

就是说我用 ide 跑的代码,把 sign 存下来。jmeter 直接去读

这样不会很麻烦?

重来看雨 回复

业务就这样,怕麻烦不行

重来看雨 回复

代码写出来,其实业务就很简单了。花点时间

jmeter 支持 jar 包导入的,楼主可以把代码导出成 jar 包然后在 jmeter 的前置处理器中处理加密签名等操作.#1 楼说的应该是这种场景下

昨天有雨 回复

jmeter 直接处理这些算法会影响性能,所以要分开

重来看雨 回复

我就这么干,java 计算 sign 值,hash+base64,前后对比性能影响不大。。。

蓝蓝 回复

为什么我打包 jar 引用,jmeter 的性能下降超级严重

重来看雨 回复

我没有引用 jar 包呀。只是本地起的 ide 去计算 sign,然后存到文件里面,让 jmeter 去读。jmeter 本身并没有引用任何 jar

13楼 已删除
14楼 已删除
重来看雨 回复

会不会是你们签名太复杂了呀~ 我直接丢到 BeanShellSampler 计算写入变量,url 获取变量这样。

蓝蓝 回复

有可能,涉及到参数排序,计算 sign,重写 url

jmeter 300 并发压测百度搜索接口五分钟为啥也会出现很多错误呢?请问怎么评估一个接口 TPS 和压测上限?

zkx 回复

那是因为百度把你的出口 ip 给短暂封闭了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册