Tsung学习笔记(WebSocket篇)

接下来来测个WebSocket应用。

  • 被测应用:一个Elixir and Phoenix实现的聊天室。参考代码
  • URL: ws://localhost:4000/socket/websocket

WebSocket测试的配置和HTTP差不多,如果你还没有看过HTTP,请移銮驾。唯一不同点在于sessions的配置。这里给出sessions以外的完整配置:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung>
  <clients>
    <client host="localhost" cpu="4" maxusers="30000"/>
  </clients>

  <servers>
    <server host="localhost" port="4000" type="tcp"/>
  </servers>

  <load>
    <arrivalphase phase="1" duration="1" unit="minute">
      <users arrivalrate="10000" unit="second"/>
    </arrivalphase>
  </load>

  <sessions>
    <!-- 在这里添加会话 -->
  </sessions>
</tsung>

添加会话

对于WebSocket来说,一个会话相当于创建连接->(发送消息&接收消息)* n ->断开连接的全过程。这个过程用XML配置来描述就是下面这样:

<sessions>
  <session name="websocket" probability="100" type="ts_websocket" weight="1">
    <!-- 创建连接 -->
    <request>
      <websocket type="connect" path="/socket/websocket"/>
    </request>

    <!-- 定义动态变量 room_id -->
    <setdynvars sourcetype="random_number" start="1" end="100">
      <var name="room_id" />
    </setdynvars>

    <!-- 发送消息加入房间的 -->
    <request subst="true">
      <websocket type="message">
        {"topic":"room:%%_room_id%%","event":"phx_join","payload":{},"ref":"1"}
      </websocket>
    </request>

    <!-- 发送聊天消息 -->
    <for var="i" from="1" to="1000" incr="1">
      <thinktime min="10" max="60" random="true"/>
      <request subst="true">
        <websocket type="message">
          {"topic":"room:%%_room_id%%","event":"publish_message","payload":{"username":"user","body":"test"},"ref":"%%ts_user_server:get_unique_id%%"}
        </websocket>
      </request>
    </for>

    <thinktime min="1" max="10" random="true"/>
    <request>
      <websocket type="close"/>
    </request>
  </session>
</sessions>

上述配置首先创建了websocket连接(type="connect"),然后在100个房间里随机挑了一个房间进,在这个房间里时而发消息(type="message"),时而读别人发来的消息(用thinktime模拟),发了1000条消息后,主动断开连接(type="close")。

这里比较有意思的事定义动态变量(<setdynvars/>)和使用动态变量。定义不用多说,一看就知道怎么用了。使用的话,<request/>元素上必须加上属性subst="true"subst是substitute(替换)的缩写,意味着当前的<request/>元素里有动态替换的部分,这种部分的长相是%%_变量名%%,注意变量名前面有个下划线。

运行测试和绘制图表

HTTP版一样,我这里就偷懒了。

猜你喜欢

转载自my.oschina.net/u/3390582/blog/1621411