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

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

概述

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

业务流程

这个第三方的签署流程大致如下
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 给短暂封闭了

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册。