使用 TLS 的 Tsung 负载测试 XMPP

Posted

技术标签:

【中文标题】使用 TLS 的 Tsung 负载测试 XMPP【英文标题】:Tsung Load-Test XMPP with TLS 【发布时间】:2014-05-12 20:58:05 【问题描述】:

有没有人有一个带有 TLS 实现的 xml tsung 配置文件?我想在我的 XMPP 服务器上测试 TLS 安全连接,但我无法在启用 TLS 的情况下运行脚本。

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/Users/Downloads/tsung-1-5-0/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
  <clients>
   <client host="localhost" use_controller_vm="true" maxusers="600"/>
  </clients>

  <!-- Server side setup -->
 <servers>
  <server host="chat.example.com" port="5222" type="tcp"></server>
 </servers>

  <load>
   <arrivalphase phase="1" duration="10" unit="minute">
    <users interarrival="0.01" unit="second"></users>
   </arrivalphase>
  </load>

  <!-- JABBER parameters -->
  <!-- to synchronise users,  use a global acknoledgement -->
 <options>
  <option type="ts_jabber" name="global_number" value="1000"></option>
  <option type="ts_jabber" name="userid_max" value="10000"></option>
  <option type="ts_jabber" name="domain" value="chat.example.com"></option>
  <option type="ts_jabber" name="username" value="tsunguser"></option>
  <option type="ts_jabber" name="passwd" value="tsunguser"></option>
 </options>

<sessions>
   <session probability="50" name="jabber-example" type="ts_jabber">

    <request> <jabber type="starttls" ack="local" cacertfile="%%_cacert%%" certfile="%%_certfile%%" keyfile="%%_keyfile%%" /></request>
    <thinktime value="2"></thinktime>
    <transaction name="authenticate">
      <request> <jabber type="auth_get" ack="local"></jabber> </request>
      <request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
    </transaction>

    <request> <jabber type="presence:initial" ack="no_ack"/> </request>
    <thinktime value="2  "></thinktime>

    <transaction name="roster">
      <request> <jabber type="iq:roster:get" ack="local"></jabber></request>
    </transaction>

    <thinktime value="30"></thinktime>

    <transaction name="online">
    <request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
    </transaction>

    <thinktime value="30"></thinktime>

    <transaction name="offline">
      <request> <jabber type="chat" ack="no_ack" size="56" destination="offline"></jabber> </request>
    </transaction>

    <thinktime value="30"></thinktime>

    <transaction name="close">
      <request> <jabber type="close" ack="no_ack"></jabber> </request>
    </transaction>

  </session>

  <session probability="20" name="jabber-digest" type="ts_jabber">

    <!-- regexp captures stream ID returned by server -->
    <request>
      <dyn_variable name="sid" re="&lt;stream:stream id=&quot;(.*)&quot; xmlns:stream"/>
      <jabber type="connect" ack="local"></jabber>
    </request>

    <thinktime value="2"></thinktime>

    <transaction name="auth_digest">
      <request> <jabber type="auth_get" ack="local"></jabber> </request>
      <request subst='true'> <jabber type="auth_set_digest" ack="local"></jabber> </request>
    </transaction>
    <thinktime value="30"></thinktime>

    <transaction name="close">
      <request> <jabber type="close" ack="no_ack"></jabber> </request>
    </transaction>
  </session>


 </sessions>
</tsung>

这是我执行 xml 时的错误日志。当我删除 TLS 部分时,一切正常。

594- fatal: failed_validation,
                element_seq_not_conform,wait,session,is,jabber
Config Error, aborting ! fatal,
                             failed_validation,
                                  element_seq_not_conform,
                                      wait,session,
                                      is,jabber,
                              file,"jabber.xml",
                              line,112,
                              col,1

【问题讨论】:

向我们展示您的尝试。发布您的脚本,我们可以提供帮助。 这个脚本到目前为止它在没有 TLS 的情况下工作。 当您尝试使用 TLS 时会发生什么?有什么错误吗? 既然已经提供了进一步的信息,这个问题可以重新打开。 那么jabber.xml 的第 112 行是什么? 【参考方案1】:

使用以下事务值与 TLS 进行“连接”

<transaction name="connect">
  <request> <jabber type="connect" ack="local"/> </request>
  <request> <jabber type="starttls" ack="bidi_ack"/> </request>
  <request> <jabber type="connect" ack="local"/> </request>
</transaction>

另外,您必须添加选项值,如下所示,

<options>
 <option name="ssl_reuse_sessions" value="false"/>
 <option name="ssl_versions" value="'tlsv1.2'"/>
</options>

请与服务器团队交叉检查 TLS 版本。

如果您有任何疑问,请告诉我。

【讨论】:

【参考方案2】:

element_seq_not_conform 错误可能是 Tsung 抱怨元素序列。尝试根据tsung-1.0.dtd 验证 XML 以获得提示。

我昨天遇到了类似的错误。验证 XML 后,出现以下错误。

元素类型“tsung”的内容必须匹配 “(信息?,客户端,服务器,监控?,负载,选项?,会话)”。

所有必需的子元素(&lt;clients&gt;&lt;servers&gt;&lt;load&gt;&lt;sessions&gt;)都在 &lt;tsung&gt; 元素中。

<tsung>
  <clients>...</clients>
  <servers>...</servers>
  <monitoring>...</monitoring>
  <options>...</options>
  <load>...</load>
  <sessions>...</sessions>
</tsung>

看起来 Tsung 想要以正确的顺序排列子元素。所以我把&lt;load&gt;移到&lt;options&gt;上面。

<tsung>
  <clients>...</clients>
  <servers>...</servers>
  <monitoring>...</monitoring>
  <load>...</load>
  <options>...</options>
  <sessions>...</sessions>
</tsung>

Tsung 不再抱怨 XML。它运行。

【讨论】:

【参考方案3】:

你在没有 TSL 的情况下成功运行了吗?

【讨论】:

是的,没有 TLS 也可以运行! 您能帮助我们如何在没有 TLS 的情况下进行负载测试吗?你能分享配置文件和命令来运行它吗?

以上是关于使用 TLS 的 Tsung 负载测试 XMPP的主要内容,如果未能解决你的问题,请参考以下文章

在 xmpp ejabberd 服务器上使用 Tsung 进行负载测试是不是会创建原始数据?

MongooseIM (websockets) 的 Tsung 负载测试

Tsung:开源多协议分布式负载&压力测试工具

转: Tsung:开源多协议分布式负载&压力测试工具

tsung

使用 Tsung 进行测试时 Tigase xmpp 服务器崩溃