现在做物联网,MQTT协议被广泛应用。因此如何对MQTT Broker服务器进行压力测试也是测试人员、开发人员面临的问题。笔者经过多方选择,选择了Tsung这款工具。

简介

Tsung 是一个压力测试工具,可以测试包括HTTP, WebDAV, PostgreSQL, MySQL, LDAP, and XMPP/Jabber等服务器。针对 HTTP 测试,Tsung 支持

HTTP 1.0/1.1 ,包含一个代理模式的会话记录、支持 GET、POST 和 PUT 以及 DELETE 方法,支持 Cookie 和基本的WWW 认证,同时还支持 SSL。

 

tsung的工作原理

(1) Tsung的每一个虚拟用户就是一个erlang的轻量进程。这点和loadrunner有很大的区别。

(2) 虚拟用户完成session后就消失。

(3) 大量的虚拟用户(erlang轻量进程)建立在erlangVM上。

(4) 一台测试机可以启多个erlangVM,目前按照1个cpu启动1个erlangVM。

 

网上已经有很多怎么安装Tsung的文章了,这里我就不过多去赘述了,可以参考文:http://www.cnblogs.com/yangxia-test/p/4330571.html,目前Tsung工具的最新版本为1.6.0,需要注意的是Tsung1.5.1版本及以上才支持MQTT,并且只有Tsung1.6.0开始,才支持MQTT的username和password的认证。下面我主要讲利用它对MQTT做压力测试工具。

Tsung测试工具的基本测试命令为 Tsung -f  ~/.tsung/mqtt.xml -l <日志保存路径> start

mqtt.xml具体如下(在/usr/share/doc/tsung/examples路径下可查找到):

<?xml version="1.0"?>

<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">

<tsung loglevel="debug" version="1.0">

<!--下面为客户端配置,可以有配有多个客户端,其中ubuntu要保证通过ssh ubuntu能远程登陆上ubuntu这台机器,这里建议通过密钥对来进行远程客户端的登陆。下面类似于loadrunner的load generator,用以模拟用户。具体的详细配置请参见官网文档http://tsung.erlang-projects.org/user_manual/conf-client-server.html-->

<clients>

<client host="ubuntu" maxusers="50"></client>

</clients>

<!--这里为配置MQTT broker的IP地址,端口,协议默认为tcp>

<servers>

<server host="127.0.0.1" port="5672" type="tcp" />

</servers>

<!--下面为加载用户信息-->

<load>

<!--session为mqtt_sbuscriber的用户,10秒后启动-->

<user session="mqtt_subscriber" start_time="10" unit="second"></user>

<!--用户组1,下面表示在前3秒内,每隔1秒新增一个用户,用户数最大为5-- >

<arrivalphase phase="1" duration="3" unit="second">

<users maxnumber="5" arrivalrate="1" unit="second"/>

</arrivalphase>

<!--用户组1,下面表示在前2分钟内,每隔10秒新增一个用户,用户数最大为10-- >

<arrivalphase phase="2" duration="2" unit="minute">

<users maxnumber="10" arrivalrate="10" unit="second"/>

</arrivalphase>

</load>

<sessions>

<!--probability为100,上面非指定session所新增的用户,都用于该session-->

<session name="mqtt_publisher" probability="100" type="ts_mqtt">

<request>

<!--重点来了,这个通常我们的MQTT都会加入密码认证,否则不能建立连接通信。这里需要仔细查看官方文档,发现1.6.0已经开始支持MQTT的user和password。所以我们只需要在下面加入MQTT认证的username和password就可以与MQTT服务器器连接,并推送和订阅消息了-->

<mqtt type="connect" clean_start="true" keepalive="10" will_topic="will_topic" will_qos="0" will_msg="will_msg" will_retain="false" username="user" password="yourpassword"></mqtt>

</request>

<!--下面外面为一层for循环,执行10次,下面为一个消息推送,主题为test_topic,qos为1(至少保证收到一次),中间为具体的消息 -->

 

<for from="1" to="10" incr="1" var="loops">

<request subst="true">

<mqtt type="publish" topic="test_topic" qos="1" retained="true">test_message</mqtt>

</request>

</for>

<!--断开MQTT消息-->

<request>

<mqtt type="disconnect"></mqtt>

</request>

</session>

<!--下面为MQTT消息的订阅-->

<session name="mqtt_subscriber" probability="0" type="ts_mqtt">

<request>

<mqtt type="connect" clean_start="true" keepalive="10"  username="user" password="yourpassword"></mqtt>

</request>

<!--订阅topic为test_topic的MQTT消息-->

<request subst="true">

<mqtt type="subscribe" topic="test_topic" qos="1"></mqtt>

</request>

<!--等待订阅消息多少时间,这里为60秒-->

<request>

<!-- wait for 60s -->

<mqtt type="waitForMessages" timeout="60"></mqtt>

</request>

<!--取消订阅消息test_topic-->

<request subst="true">

<mqtt type="unsubscribe" topic="test_topic"></mqtt>

</request>

<!--断开连接-->

<request>

<mqtt type="disconnect"></mqtt>

</request>

</session>

</sessions>

</tsung>

根据上面的mqtt.xml配置说明配置好后,就可以对MQTT Broker服务器施加压力了。

最后找到日志存放路径,然后利用~/tsung/bin/tsung_stats.pl 就可以生成测试报表了。后面分析数据我就不讲了,如果要了解这方面的知识,请关注我站内的其它文章。

MQTT压力测试之Tsung的使用
标签: