Tsung压测MQTT

Tsung

最近用Tsung做了大并发的性能测试,记录一下,这里仅介绍xml部分;Tsung用户手册

一个开源的多协议分布式负载测试工具,使用erlang语言开发的。它能用来压力测试HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 Jabber/XMPP的服务器。它可以分布在多个客户机,并能够模拟成千上万的虚拟用户数并发。

clients
<clients>
		<client weight="1" host="moc-test" cpu="4" maxusers="100000"></client>
		<client weight="2" host="zhjs-test" cpu="1" maxusers="100000"></client>
    </clients>
  • weight:权重
  • host:测试用设备IP,因为我在client配置了,所以填的名称
  • CPU:使用的CPU
  • maxusers:最大用户数
servers
<servers>
	<server host="xxxxx" port="1883" type="ssl" />
</servers>
  • host:被压服务器
  • port:端口
  • type:协议
load

load段可配置访问的负载,访问可以配成多个阶段,由phase值指定。

 <load>
 	<user session="mqtt_subscriber" start_time="0" unit="second"></user>
 	<arrivalphase phase="1" duration="10" unit="minute">
    <users interarrival="1" unit="second"></users>
  </arrivalphase>
  <arrivalphase phase="2" duration="10" unit="minute">
    <users interarrival="0.1" unit="second"></users>
  </arrivalphase>
  <arrivalphase phase="3" duration="10" unit="minute">
    <users interarrival="0.01" unit="second"></users>
  </arrivalphase>
 </load>

要连同以下的session一起看。

第一个user标签作用于“mqtt_subscriber”这个session,在程序开始后0s启动

arrivalphase标签表示在测试开始的10分钟,每一秒生成1个用户;在第二个10分钟,每秒生成10个用户;第三个十分钟,每秒生成100个用户

session

描述的是需要执行的请求。每一对session标签都有一个给定的百分比(probability),这些百分比决定新生成的用户将执行哪一个session,所有session的百分比之和必须等于百分之百。

<sessions>
        <session name="mqtt_publisher" probability="100" type="ts_mqtt">
            <request>
            <!-- 连接MQTT -->
                <mqtt type="connect" clean_start="true" keepalive="60" username="xxx" password="xxx"  will_topic="will_topic" will_qos="0" will_msg="will_msg" will_retain="false"></mqtt>
            </request>
			<!-- 等待 30s -->
            <request>
                <mqtt type="waitForMessages" timeout="30"></mqtt>
            </request>
			<!-- 循环发布主题 -->
            <for from="1" to="10" incr="1" var="loops">
                <request subst="true">
                    <mqtt type="publish" topic="test_topic" qos="1" retained="false"> {'...'}</mqtt>
                </request>
				<thinktime value='10'></thinktime>
            </for>
			<!-- 断开连接MQTT -->
            <request>
                <mqtt type="disconnect"></mqtt>
            </request>
        </session>
        <session name="mqtt_subscriber" probability="0" type="ts_mqtt">
        	<!-- 连接MQTT -->
            <request>
                <mqtt type="connect" clean_start="true" username="xxx" password="xxxx" keepalive="60"></mqtt>
            </request>
			<!-- 订阅主题 -->
            <request subst="true">
                <mqtt type="subscribe" topic="test_topic" qos="1"></mqtt>
            </request>
			<!-- 等待180s -->
            <request>
                <mqtt type="waitForMessages" timeout="180"></mqtt>
            </request>
			<!-- 取消订阅主题 -->
            <request subst="true">
                <mqtt type="unsubscribe" topic="test_topic"></mqtt>
            </request>
			<!-- 断开连接MQTT -->
            <request>
                <mqtt type="disconnect"></mqtt>
            </request>
        </session>
    </sessions>

因为第一个session设置了probability=“100”,所以生成的用户将全部作用于这个session

完整代码
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/tsung/share/tsung/tsung-1.0.dtd">
<tsung loglevel="debug" version="1.0">
    <clients>
		<client weight="1" host="moc-test" cpu="4" maxusers="100000"></client>
		<client weight="2" host="zhjs-test" cpu="4" maxusers="100000"></client>
    </clients>

	<servers>
        <server host="xxxxx" port="1883" type="ssl" />
	</servers>

    <load>
        <user session="mqtt_subscriber" start_time="0" unit="second"></user>
        <arrivalphase phase="1" duration="10" unit="minute">
        	<users interarrival="1" unit="second"></users>
      	</arrivalphase>
      	<arrivalphase phase="2" duration="10" unit="minute">
        	<users interarrival="0.1" unit="second"></users>
      	</arrivalphase>
      	<arrivalphase phase="3" duration="10" unit="minute">
        	<users interarrival="0.01" unit="second"></users>
      	</arrivalphase>
     </load>

    <sessions>
        <session name="mqtt_publisher" probability="100" type="ts_mqtt">
            <request>
                <mqtt type="connect" clean_start="true" keepalive="60" username="xxx" password="xxx"  will_topic="will_topic" will_qos="0" will_msg="will_msg" will_retain="false"></mqtt>
            </request>
			
            <request>
                <mqtt type="waitForMessages" timeout="30"></mqtt>
            </request>

            <for from="1" to="10" incr="1" var="loops">
                <request subst="true">
                    <mqtt type="publish" topic="test_topic" qos="1" retained="false"> {'...'}</mqtt>
                </request>
				<thinktime value='10'></thinktime>
            </for>
			
            <request>
                <mqtt type="disconnect"></mqtt>
            </request>
        </session>
        <session name="mqtt_subscriber" probability="0" type="ts_mqtt">
            <request>
                <mqtt type="connect" clean_start="true" username="xxx" password="xxxx" keepalive="60"></mqtt>
            </request>

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

            <request>
                <!-- wait for 60s -->
                <mqtt type="waitForMessages" timeout="180"></mqtt>
            </request>

            <request subst="true">
                <mqtt type="unsubscribe" topic="test_topic"></mqtt>
            </request>

            <request>
                <mqtt type="disconnect"></mqtt>
            </request>
        </session>
    </sessions>
</tsung>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值