简介 JMeter作为Apache的开源性能测试工具允许使用者对其进行二次开发扩展,比如用户可以扩展自定义的函数(函数是可以在测试脚本中插入到任何Sampler或者测试元素中,可以封装一些
简介
JMeter作为Apache的开源性能测试工具允许使用者对其进行二次开发扩展,比如用户可以扩展自定义的函数(函数是可以在测试脚本中插入到任何Sampler或者测试元素中,可以封装一些功能,比如对用户名加解密函数或者得到一个自定义功能等)
首先本文将以Java扩展一个返回两个数值之和函数的例子来简单演示整个过程。总体来说,二次开发扩展JMeter的函数可以分成下面几个步骤:
- 新建Maven项目,引入扩展JMeter Function所需的依赖包
- 编写实现自定义函数的代码,并对其编译打包
- 将编译好的包拷贝至JMeter的扩展目录,编辑测试脚本,调用自定义函数
- 使用并查看自定义的函数是否正确
参考
参考JMeter官方API的AbstractFunction,它将指导我们创建自己的函数 &__7DDemoPlus函数,以便我们了解它是怎么生成的。
创建Java Maven项目
新建一个Maven项目,打开pom.xml,加入ApacheJMeter_functions依赖库
1. <dependencies>2. <dependency>
3. <groupId>org.apache.jmeter</groupId>
4. <artifactId>ApacheJMeter_functions</artifactId>
5. <version>4.0</version>
6. </dependency>
7. </dependencies>
扩展自定义函数
要实现二次扩展函数,主要有两点:
- 定义function的类的package声明必须包含".functions"
- 需要继承实现AbstractFunction四个方法
定义包名
继承并实现AbstractFunction四个抽象方法:
- execute方法用于接收Jmeter传入的参数值并执行工作
- setParameters方法用于传递执行过程中的实际参数值
- getReferenceKey方法用于定义函数名字
- getArgumentDesc方法用于描述函数参数
2.
3. //定义一个obect对象去接受传入变量值
4. private Object[] values;
5. //存储第一个和第二个参数
6. private CompoundVariable first,second;
7.
8. /**
9. * 执行方法
10. * @param sampleResult
11. * @param sampler
12. * @return
13. * @throws InvalidVariableException
14. */
15. public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
16. //接住第一个参数值
17. first = (CompoundVariable) values[0];
18. //接住第二个参数值
19. second = (CompoundVariable) values[1];
20.
21. //计算两个参数的和
22. int count = new Integer(first.execute().trim()) + new Integer(second.execute().trim());
23. System.out.println("两个参数的和是:"+count);
24.
25. //返回一个String类型的和
26. return String.valueOf(count);
27. }
28.
29. /**
30. * 设置参数,接受用户传递的参数
31. * @param collection
32. * @throws InvalidVariableException
33. */
34. public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
35. //检查参数是否合法
36. checkParameterCount(collection,2);
37. //转换成数组
38. values = collection.toArray();
39. }
40.
41. /**
42. * 函数名称
43. * @return
44. */
45. public String getReferenceKey() {
46. return "__7DDemoPlus";
47. }
48.
49. /**
50. * 函数描述,获取参数描述
51. * @return
52. */
53. public List<String> getArgumentDesc() {
54. List desc = new ArrayList();
55. //界面上显示两行参数描述
56. desc.add("第一个数字");
57. desc.add("第二个数字");
58.
59. return desc;
60. }
61. }
在控制台使用 mvn cleanpackage打包
拷贝自定义函数包文件到jmeter/lib/ext目录下
重启Jmeter后打开函数助手,并生成并复制自定义函数表达式
并使用BeanShell调用自定义函数,并检查结果
我们可以看到控制台已经正确输出函数结果了
至此,我们的Jmeter扩展函数已经完成了,同学们是不是so easy。。。