天天看点

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

JMeter作为Apache的开源性能测试工具允许使用者对其进行二次开发扩展,比如用户可以扩展自定义的函数(函数是可以在测试脚本中插入到任何Sampler或者测试元素中,可以封装一些功能,比如对用户名加解密函数或者得到一个自定义功能等)

首先本文将以Java扩展一个返回两个数值之和函数的例子来简单演示整个过程。总体来说,二次开发扩展JMeter的函数可以分成下面几个步骤:

新建Maven项目,引入扩展JMeter Function所需的依赖包

编写实现自定义函数的代码,并对其编译打包

将编译好的包拷贝至JMeter的扩展目录,编辑测试脚本,调用自定义函数

使用并查看自定义的函数是否正确

参考JMeter官方API的AbstractFunction,它将指导我们创建自己的函数 ​<code>​&amp;__7DDemoPlus​</code>​函数,以便我们了解它是怎么生成的。

新建一个Maven项目,打开pom.xml,加入ApacheJMeter_functions依赖库

要实现二次扩展函数,主要有两点:

定义function的类的package声明必须包含".functions"

需要继承实现AbstractFunction四个方法

定义包名

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

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

<code>execute</code>方法用于接收Jmeter传入的参数值并执行工作

<code>setParameters</code>方法用于传递执行过程中的实际参数值

<code>getReferenceKey</code>方法用于定义函数名字

<code>getArgumentDesc</code>方法用于描述函数参数

在控制台使用 ​<code>​mvn cleanpackage​</code>​打包

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

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

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

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

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

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

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

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

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

目前能实现压测ActiveMQ有以下方法:

JMS Sampler

自定义Java请求

JSR223 Sampler

BeanShell Sampler

扩展Function(今天介绍的)

接下我们在以上示例的基础实践压测ActiveMQ消息服务

想要了解ActiveMQ是啥,首先得知道JMS,所以先对MOM和JMS做一个介绍

企业消息系统,即面向消息的中间件,提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的MOM通信。
Java Message Service:是Java平台上有关面向消息中间件的技术规范。 有一个比较通俗的解释,JMS类似于JDBC,JDBC是可以用来访问许多不同关系数据库的API,而JMS则提供同样与厂商无关的访问的API,以访问消息收发服务。比如IBM 的MQSeries、BEA的Weblogic JMS service;而ActiveMQ也是其中的一种,所以:activeMQ就是支持jms规范的一个server;它对于JDBC和数据库的关系来说,它就是个mysql(MQSeries就是DB2,Weblogic JMS service就是Oracle)。 在没有JDBC之前,程序员需要访问数据库的时候,需要根据不同的数据库进行不同的编码;在有了JDBC之后,开发过程中,对于不同数据库的访问方法被规范化,只需要根据不同的数据库使用不同的数据库驱动,就可以用通用的方法访问数据库。 在没有JMS之前,程序员开发过程中,如果需要和MOM进行消息发送或接受的时候,需要根据不同的MOM进行不同的编码;相同的,有了JMS之后,代码被规范使用。
ActiveMQ是目前最流行的消息中间件之一,是一种在分布式系统中应用程序借以传递消息的媒介,常见的消息中间有ActiveMQ,RabbitMQ,Kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和JSE1.4规范的JMS Provider实现

特点:

支持多种语言编写客户端

对spring的支持,很容易和spring整合

支持多种传送协议:TCP,SSL,NIO,UDP等

支持AJAX

消息形式:

点对点(Queue)

一对多(Topic)

加入依赖库

实现消费者代码类,这里我们使用Queue的消息形式

导入ApacheJMeter_functions依赖库及ActiveMQ相关依赖库

实现生产者代码类

编写一个RunMian测试类

运行RunMian发送消息,查看消费端接受情况

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

我们看到消费端已经收到消息,测试成功

接下来扩展实现JmeterActiveMQFunction

在控制台使用 ​<code>​mvn cleanpackage​</code>​打包测试类

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

使用 ​<code>​mvn dependency:copy-dependencies-DoutputDirectory=lib​</code>​复制所依赖的jar包都会到项目下的lib目录下

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

复制测试代码Jar包到jmeter\lib\ext目录下,复制依赖包到jmeter\lib目录下

重启Jmeter后打开函数助手,并生成并复制自定义函数表达式,使用 ​<code>​__Random​</code>​函数对消息内容简单参数化

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

下面我们将进行性能压测,设置线程组,设置5个并发线程。定义并使用BeanShell调用自定义函数

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

我们可以看到消费端已经接收到消息

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