使用场景:当用jmeter发请求的时候,请求头里面需要添加sign签名,sign签名的生成规则一般都是通过请求参数拼接加密得到的,这时候我们就需要自己写个sign签名的方法,导成jar包在jmeter中去引用。
(在网上看到说使用jmeter自带的函数助手也能实现该功能,但是我试了下好像不行,不知道是不是哪里弄错了。。)
一、准备好jar包
(前提是自己电脑上已经装好Java环境了哦~)
1、在idea中新建一个Maven项目,就写一个自己测试的类吧
刚开始的目录结构如下所示
Hello类是我写的一个用来生成sign签名的类,Test类是为了测试Hello类中的方法是否可以被调用调通。
2、将写好的类导出jar包
在idea中,点击 File -> Project Structure
在project structure中选择 Artifacts-> +号 -> JAR -> From modules with dependencies...
然后选择程序执行的入口(这边我选择的时Hello类,前提是Hello类中要有main方法。试了下如果选择的是别的有main方法的类导出的jar包执行时会报错,不知道为什么?)
我的配置如下的第二张和第三张图片所示:
点击apply->ok
点击 Build -> Build Artifacts
点击...jar -> Build
至此,jar包就打包好了,然后cmd进入到jar包所在目录验证jar包是否能够正确运行。
java -jar test-code.jar 下图中看到正常执行,说明导出的jar包是正确的
二、jmeter中导入jar包并使用
因为我的接口请求头需要用到sign签名,所以我这边使用的是Beanshell预处理程序
(在发送请求前通过这个预处理程序生成sign签名等其他的需要的参数,个人理解是预处理程序就相当于Java写接口测试的前置操作)
1、将第一部分生成的jar包导入到jmeter目录\apache-jmeter-5.0\lib\ext下
2、打开jmeter,添加一个线程组,在线程组下添加一个BeanShell PreProcessor和一个http取样器
3、在beanshell PreProcessor中导入我们的jar包,调用里面的生成sign方法,把结果保存在jmeter变量中,下面两个方法是beanshell中我们最常用到的:
- vars.get(String paramStr):获得变量值
- vars.put(String key,String value):,将数据存到jmeter变量中
上图中的3个变量,在http信息头管理中有调用,如下:
请求头中调用结果如下:
说明调用成功~
****** 这个例子是使用Beanshell PreProcessor的,使用Beanshell Sampler是一样的结果,都是可以成功的。(感兴趣自己可以试一下)
三、什么是Beanshell?
- BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
- BeanShell是一种松散类型的脚本语言(这点和JS类似);
- BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。
- BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。
更多功能可以去官网查看,官网:http://www.BeanShell.org/