MQTT压力测试之Tsung的使用

现在做物联网,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的使用
标签:         

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*