如何使用SIPp进行压力测试
1) 编辑好xml场景文件;
2) 编辑csv文件;
a) Csv文件为sipp要压力测试的读取的变量文件,也就是说从csv文件一个个去读取,然后填写到xml的field变量中,从而实现压力测试。举例说明:
b) Xml文件的分析;
INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>
这里的field0,field1为csv文件每个字段的内容。
c) 再来看csv文件的分析;
3000;3001
3001;3002
3003;3004
这里的filed0,field1所指的就是3000,3001,以此类推,因此你可以建立自己大批量内容的csv文件。
d) 如何编写401 407的验证的csv文件;
当AST发回要求验证的401或407验证的时候,SIPp只要发回验证密码的请求内容即可。注意401是register请求验证消息,407是invite请求验证消息,这点不能搞混。举例说明:
<recv response="401" auth="true" next="1">
</recv>
<send retrans="500">
<![CDATA[
REGISTER sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
To: [field0] <sip:[field0]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 2 REGISTER
Contact: sip:[field0]@[local_ip]:[local_port]
[field1] 这里就是发送的验证消息,【field1】
Content-Length: [len]
Expires: 3600
]]>
</send>
那么我们如何编写csv文件呢?如下:
3000;[authentication username=3000 password=3000]
3001;[authentication username=3001 password=3001] (以此类推)
说明:这里的field0为3000,filed1为[authentication username=3000 password=3000]
3) 使用方法:
./sipp -sf reg.xml -inf reg.csv -p 6077 -i <local-ip> -m 4 <ip address of registrar>:5060
-sf 读取场景文件
-inf 读取csv文件
-p 本机采用端口
-i 本机IP
-m 要进行压力测试的次数
Ip address of registrar 要进行压力测试的IP地址
4) 使用Sipp后的界面显示:
这里是启动后的界面,可以看到运行的整个过程。简单介绍下:
[+-*/],简单来讲就是加减乘除,是指运行同一秒中要处理的并发数。*是之前的并发数成倍的增长,+是指并发数从10-30个逐步增加。-与/同理。
【q】:Soft exit 软件退出
【p】:Pause traffic 软件暂停运行
这里我们可以观察到
Call rate(length) port Total-time Total-calls Remote host
14.0(0 ms)/1.000s 6077 307179.49s 4120556 192.168.0.194:5060
14 new calls during 1.002 s period 每秒处理并发为14个call
374 calls (limit 420) 374个call等待处理,最多420个call
非常详细的记录
测试者可以按下1、2、3、4、5按键来看更为详细的记录,下图为按键2后的图面
这里我们可以看到每秒处理的成功的call为13.417个,总共处理成功的call为412952个。Failed call为被丢弃失败的call为15588个。
5) 如何编写csv文件,这里有个bash小脚本程序,可以帮助实现:
#!/bin/bash
i=3000
while [ $i != 3100 ]
do
i=$(($i+1))
# j=$(($i+1))
echo “” >test.csv
echo "$i;[authentication username=$i password=$i]" >>test.csv
done
这里生成文件csv文件为
3000;[authentication username=3000 password=3000]
3001;[authentication username=3001 password=3001]
.
.
.
3100;[authentication username=3100 password=3100]
6) 要从3000到3100都要注册,因此在AST系统要实现建立好3000到3100号码分配,而且密码必须要与号码一致。譬如3000的号码密码必须为3000,这样才能与csv文件配置一致。这里就不在烦述了。
7) 灵活的配置xml、csv文件可以实现各种消息的混合一起实现,譬如可以实现register、invite带407、最后发送bye消息,也可以实现共同invite到一个meeting,然后发送rtp方式,滞留10分钟后,发送bye退出meeting等等。
当然必须要有扎实的对SIP精通的消息流程,这里介绍的方法为通过eyebeam软终端注册后将整个包抓下来分析,然后根据分析的包内容修改模版即可实现模拟过程。