参考:https://blog.csdn.net/fanxiyanhong/article/details/51479532

https://www.cnblogs.com/Owen-ET/p/8986348.html#no0

MOM 作为消息数据交换的平台,也是影响应用执行效率的潜在环节。在 Java 程序中,是通过 JMS 与 MOM 进行交互的。作为 Java 实现的压力测试工具,JMeter 也能使用 JMS对应用的消息交换和相关的数据处理能力进行测试。这一点应该不难理解,因为在整个测试过程中,JMeter 测试的重点应该是消息的产生者和消费者的本身能力,而不是 MOM本身。

JMS提供了两种消息通信模型:

Ø 点到点(P2P)模型

Ø 发布/订阅(Pub/Sub)模型

 

在ClientA、C、D之间的消息是点对点模型,使用这种模型,客户端发送消息到队列目的地(Queue),从这个队列里面只有一个消息接收者可以收到那个消息,其他访问同一目的地的接收者不会接收到该消息。如ClientC接收Queue中的Msg1消息,ClientD接收Queue中的Msg2消息。

在ClientB、E、F之间的消息是发布/订阅模型。使用这种广播模型,一个客户端发送消息给主题目的地(Topic),任何数量的消费订阅者可以从这个主题目的地来接收它们。如:ClientE和ClientF都接收这个Msg3这条消息

使用Jmeter测试ActiveMQJMS消息

以下MOM我们使用ActiveMQ ,分别描述发布/订阅和点对点这两种消息交换方式是如何使用 JMeter 进行测试。

一、JMeter JMS PTP测试计划

1.测试前准备

• ActiveMQ官方下载地址: http://activemq.apache.org/components/classic/download/

 

• JMeter 虽然能使用 JMS 对 MOM 进行测试,但是它本身并没有提供JMS需要使用的包。下载解压Activemq 将 activemq-all-5.15.9.jar复制至apache-jmeter-4.0\lib目录下

 

2.测试步骤

•  启动ActiveMQ:打开dos窗口,进入ActiveMQ解压目录下的bin目录,输入命令:activemq.bat start
Tips:在启动ActiveMQ前,修改conf目录下的activemq.xml中的配置

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=65535&amp;wireFormat.maxFrameSize=104857600"/>

上面标记的这个数字为最大连接数,自己设置,如果太小的话会导致发送的请求都被拒绝

• 打开浏览器验证服务启动成功,输入ActiveMQ的管理控制台地址:http://localhost:8161/admin/index.jsp

(填写用户名密码,用户名密码信息保存在conf/jetty-realm.properties文件中)

如果登录后显示下图,证明服务启动成功!

•  启动Jmeter
•  添加一个线程组
•  添加Samper:选择JMS POINT TO POINT
•  配置JMS POINT TO POINT:

 设置JMS Point-to-Point的值:

属性 描述
JMS Resources
QueueuConnectionFactory ConnectionFactory 这是默认JNDI条目内ActiveMQ连接工厂。
JNDI Name Request Queue Q.REQ JMeter JNDI名称使连接工厂和队列之间的连接。
JNDI Name Receive Queue Q.REQ JMeter JNDI名称使连接工厂和队列之间的连接。我们都使用相同的响应队列。
Message properties
Communication Style

Request Response

(注:JMeter4.0中为:选择request_reply)

这意味着至少需要服务运行JMeter外,将响应请求。此服务必须侦听请求队列,并发送消息引用的队列由message.getJMSReplyTo()
Use Request message ID checked 可以留下JMeter的使用消息ID请求传入的消息并回收之间的相关性(押金)。
Use Response message ID checked 可以留下使用JMeter的消息标识符响应(恢复)传入的消息和恢复之间的相关性。
Time(milliseconds) 2000(非必填) 使用此超时的消息时,如果没有收到JMeter的恢复时间(这里2秒),那么该项目将被标记错误。
Content test 该消息是测试内容。
JMS Properties   对Active MQ而言并不需要这项
JNDI Properties
InitialContextFactory

org.apache.activemq.jndi

.ActiveMQInitialContextFactory

Active MQ标准InitialContextFactory
queue.Q.REQ example.A 之间的对应关系的队列JNDI名称(Q.REQ)的队列中的ActiveMQ(example.A)真实姓名。
queue.Q.RPL example.B 之间的对应关系的队列JNDI名称(Q.RPL)的队列中的ActiveMQ(example.B)真实姓名。
Provider URL tcp://localhost:61616 ActiveMQ地址和端口。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 • 点击运行,查看结果

• 最后返回ActiveMQ管理控制台:

 

 二、JMeter JMS PUB/SUB测试计划

1.添加发布:

•  启动Jmeter
•  添加一个线程组
• 添加采样JMS发布到发布元素:选择 JMS Publisher
•  配置 JMS Publisher:

设置JMS Publisher的值:

属性 描述
If the JMS provider uses the jndi.properties file check the box 使用jndi.properties。请注意该文件必须在classpath - 例如通过更新user.classpath JMeter的属性。如果这个选项没有被选中,JMeter使用“JNDI初始上下文工厂”和“提供URL”字段创建连接。
InitialContextFactory

org.apache.activemq.jndi.ActiveMQInitial

ContextFactory

Name of the context factory.
Provider URL tcp://localhost:61616 JMS提供者的URL。
Connection Factory ConnectionFactory 连接工厂。
Destination dynamicTopics/MyStaticTopic1 消息主题的名称。对于ActiveMQ的动态主题(动态创建主题)。
Number of samples to aggregate 2 聚集的样品数量。
Message source Message
在哪里获得消息:
从文件:表示引用的文件,将所有样品读取和重用
随机文件从指定的文件夹如下:指从指定的文件夹下面,将选择一个随机文件,这个文件夹必须包含两种副档名为.dat字节的消息,或带扩展名的文件.txt或.obj对象或文本消息。
文本区域使用文本或对象消息:消息
Message type Text 文字,地图,对象消息或字节消息

 

2.添加订阅服务:

•  增加采样JMS订阅服务器上认购元素:选择 JMS Subscriber
•  配置 JMS Subscriber

 

设置JMS Subscriber的值:

属性 描述
If the JMS provider uses the jndi.properties file check the box 使用jndi.properties。请注意该文件必须在classpath - 例如通过更新user.classpath JMeter的属性。如果这个选项没有被选中,JMeter使用“JNDI初始上下文工厂”和“提供URL”字段创建连接。
InitialContextFactory

org.apache.activemq.jndi.ActiveMQInitial

ContextFactory

Name of the context factory.
Provider URL tcp://localhost:61616 JMS提供者的URL。
Connection Factory ConnectionFactory 连接工厂。
Destination dynamicTopics/MyStaticTopic1 消息主题的名称。对于ActiveMQ的动态主题(动态创建主题)。
Read response Check Box 采样器读取响应。如果没有,只有响应的长度将被返回。
Timeout 2000 指定的超时时间,以毫秒为单位。 0=null。这是整体的总超时,而不是每个样品。

 

3.添加监听器并运行

JMS Publisher结果树:

 

 

JMS Subscriber结果树:

发布的值响应到了订阅服务中:

• 最后返回ActiveMQ管理控制台:

主题:

订阅: