性能工具之Jmeter扩展函数及压测ActiveMQ实践

Posted 高楼(Zee)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能工具之Jmeter扩展函数及压测ActiveMQ实践相关的知识,希望对你有一定的参考价值。

简介

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四个方法

定义包名

\'性能工具之Jmeter扩展函数及压测ActiveMQ实践_Jmeter扩展函数\'

继承并实现AbstractFunction四个抽象方法:

  • execute方法用于接收Jmeter传入的参数值并执行工作
  • setParameters方法用于传递执行过程中的实际参数值
  • getReferenceKey方法用于定义函数名字
  • getArgumentDesc方法用于描述函数参数
1. public class Plus extends AbstractFunction {

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扩展函数及压测ActiveMQ实践_ActiveMQ_02\'

拷贝自定义函数包文件到jmeter/lib/ext目录下

\'性能工具之Jmeter扩展函数及压测ActiveMQ实践_ActiveMQ_03\'

重启Jmeter后打开函数助手,并生成并复制自定义函数表达式

\'性能工具之Jmeter扩展函数及压测ActiveMQ实践_Jmeter扩展函数_04\'

并使用BeanShell调用自定义函数,并检查结果

\'性能工具之Jmeter扩展函数及压测ActiveMQ实践_Jmeter扩展函数_05\'

我们可以看到控制台已经正确输出函数结果了

至此,我们的Jmeter扩展函数已经完成了,同学们是不是so easy。。。

以上是关于性能工具之Jmeter扩展函数及压测ActiveMQ实践的主要内容,如果未能解决你的问题,请参考以下文章

压测工具笔记(二)之JMeter

性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控

性能工具之Jmeter压测Hprose RPC服务

性能工具之Jmeter压测WebSocket接口

性能工具之 JMeter TPS限制与动态调节

性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控