赞
踩
今天咱们介绍XMeter团队带来的新版MQTT-JMeter插件,您能够更为方便地添加MQTT链接、发布、订阅取样器,构造组合的应用场景,例如背景链接、多发少收、少发多收,计算消息转发时延等。利用该插件,咱们为EMQ成功实施了包括百万级并发链接在内的一系列测试场景,这里有详细的测试报告。html
该插件发布在github,欢迎下载、使用并告诉咱们您的意见建议。git
下面介绍一下插件的使用方法。github
安装
从github下载您须要的release版本, 解压mqtt–xmeter-jar-with-dependencies.jar.zip, 将生成的jar文件放到JMeter安装主目录的lib/ext下,重启JMeter,就能够看到插件成功加载。服务器
【注】推荐在最新的JMeter3.1或者3.0版本中安装使用本插件。并发
链接操做取样器
Server name or IP:指向被测MQTT服务器地址。【注】为灵活起见,属性值均可以引用JMeter的系统或自定义变量。
Port number:一般TCP链接的端口时1883, SSL链接则是8883。请参照服务器的具体配置。
Timeout(s):链接超时设置,以秒为单位。
Protocols:客户端与服务器经过SSL加密通道链接时,能够选择单向或者双向认证(Dual)。双向认证时,您还须要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。这些文件能够经过服务器的证书配置转化获得。例如,对于EMQ的安装部署,/etc/cert下就存放了自签证的CA,服务器及客户端证书,参考下面的命令就能够生成插件所需的.jks, .p12文件,secret自行指定便可。
export PATH=$PATH:/bin
keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass -trustcacerts -noprompt
keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass
keytool -import -alias server -keystore emqtt.jks -file cert.pem -storepass
openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:
User authentication:若是服务器配置了用户认证,您须要提供相应的用户名和口令。
ClientId prefix:标识客户端的固定前缀,每一个链接(虚拟用户)再添加一个uuid串,整个做为客户标识。
Keep alive(s):心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持链接活跃。
Connection keep time(s):链接创建后,保持该链接的时长。例如,1800表示1800秒以后链接将被关闭,即便一直发送心跳信号。
Connect attempt max:第一次链接过程当中,尝试重连的最大次数。超过该次数则认为链接失败。
Reconnect attempt max:后继链接过程当中,尝试重连的最大次数。超过该次数则认为链接失败。
发布操做取样器
发布(Pub)取样器的链接相关属性与链接取样器彻底相同,下面只介绍Pub特有的属性。dom
QoS Level:服务质量,取值为0,1,2,分别表明MQTT协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)
Topic name:发布消息所属的话题 (订阅方能够根据话题不一样选择订阅)
Add timestamp in payload:若是勾选,发布的消息体开头会附带当前时间戳,利用它能够在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。
Message type:目前支持三种消息类
String: 普通字符串 (如上面截图所示)
Hex String: 以16进制数值表示的串,好比字符串Hello, 能够表示为48656C6C6F (其中,48在ascii表中对应字母H,依次类推)。一般16进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。
Random string with fixed length: 按指定长度生成随机的串做为消息体。
订阅操做取样器
QoS Level:服务质量,含义与发布操做取样器相同。
Topic name:订阅消息所属的话题。
Payload includes timestamp:若是勾选,会从消息体开头处解析发送时间戳,用于计算消息的接收延时。
Debug response:若是勾选,消息内容会打印在JMeter的响应结果中,用于调试目的。正式运行测试建议不勾选。
混合负载的测试场景
运用以上3种MQTT取样器,结合JMeter灵活的测试控制,您能够制定各类类型的测试场景。下面咱们举一个例子,构造一个混合负载的场景。性能
咱们定义3个虚拟用户组,分别进行链接,发布,订阅操做。测试
链接者:虚拟用户数=10, 发起10个到服务器的背景链接,每2秒钟发一次心跳请求,15秒后断连。
发布者:虚拟用户数=5,每隔一秒发送一条32字节的随机串,带时间戳,循环10次结束。
订阅者:虚拟用户数=2,接收相应话题上的消息,每隔一秒输出采样间隔里接收到的消息统计,循环10次结束。
在JMeter中运行该场景,15秒钟左右运行结束。能够在测试结果树中看到每一个操做的详细信息。表格视图的”Sample Time”列出了操做花费的时间(毫秒)。因为此次测试在本地,并发用户数不多,因此链接、消息发送、接收时延都很短。您能够指向实际的MQTT服务器,模拟更大的并发用户数。ui
结果树加密
结果列表
在被测的EMQ服务器本身的度量仪表盘,咱们能够看到链接、消息发送,接收等统计信息。
【注】服务器的”received”, “sent”分别对应JMeter测试中的“发送者”和“订阅者”。
利用XMeter实施云上的高负载压力测试
JMeter支持的负载有限,并且压力机须要人工管理,为方便用户实施大规模的并发测试,XMeter性能测试云服务将JMeter支持的运行场景迁移到云端,按需“弹性”地分配测试资源,发起到目标机器的压力测试,衡量被测系统的性能表现。
咱们只需上传调试好的JMeter脚本,在XMeter指定并发数和运行时间,就能够在网页上查看各项性能指标。
本文转自: 清明-心若淡定 https://www.cnblogs.com/saryli/p/6928051.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。