Jmeter BeanShell
1、背景
大家好,最近小编遇到一个接口性能测试需求,对接口传输idno、mobile的32位小写md5值,并对两者的md5值进行加盐(相当于二次加密,所谓“加盐”实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联),将三个参数共同传给接口,要求并发量保持在20进行稳定性测试,并测试接口的返回进行正确性验证。现在我们来分析一下需求:
对接口传输不同的idno、mobile、salt
idno、mobile加32位小写md5
idno_md5、mobile_md5加盐
并发稳定在20
验证稳定性
验证接口返回数据内容包含“yes”,响应码200
首先,对接口传输不同的idno、mobile:这一步很简单,我们可以将不同的idno、mobile放入csv文件中,在Jmeter中使用”CSV数据文件设置”读取id、mobile,然后在Options-Function Helper中找到__MD5 ,即可实现MD5加密(注意,在Jmeter4.0后__MD5函数已经替换为__digest),使用方法:${__digest(MD5,Errare humanum est,,,)};
△Jmeter中使用MD5加密函数
或者懂VBA的朋友,直接用Excel打开csv文件,将写好的参数进行MD5批量加密即可=LOWER(Md5_String_Calc(**))
其次,对idno、mobile的md5值进行加盐:到这一步,通过Jmeter自带的函数或者VBA都无法满足我们的需求了,我们自然想到——把加盐算法写入代码,通过代码实现;我们又想到——Jmeter不就是纯Java写出来的,自然能支持Java吧;搜狗搜索一下”Jmeter java”,发现一个叫Jmeter Beanshell的东西。
2、Jmeter Beanshell
Beanshell是Jmeter中最复杂的内置组件之一,它的原理是一个嵌入式的Java源码解释器,不仅能够执行java应用程序,同时也使用Jmeter本身的API。 使用beanshell,只需在Thread Group-右键ADD-Pre Processors-BeanShell PreProcessors,如下图,其中’Script’窗口便是写入核心脚本的地方。
△Jmeter BeanShell PreProcessors窗口
3、Beanshell的使用场景
3.1、内置变量操作
Beanshell可以通过Jmeter本身的已内置的对象vars对变量进行get与put:
vars.get("id"); //获取jmeter内的id变量 vars.put("key", "value"); //将value值存储至key中,回传给jmeter,此时jmeter的其它组件如User Defined Variables便可以对其进行使用 |
3.2、内置属性操作
Beanshell可以通过props对属性进行简单的存取:
props.get("PROPERTIES"); //获取名为PROPERTIES的属性名 props.put("PROPS","value"); //将value放入PROPS属性中 |
3.3、定义函数
Beanshell支持使用Java对函数进行定义,用于处理业务中的特定逻辑,以实现对内置变量的灵活存取,例如,在Test Plan中添加用户自定义变量(User Defined Variables)test1
△添加用户自定义变量User Defined Variables
在Beanshell Script中写入一个put相关的脚本
△脚本写入
此时,对于Jmeter来说,新增的”test2”变量,被赋予了”value2”的值;而已经在User Defined Variables中定义好的”test1”变量,被重新赋予了”value3”的值。
3.4、引入Jar包
到此为止,我们了解到可以通过Jmeter Beanshell将md5加密方法写入jmeter beanshell中,通过CSV Data Set Config读取不同的idno,mobile实现对测试2参数加密,但加盐方法仍没有实现,此时,最简单的方法是将加盐的方法打成jar包,直接引入,并在beanshell中进行调用。
引入方法:
Test Plan→Add directory or jar to classpath→Browse→添加需要引入的jar包即可
△jar包引入步骤
此时在beanshell中直接调用import salt.jar,即可使用其中的加盐方法。到此为止,通过使用Jmeter Beanshell,我们完全可以快速实现本次的性能测试需求了。
4、结束语
Jmeter内置Beanshell强有力地支持了大部分的对测试变量灵活配置或设置的需求,它支持Java语法,并使用松散类型、命令、方法表等功能拓展其支持范围。如果Jmeter本身的嵌入式测试组件已无法支持我们的测试用例,那么Beanshell可以成为实现测试目的最佳选择。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。