使用 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="<stream:stream id="(.*)" 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”的内容必须匹配 “(信息?,客户端,服务器,监控?,负载,选项?,会话)”。
所有必需的子元素(<clients>
、<servers>
、<load>
和 <sessions>
)都在 <tsung>
元素中。
<tsung>
<clients>...</clients>
<servers>...</servers>
<monitoring>...</monitoring>
<options>...</options>
<load>...</load>
<sessions>...</sessions>
</tsung>
看起来 Tsung 想要以正确的顺序排列子元素。所以我把<load>
移到<options>
上面。
<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 进行负载测试是不是会创建原始数据?