业务场景
最近在做性能测试时,遇到一系列接口需要做签名、验签处理。这些接口属于接入系统对外接入数据接口,是提供给外部系统给内部业务系统传递数据的,出于安全的考虑,对入参进行了签名,将签名参数和入参一并传入,由业务系统对签名参数进行验证。这种情况和普通接口需要传入token不一样,token可以由登陆接口获取,而签名只能使用函数方法得到。所以使用jmeter的前置处理程序,引入jar包签名然后再进行http请求。
实现方法
jar包引入
jmeter 引入jar包有2种方法,推荐使用第二种。
- ui界面引入
- jar包放入指定目录下
将jar包放到jmeter安装目录下的lib/ext
目录下即可,如果不生效则修改jmeter.properties配置文件中的plugin_dependency_paths参数,参数值为jar包所在目录
plugin_dependency_paths=../lib;../lib/ext;
新增beanshell前置处理
beanshell 前置处理中可以写我们的处理逻辑,其中的处理会在接口请求前执行。
业务方法处理
beanshell里面就是使用java代码写业务操作,图中内容比较简单。
首先import引入包,这里引入的fastjson和业务包都输入第三方jar。
使用vars.put()
方法将入参作为变量添加到jmeter中,如果添加的变量类型不是string,则需要使用vars.putObject()
方法。
接口入参需要时间戳,且在3分钟内。代码里获取了当前时间戳并保存变量。
新增一个jsonObject对象,从jmeter中取得变量并给jsonObject对象赋值。
将jsonObject对象转为字符串后调用业务jar中的签名方法对入参进行签名。
将签名结果保存。