共计 2655 个字符,预计需要花费 7 分钟才能阅读完成。
JMeter 是 Apache 开发的一款小巧易用的开源性能测试工具,由 Java 语言开发。JMeter 不仅免费开源而且功能强大、易于扩展,如果有一定 Java 开发基础的话还可以在 JMeter 上做扩展开发新的插件等,几乎能满足各种性能测试需求。JMeter 中使用 Sampler 元件(取样器)来模拟各种的类型的请求数据格式,类似于 LR 中的协议(比 LR 中的协议概念更广),如:http、ftp、soap、tcp 等等。JMeter 中支持的 JMS Point-to Point、JMS Publisher 和 JMS Subscriber 分别用于发送 JMS 的 PTP 消息和 PUB/SUB 消息,因此可以选择使用 JMeter 来测试 JMS。
MOM(消息中间件)作为消息数据交换的平台,也是影响应用执行效率的潜在环节。在 Java 程序中,是通过 JMS 与 MOM 进行交互的。作为 Java 实现的性能测试工具 JMeter 也能使用 JMS 对应用的消息交换和相关的数据处理能力进行测试。在整个测试过程中,JMeter 测试的重点是消息的产生者和消费者的能力,而不是 MOM 本身。JMeter 虽然能使用 JMS 对 MOM 进行测试,但是它本身并没有提供 JMS 需要使用的包(实现类)。因此在使用 JMeter 测试 JMS 时需要使用到具体的 MOM 的相关 jar 包。以下结合流行的开源消息中间件 ActiveMQ 来演示如何使用 JMeter 来实现对 JMS 的测试。
1、安装并启动 ActiveMQ 服务
2、测试前的准备
使用 JMeter 进行压力测试时,所有的 JMeter 依赖的包需要复制到 %JMETER_HOME%/lib 目录下。对于 ActiveMQ 来说,就是复制 %ACTIVEMQ_HOME%/lib 目录下 jar 包,可根据实际情况来考虑是否复制。JMeter 在测试时使用了 JNDI,为了提供 JNDI 提供者的信息,需要提供 jndi.properties。同时需要将 jndi.properties 放到 JMeter 的 %JMETER_HOME%/lib 和 %JMETER_HOME%/bin 目录中,还需要将 jndi.properties 与 %JMETER_HOME%/bin 目录下的 ApacheJMeter.jar 打包在一起。对于 ActiveMQ,jndi.properties 的演示内容如下:
1 #java.naming.factory.initial = org.activemq.jndi.ActiveMQInitialContextFactory
2 java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
3 java.naming.provider.url = tcp://localhost:61616
4
5 #指定 connectionFactory 的 jndi 名字,多个名字之间可以逗号分隔。6 #以下为例:7 #对于 topic,使用 (TopicConnectionFactory)context.lookup("connectionFactry")
8 #对于 queue,(QueueConnectionFactory)context.lookup("connectionFactory")
9 connectionFactoryNames = connectionFactory
10
11 #注册 queue,格式:12 #queue.[jndiName] = [physicalName]
13 #使用时:(Queue)context.lookup("jndiName"),此处是 MyQueue
14 queue.MyQueue = example.MyQueue
15
16 #注册 topic,格式:17 # topic.[jndiName] = [physicalName]
18 #使用时:(Topic)context.lookup("jndiName"),此处是 MyTopic
19 topic.MyTopic = example.MyTopic
3、测试 JMS 的 PTP 模型
对于点对点模型,JMeter 只提供了一种 Sampler:JMS Point-to-Point。如图所示建立测试计划:
QueueConnection Factory:连接工厂,输入 jndi 配置文件中配置的 connectionFactory
JNDI name Request queue:请求队列名,输入 jndi 配置文件中配置的 MyQueue
JNDI name Receive queue:接收队列名,输入 jndi 配置文件中配置的 MyQueue
Content:消息内容,比如输入:this is a test
Initial Context Factory:输入 org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:提供者 URL,即安装的 ActiveMQ 的服务地址 tcp://yourIP:61616
运行调试时通过监视器元件查看是否发送成功,如下说明发送成功:
4、测试 JMS 的 PUB/SUB 模型
在实际测试时,发布者和订阅者并不是需要同时(异步)出现的。比如有时我们可能想测试单位时间内消息发布者的消息产生量,此时就不需要消息发布者,只需要订阅者就可以了。本例为了说明这两种 Sampler 的使用,建立两个 JMeter 实例分别用于发送和接收消息。
1)首先新建如下订阅者的测试计划:
勾选使用 jndi 配置文件,并分别输入 jndi 中配置的连接工厂和目的地名称,如上图所示,点击运行下的启动,使用消息消费者处于接收状态。
2)然后新建如下发布者的测试计划:
勾选使用 jndi 配置文件,并分别输入 jndi 中配置的连接工厂和目的地名称以及要发送的消息内容,此处为:this is a pubish test,如上图所示,点击运行下的启动,以发送消息,查看监视器元件检查消息是否发送成功,如下说明发送成功:
检查消息消费者是否接收到消息,如下说明接收成功:
上面已完成了 JMeter 对 JMS 的基本测试演示,实际测试时可能需要根据实际的场景选择合适的取样器,添加其他测试元件来建立和增强测试计划,根据真实测试的中间件拷贝依赖包以及配置 jndi 以完成 JMS 应用的性能测试。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/139820.htm