Jmeter调用python完成HmacSHA256加密处理
前言
同事有个需求,一个获取人员信息的接口,请求头里面需要有一个sign
参数,这个参数是几个实时获取的参数最后进行Hmachash256加密之后生成的,具体示例:
获取用户接口:
1 | GET http://192.168.0.1/api/user?userName=20190101&tenant=testtenant |
请求头:
key | value |
---|---|
Authorization | Bearer ${token} |
content-type | application/json |
tenant | testtenant |
timestamp | 当前时间戳 |
randoms | 随机数 |
sign | 签名 |
其中签名生成规则如下:tenanttesttenantuserName20190101tenanttesttenanttimestamp当前时间戳randoms随机数
这一长串再使用指定密码,进行HmacSHA256加密,生成的密文即为sign
jmeter方案
因为后期接口要进行性能测试,所以还是选了jmeter进行性能测试,按照接口描述的先排序再加密,在jmeter中,首先想到的就是通过beanshell
外部实现,然后生成对应jar包,在jmeter中引用,然后就有个问题,我java太菜了。。。没办法,折腾python。
jmeter中使用python脚本
在jmeter中使用python脚本,搜了下,找到三种方式:
1. 使用Jython包
下载地址
下载Download Jython 2.7.0 - Standalone Jar
包,放到jmeter/lib/目录下,重启jmeter,就能在sampler
中找到JSR223 Sampler
,里面就有python,但是,是python2.7,所以,对我没啥用
2. jmeter-functions-execute-python-script-1.0.jar,网上有个这个包,可以从函数助手那边进去执行python脚本,试了下失败了,就不介绍了,有兴趣可以百度下咋弄
3. OS Process Sampler,使用这个组件可以执行脚本,后面着重介绍这个,使用了下,很强的组件,理论上,只要你脚本能力强,可以获得各种想要的(终于看到摆脱java的希望了。。)
OS Process Sampler
这个组件可以用来启动一个可执行程序,由于是通过命令行方式启动,所以我们可以用任何语言编写一个测试用的可执行程序(比如Linux的sh脚本)。在该可执行程序中调用我们的接口,并把返回的原始数据输出而交由JMeter做后续解析判断。
位置:/sampler/OS Process Sampler
这个组件有几栏:
1 | command: 可执行文件(windows系统建议放.bat脚本或exe文件,linux系统放shell;干过windows下放了shell直接报非可执行文件。。) |
既然这个组件可以执行bat文件,那我们在bat文件里面再调python文件不就实现了嘛~
加密实现
前面说了,思路就是使用OS Process Sampler
来调用.bat
文件,然后在.bat
文件中再调python文件,实现加密,脚本如下:
jmeter
OS Process Sampler中:
1 | command: oss.bat路径 |
同时,在OS Process Sampler
后追加三个正则表达式提取器,分别获取时间戳,随机数,签名
正则表达式提取器:
1 | 引用名称:sign |
时间戳和随机数相同方式获取
oss.bat
oss.bat:
1 | @echo off |
Windows批处理文件,首先获取传进去的三个参数,再将这三个参数作为入参传给python脚本
JmeterSSTest.py
1 | #!/usr/bin/env python3 |
脚本就不解释了,不难
完整jmeter结构
1 | -- 获取token接口(简单控制器) |
以上,完~