kylinPET
......
SIPp-3.3
......
SIPp3.3 在Cygwin1.7上编译
make pcapplay_ossl
出现链接错误,需要这两个库 : "-lssl -lcrypto"    
                       //安装cygwin-1.7时 没有自动创建此动态库链接 手动补上
ln -s "E:\cygwin1.7\bin\cygssl-1.0.0.dll" ssl.dll
ln -s "E:\cygwin1.7\bin\cygcrypto-1.0.0.dll" crypto.dll
                       //Makefile 里路径补充
LIBS_Cygwin= -lcurses -lpthread -lstdc++ -L/usr/bin  -L/cygdrive/e/LAB/opengnu/wireshark-1.9.1/Wireshark-win32-libs/WpdPack/Lib
                       //用到这两个DLL 主要是宏定义的引入
make[1]: 进入目录"/cygdrive/e/LAB/open/Svr_VoIP/SIP/performance/sipp-3.3"
g++     \
-o sipp sslinit.o sslthreadsafe.o send_packets.o prepare_pcap.o rijndael.o md5.o milenage.o auth.o xp_parser.o message.o scenario.o  screen.o call.o comp.o sipp.o stat.o actions.o variables.o infile.o  deadcall.o task.o socketowner.o listener.o opentask.o reporttask.o  watchdog.o -lcurses -lpthread -lstdc++ -L/usr/bin -L /usr/lib/WpdPack/Lib -L/cygdrive/e/LAB/opengnu/wireshark-1.9.1/Wireshark-win32-libs/WpdPack/Lib   -lcrypto -lwpcap  
sslinit.o:sslinit.c:(.text+0x10): undefined reference to `_SSL_library_init'
sslinit.o:sslinit.c:(.text+0x20): undefined reference to `_SSL_load_error_strings'
sslinit.o:sslinit.c:(.text+0x38): undefined reference to `_SSL_CTX_new'
sipp.o:sipp.cpp:(.text+0x1b7): undefined reference to `_SSL_get_error'
sipp.o:sipp.cpp:(.text+0x2bd): undefined reference to `_SSL_CTX_get_cert_store'
sipp.o:sipp.cpp:(.text+0x34b): undefined reference to `_TLSv1_method'
sipp.o:sipp.cpp:(.text+0x353): undefined reference to `_SSL_CTX_new'
sipp.o:sipp.cpp:(.text+0x372): undefined reference to `_TLSv1_method'
sipp.o:sipp.cpp:(.text+0x37a): undefined reference to `_SSL_CTX_new'
sipp.o:sipp.cpp:(.text+0x3b3): undefined reference to `_SSL_CTX_load_verify_locations'
--------------------------------------------------------------------------------
                       //cygwin下 mount查看下 /usr/bin的实际代指路径
root@MICROSO-5M0HHTG /lib
# mount
E:/cygwin1.7/bin on /usr/bin type ntfs (binary,auto)
E:/cygwin1.7/lib on /usr/lib type ntfs (binary,auto)
E:/cygwin1.7 on / type ntfs (binary,auto)
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
D: on /cygdrive/d type ntfs (binary,posix=0,user,noumount,auto)
E: on /cygdrive/e type ntfs (binary,posix=0,user,noumount,auto)
F: on /cygdrive/f type ntfs (binary,posix=0,user,noumount,auto)
G: on /cygdrive/g type ntfs (binary,posix=0,user,noumount,auto)
I: on /cygdrive/i type ntfs (binary,posix=0,user,noumount,auto)
L: on /cygdrive/l type ntfs (binary,posix=0,user,noumount,auto)
       
SIPp-3.3用 vs+vgdb 调试
~、Cygwin环境下,利用vs+vgdb来调试SIPp工程:
  编译选项参看makefile 选用 "debug" 系列, 其中"pcapplay-ossl" 对应 "debug_pcap_cygwin" 。
~、路径更正
Build Settings                : make.exe 所在路径确认
Intellisense Directories      : Cygwin 中的 usr/include 等等头文件、库的路径        //似乎只能追加,无法对旧的路径进行编辑修改
测试样例
......
SIPp 测试案例
......
示例:SIPp3.3+FreeSwitch1.2.23
软交换        :FreeSwitch-1.2.23
               vc2008                         // 有些库直接借用 vc2012编译生成的
软话机        :eyeBeam1.5.18                  // 不同终端,发送INVITE包 SDP 描述数据的封装不同
测试准备
用SIPp做测试的时候需要准备以下8个文件:
UAC端:uac.sh, uac.xml, uac.csv
uac.sh:调用sipp命令,并传入相应参数脚本文件,模拟UAC(例如主叫),当然也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠;
uac.xml:根据需要编写的uac侧的sip信号流程;
uac.csv:用于uac.xml需要引入的相应数据;
UAS端:reg.sh, reg.xml ; uas_noreg.sh, uas_noreg.xml ; uas.csv
reg.sh:调用sipp命令,并传入相应参数的脚本文件,模拟UAS注册,当然也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠;
reg.xml:根据需要编写的注册流程,主要配合uas流程使用;
uas_noreg.sh:调用sipp命令,并传入相应参数的脚本文件,模拟UAS(例如被叫),当然也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠。
uas_noreg.xml:根据需要编写的uas侧的sip信号流程。
uas.csv:用于reg.xml和uas.xml中需要引入的相应数据。
注意:uas中,reg.xml和uas_noreg.xml中的内容不能合并在同一个xml中,或者会导致收不到invite;
网文参考:  Linux-SIPp3.3测试FreeSwitch-(一)~(七)
http://www.51testing.com/?uid-130600-action-spacelist-type-blog-itemtypeid-27867
注意端口号设置
如题。
因为,此案例中将UAS端分成两个包(reg.xml + uas_noreg.xml)发送,各自对应的 reg.sh 与 uas_noreg.sh 的端口号,注意要设成一样,
否则 UAS 端收不到 UAC 端的数据包。
另外,端口号最好手动设置  抓包时便于观察 容易分出 C/S 端 。
----------------------------------------
本案例 :        UAS端口 12346   UAC端口 12345
错误日志排查列表
......
488 Not Acceptable Here + INCOMPATIBLE_DESTINATION
* 488 Not Acceptable Here + INCOMPATIBLE_DESTINATION
(1)错误日志摘要(uac_7196_errors.log)
SIP/2.0 488 Not Acceptable Here
Reason: Q.850;cause=88;text="INCOMPATIBLE_DESTINATION"
(2)异常反应
屏幕提示           :     while expecting '180' (index 10), received 'SIP/2.0 488 Not Acceptable Here
实际软话机上观察 :    eyeBeam1.5上 振铃时未设置自动应答, 掉话,未接通 很多个"Missed Call "
(3)处理方法:
测试时,注意要用终端设备或软话机可以接受的SDP包,且保持uac/uas两边SDP一致;
可事先用两个话机拔叫一次,拔通抓包后拷贝出SDP数据,覆盖uac.xml 及 uas_noreg.xml场景文件中各自"INVITE"方法里的SDP部分。
uas 测试场景
......
401 Unauthorized
~、注意 uas.csv 帐号用例格式写法
之前:
SEQUENTIAL
1000;[authentication username=1000 password=1234]
1001;[authentication username=1001 password=1234]
1002;[authentication username=1001 password=1234]
报错: while expecting '200' (index 3), received 'SIP/2.0 401 Unauthorized
纠正:(可加上自己做为目标号,或随便写一个目标号"1002")        
SEQUENTIAL
1000;1002;[authentication username=1000 password=1234]                
1001;1002;[authentication username=1001 password=1234]
1002;1002;[authentication username=1002 password=1234]
uac 测试场景
415 Unsupported Media Type + 481 Call Does Not Exist
415错误处理 :
(*) uac.csv 里每一行用户号码 须事先已在服务端开户过
之前:4个号都未添加
SEQUENTIAL
152;19002;[authentication username=152 password=7d83c157ea9c4c21da1a0e7ab05c21b9]
153;138721;[authentication username=153 password=7d83c157ea9c4c21da1a0e7ab05c21b9]
之后:改用默认已有的20个号
SEQUENTIAL
1000;1011;[authentication username=1000 password=1234]
1001;1012;[authentication username=1001 password=1234]        
(*)uac.csv 文件要求是unix格式,用dos2unix工具转换。
参见代码 Infile.cpp 模块中有提及此要求: "Each line should be terminated with a '\n'"
这一点 在cygwin平台上 容易忽略掉。
如果不转换格式 而最后一行数据又没有"\r\n"符的话,会造成只有最后一行用例可以用,能收到软交换成功的回复,而其他行的不能用的假象,
不能用的每一个用例都被回复:
"while expecting '100' (index 9), received 'SIP/2.0 415 Unsupported Media Type " ,以及
"Dead call 1-11268@192.168.1.31 (aborted at index 9), received 'SIP/2.0 481 Call Does Not Exist "
480 Temporarily Unavailable + Reason: Q.850; MANDATORY_IE_MISSING
~、 头域与消息体之间的空行注意保留
<send retrans="500">
<![CDATA[
INVITE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[call_number]
To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 2 INVITE
Contact: sip:[field0]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
[field2]
Content-Type: application/sdp
Content-Length: [len]
                // 头域与消息体之间的空行不小心去掉,服务端回复 480错误,及""MANDATORY_IE_MISSING"错误:(uac_5604_errors.log)
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
b=AS:84
c=IN IP[local_ip_type] [local_ip]
t=0 0
a=X-nat:0
m=audio [auto_media_port] RTP/AVP 98
a=sendrecv
a=rtpmap:98 iLBC/8000
a=fmtp:98 mod=30
]]>
</send>
网页上拷贝的场景文件使用前处理
~、自网页面上拷贝的场景文件处理
(1)脚本(.sh)、数据(.csv)需先转化成unix格式的格式再执行,xml 场景配置可不必转换。
root@MICROSO-5M0HHTG /cygdrive/e/LAB/open/Svr_VoIP/SIP/performance/sipp-3.3/test/test-fs
# ./uas_noreg.sh 100
./uas_noreg.sh: line 2: %HTML_CONTENT%apos;\r': command not found
./uas_noreg.sh: line 4: %HTML_CONTENT%apos;\r': command not found
./uas_noreg.sh: line 6: %HTML_CONTENT%apos;\r': command not found
./uas_noreg.sh: line 7: syntax error in conditional expression
'/uas_noreg.sh: line 7: syntax error near `]]
'/uas_noreg.sh: line 7: `if [[ $# -eq 0 ]]
root@MICROSO-5M0HHTG /cygdrive/e/LAB/open/Svr_VoIP/SIP/performance/sipp-3.3/test/test-fs
# dos2unix uas_noreg.sh
dos2unix: converting file uas_noreg.sh to Unix format ...
(2)去掉数据段之间的空行。
A、  XML场景文件 里的数据段 不能有空行,否则数据封包格式错误。   即去掉 "<![CDATA[  ....   ]]>"  之间的空行
B、  CSV用例数据 :SEQUENTIAL与数据行、 及各数据行之间都不要留空行。
sipp 测试样例-FS
[/_Svr_VoIP/SIP/performance/sipp-3.3/test/test-0908-2]
../../sipp -sf reg.xml -inf reg1.csv -p 6067 -i 192.168.1.31 -m 50 192.168.1.31:5060
sipp 测试样例-AS
压力测试 大呼测试
功能测试 小叫测试
呼损
Asterisk 略写为 AS  
===============================================================================================
[\_Svr_VoIP\SIP\performance\sipp-3.3.990-elastix\test1\sipp-1.1r8\register_yes-authentication]
-sf register_yes_authentication-AS1.8.23.xml -inf register_yes_authentication.csv -i 192.168.3.36 -p 6690 192.168.3.139
===============================================================================================
./sipp -r 1 -i 192.168.3.60 -l 1 -sf test/uac-media.xml -inf test/test-call.csv 192.168.3.32
[test-0908]
../sipp.exe -sf reg.xml -inf test.csv -p 6078 -i 192.168.3.60 192.168.3.32
[test-0908-2]
./sipp -sf reg.xml -inf reg1.csv -p 6067 -i 192.168.3.60 -m 50 192.168.3.32:5060   //主叫
./sipp -sf reg.xml -inf reg2.csv -p 6068 -i 192.168.3.60 -m 50 192.168.3.32:5060   //被叫
./sipp -sf uac.xml -inf reg1.csv -p 6067 -i 192.168.3.60 -m 50 192.168.3.32:5060        //uac
./sipp -sf uas.xml -inf reg2.csv -p 6068 -i 192.168.3.60 -m 50 192.168.3.32:5060        //uas
[test-0908-3]
sipp -sn uac 192.168.3.32:5060 -r 1 -rp 3000 -inf data.csv -p 7098 -i 192.168.3.60 -s 8001 -sf uac.xml -m 1000 -l 900
sipp -sn uas 192.168.3.32:5060 -inf data.csv  -i 192.168.3.60 -p 8890 -s 8001 -sf uas.xml
使用SIPp进行SIP压力测试
使用SIPp进行SIP压力测试
                                                                       
larkguo@gmail.com
2008-03-26
目录
1        简介        2
2        安装        2
SIPp
http://sipp.sourceforge.net/                (翻墙快)
https://github.com/SIPp/sipp/releases        
SIPp :  SIP服务端压力测试工具
源码分析
......
源码编译
SIPp 可安装在 Linux 和 Cygwin 上面, 其他 Unix 版本可能也可以安装使用,但在每一个
发布周期中并未被测试。 不过 Cygwin 上面性能没有 Linux 上面好,且 SIPp 只能在运行于
windows xp 或更高 windows 版本的 Cygwin 上面运行。在 Linux 环境中, SIPp 以源代码的形
式提供,在使用 SIPp 之前需要编译 SIPp,在编译之前需要如下依赖组件:
C++ Compiler
curses or ncurses library
For TLS support: OpenSSL >= 0.9.8
For pcap play support: libpcap and libnet
For SCTP support: lksctp-tools
For distributed pauses: Gnu Scientific Libraries
在编译 SIPp 时,有如下四个选项:
不包含对 TLS, SCTP 或 PCAP 的支持
# tar -xvzf sipp-xxx.tar
# cd sipp
# ./configure
# make
包含 TLS 支持
# tar -xvzf sipp-xxx.tar
# cd sipp
# ./configure --with-openssl
# make
包含 PCAP play 支持
# tar -xvzf sipp-xxx.tar
# cd sipp
# ./configure --with-pcap
# make
包含 SCTP 支持
# tar -xvzf sipp-xxx.tar
# cd sipp
# ./configure --with-sctp
# make
或者组合支持以上功能
# tar -xvzf sipp-xxx.tar
# cd sipp
# ./configure --with-sctp --with-pcap --with-openssl
# make
Reference
SIP\performance\文档\SIPp使用手册中文版 中译版.pdf
 
hlz_2599@163.com
http://blog.163.com/hlz_2599
热键
按键  作用
+  以 1 倍于 rate_scale 的速率增加呼叫
-  以 1 倍于 rate_scale 的速率减少呼叫
*  以 10 倍于 rate_scale 的速率增加呼叫
/  以 10 倍于 rate_scale 的速率减少呼叫
c  进入命令控制模式
q  待所有呼叫完成后退出 sipp
Q  立即退出 sipp
s  转储当前状态到日志文件(仅当使用了-trace_screen 参数时)
p  暂停当前工作
1  显示脚本页面
2  显示统计页面
3  显示响应时间分布页面
4  显示变量页面
5  显示 TDM 页面
6-9  Display the second through fifth repartition screen.
命令
在命令模式,可以使用单个命令控制 SIPp 的动作。命令模式比热键更灵活,只不过需
要手动输入命令,SIPp 提供了如下命令(在运行过程按热键 c 进入):
命令                  描述
dump tasks  把错误信息转储到日志文件
set rate x  设置呼叫率
set rate-scale x  设置呼叫速率步长(rate-scale)
set users x  设置同时在线的用户数(仅在指定了参数-users 时生效)
set limit x  设置呼叫速率上限(等同于参数-l)
set hide <true|false>  Should the hide XML attribute be respected?
set display <main|ooc>  改变视图,在主脚本页面和 ooc 脚本页面之间切换
set index <true|false>  是否显示脚本视图中的索引信息
trace <log><on|off>  开启或关闭错误显示,仅对 "error",  "logs",  "messages",  and "shortmessages"有效。
Scenario 编写
......
6.1 创建客户端(类似 UAC) 脚本
客户端脚本以" send"命令开始,示例如下:
<scenario name="Basic Sipstone UAC">
<send>
<![CDATA[
INVITE sip: [service] @[remote_ip] [remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip] [local_port]
From: sipp <sip:sipp@[local_ip] [local_port] >;tag=[call_number]
To: sut <sip: [service] @[remote_ip] [remote_port] >
Call-ID: [call_id]
Cseq: 1 INVITE
Contact: sip:sipp@[local_ip] [local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
t=0 0
c=IN IP[media_ip_type] [media_ip]
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>
关键词
       关键词           默认值                说明
[service]           service                 由参数-s 传递,一般用来指定单个主被叫
[remote_ip]                     远端设备地址
[remote_port]        5060                 远端设备端口 。可以在脚本中使用偏移量,如[remote_port+3]
[transport]          UDP                 指定传输层协议, UDP/TCP,由参数-t 决定
[local_ip]                   主机本地地址 , 可以由参数-i 指定
[local_ip_type]                   ip 版本
[local_port]         由系统随机分配 可由 -p 指定,可以在脚本中使用偏移量,如[local_port+3]
[len]                             sdp 长度,用于"Content-Length"头域, 由sipp 自动生成或者手动指定,可以添加偏移量,如[len+3
[call_number]                   呼叫索引, 从 1 开始,每增加一个呼叫递增 1
[cseq]                          初始值为 1,可以使用参数 -base_cseq 手动指定初始值。
[media_ip]                      本地媒体流 ip,可以由 -mi 参数指定
[media_ip_type]                 本地媒体流 ip 版本
[media_port]                    本地媒体流端口,可由 -mp 指定,可以设置偏移量[media_port+3]
[auto_media_port]               自动指定媒体流端口,仅用于 pcap。该参数使多个呼叫的音频和视频端口从-mp 指定的端口开始,并给每个新的呼      叫分配端口。 SIPp 默认支持10000 个 rtp 流并发
[last_*]                        此关键词用于从接收的上一个 sip 消息中提取指定头域(如果存在) 的值。比如[last_to]则表示从接收的上一      个 sip 消息中提取 To 域的消息保存到[last_to]中并应用。
[field0-n                                                                        
file=<filename>        
line=<number>]                   从从外部文件 csv 加载值, file 表示选择从命令行中指定的 csv 文件的一个文件作为外部文件, line定义选择的 外部文件的起始行, field选择字段
[file                                
name=<filename>]                把指定的文件中内容全部插入到 sip 消息中。由于空格符,回车符及换行符不被某些关键词识别,所以插入的文件 需要被精确地编辑成你想要的格式才行,否则会有乱码。
[timestamp]                        当前时间戳,与错误日志的时间戳格式一样
[last_message]                     上一个收到的消息
[$n]                               用于插入定义的呼叫变量 n
[authentication]                   用于认证头( authentication head),这个关键词可以使用参数,书写格式为: [authentication e=myusername password=mypassword],如果没有指定用户名( username),则需使用命令行参数-au 或者-s 指定;如果没有指定密码
                                       ( password),则需使用命令行参数-ap 指定
[routes]                          如果在 recv 命令中已设置" rrs"属性为 true,则Record-Route"头被存储在关键词 [route]中,
                                       可使用[routes]调用。
[next_url]                        如果在 recv 命令中已设置" rrs"属性为 true,则[next_url] 中包含 Contact 头中的内容
[branch]                          生成一个由(z9hG4bK) + call number + message 索引 组成的 branch id 到脚本中。如果你想要使用与之前的消息一 样的 branch id,你可以使用偏移量指定,如[branch-N]
[msg_index]                        在脚本中提供消息号
[cseq]                             提供接收到的上一个请求消息中的 CSeq 值,可以使用[cseq+1]来递增该值。
[clock_tick]                        在消息中包含 sipp 的内部时钟
[pid]                               指定 sipp 的 pid,即进程号
[sipp_version]                      在消息中包含 sipp 的版本
[tdmmap]                           在呼叫消息中包含 tdm 映射值
[fill]                             使用字符填充消息
[users]                            如果在命令行中指定了 -users 参数, 则这个关键词表示当前已经运行的用户的数量
[userid]                          如果在命令行中指定了 -users 参数, 则这个关键词表示当前正在运行的用户的 id(范围为 0 到users-1)
                                               
6.2 创建服务端(类似 UAS) 脚本
脚务端脚本以" recv"命令开始,语法规则和可用命令跟客户端脚本的是一样的,不过
在服务端脚本中会用到很多的[last_*]关键词,举个例子如下:
<recv request="INVITE">
</recv>
<send>
<![CDATA[
SIP/2.0 180 Ringing
[last_Via:]
[last_From:]
[last_To:];tag=[call_number]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
在这个脚本中是准备回复 180 消息,而且该 180 消息中的一些内容是从上一个接收的
invite 中提取出来的。
6.3 动作( Actions)
在一个" recv"或者" recvCmd"命令中,可以执行一些动作,目前支持如下动作:
正则表达式( ereg)
记录日志( log)
执行外部命令(如系统命令),内部命令,以及播放 pcap 文件( exec)
执行双精度变量算术运算
给变量赋字符串值
比较双精度变量
跳到脚本的指定索引
在 csv 文件中查找指定词
鉴权
改变一个呼叫的网络地址
1) 正则表达式
在 SIPp 中使用正则表达式可以实现如下功能:
提取 SIP 消息中的内容并存储到变量中以在后续中用到
检查 SIP 消息中的某些内容是否满足要求
SIPp 中的正则表达式满足 PSIX 1003.2 规范。
特别提示一下:在同一个动作(action)中可以同时使用多个正个表达式。举例说明如
下:
第一个动作( First action):
提取接收到的 sip 消息中的第一个 ipv4 地址
检查我们是否能够成功提取该 ip 地址
将该 ip 地址赋给呼叫变量 1 和 2
第二个动作( Second action):
提取接收到的消息的 Contact 头
将提取的 contact 头分配给变量 6
<recv response="200" start_rtd="true">
<action>
<ereg regexp="([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*" search_in="msg" check_it="true" assign_to="1,2" />
<ereg regexp=".*" search_in="hdr" header="Contact:" check_it="true" assign_to="6" />
</action>
</recv>
运行参数
在线帮助:使用 sipp -h 可查看
脚本文件参数
脚本文件参数
-sd        导出内嵌的脚本文件
-sf        加载自定义的脚本 XML 格式
-oocsf        加载 out-of-call 脚本
-oocsn         加载 out-of-call 脚本
-sn        使用默认(内置)脚本,如果不指定参数,则默认是 uac,可用的参数如下:
uac:标准 uac
uas:简单 uas
regexp:带正则表达式的 uac
branchc:
brahchs:
3pcc-C-A:
3pcc-C-B:
3pcc-B:
3pcc-A:
常用运行参数
-aa        使能 SIPp 对 INFO, UPDATE and NOTIFY 自动回 200ok
-inf        在呼叫过程中,从一个外部 CSV 文件引入值到脚本中去。文件的第一行表明数据的读取顺序。
-r        设置呼叫速率(设置多少个呼叫每秒)
-l        设置最大的并发呼叫量
-m        设置本轮最大的呼叫个数,当 sipp 达到该指定值会自动退出
-users        指定同时进行的呼叫个数
-f        设置在屏幕上的统计报告频率,默认为 1 秒
性能测试建议
12.1  使用 SIPp 做性能测试的建议
SIPp 本身就是被设计用来做性能测试, 通常情况下能够满足中等并发中等呼叫速率的测试场景。
如果测试时满足下列条件,则可以用 SIPp 来测试高并发、高呼叫速率的场景:
l使用 Linux 系统来达到高并发。Windows 版本(使用 CYGWIN)性能不够高
l尽量不使用消息跟踪功能,消息跟踪(如-trace_msg, -trace_logs 等)仅用于调试而不是性能测试
l理解 SIPp 的内部调度机制,并使用命令行参数-timer_resol,  -max_recv_loops 和 -max_sched_loops 来调整 SIPp,使运行在最佳状态。
SIPp内部机理
12.2 SIPp 内部调度机制
SIPp 持续地执行 loop 直到遇到让它停止执行的条件,如运行过程中按 q 键,或达到最大的呼叫量等等。
几个可以对 sipp 的性能进行微调的命令行参数如下:
l  定时器精确度(timer_resol) :默认的定时器精确度是 1ms,这也是 sipp 所能支持的最高的精确度,如果调大了精确度会导致 SIPp 处理不过来
l  max_recv_loops 和 max_sched_loops:max_recv_loops 是 sipp 在单位时间内所能读取的最大消息量,
 max_sched_loops 是单位时间内所能处理的最大呼叫量,在呼叫量很大的测试时可以调大这两个值,
 不过要注意,调大这两个值后会对 cpu 的占用带来较大的影响
l  watchdog_interval,  
   watchdog_minor_threshold,       watchdog_major_threshold,
    watchdog_minor_maxtriggers,  watchdog_major_maxtriggers:
  watchdog 是用来监视 sipp 是否已经挂死的,可以适当调大这些值
网文摘录
......
用SIPp实现的测试话机被叫的脚本
自动测试话机作为被叫的稳定性。
主叫过程的测试需要开发支持,应该有两种办法,
一是SIPp作为主叫,话机作为被叫,被叫几秒后,自动接通,然后主叫放一些音频文件;
二是话机作为主叫,SIPp作为被叫,收到INVITE直接接通,然后放一段音频,然后挂断。
#! /bin/sh
>results.txt
while true; do
       ./sipp -sf ben_send_register.xml -inf register.csv -m 1 -t u1 -i 192.168.1.40 -p 5060 192.168.1.2
       ./sipp -sf ben_response_notify.xml -m 1
       ./sipp -sf ben_send_invite.xml -inf register.csv -r 1 -rp 10000 -s 8001 -m 360 -t u1 -i 192.168.1.40 -p 5060 192.168.1.2
       if test $? -ne 0
               then
                       echo `date` >> results.txt
                       echo Test failed >> results.txt
               else
                       echo `date` >> results.txt
                       echo Test succeeded >> results.txt
       fi
用Sipp 对Asterisk 进行性能测试
公司需要, 对Asterisk 进行一定的性能测试.
测试目标:
   1.  IVR 支持多少路
   2.  一对一通话, 支持多少路
   3.  不同编解码的性能影响.
   4. 通话中,录音, 支持多少路.
   测试工具: sipp http://sipp.sourceforge.net/
   辅助工具: Xlite
   SIP rfc: http://www.ietf.org/rfc/rfc3261.txt
   RTP for AV http://www.ietf.org/rfc/rfc3551.txt
   环境:
   CPU: xeon 5110 1.6G*2 , 1 G MEM 物理机
   Asterisk-1.4.7
   Asterisk 基本操作:
   启动: safe_asterisk, 或者asterisk -vvvc
   如果是后台启动, 连接监控: astersisk -r
   关闭: 在控制栏输入 stop now
   Asterisk 配置:
   关注两个配置文件(/etc/asterisk):
   sip.conf         // sip 分机号设置
   extensions.conf   // dail plan 设置, 控制呼入后是什么动作
   sip.conf 添加2000 个分机号, 以便模拟1000 人呼叫(呼叫,应答)
   [1000]
   type=friend
   host=dynamic
   context=incoming   //和extensions.conf 中对应
   canreinvite=no   //如果设置为yes, 双方通话信息会直接进行, 而不通过asterisk. 设置成no,表示所有交互都通过Asterisk.
   [1001]
   type=friend
   host=dynamic
   context=incoming
   canreinvite=no
   extensions.conf  这里列举了多种呼叫计划, 包括IVR,  拨号通话, 通话录音等.
   [incoming]
   ;play hello world forever
   exten => _XXXX,1,answer()
   exten => _XXXX,2,playback(hello-world)
   exten => _XXXX,3,goto(OneToOne,_XXXX,1)
;[typetest]
   ;exten => 1111,1,Wait(2)
   ;exten => 1111,2,Record(/tmp/asterisk-recording:gsm)
   ;exten => 1111,3,Hangup
   ;exten => 1112,1,Wait(2)
   ;exten => 1112,n,Playback(/tmp/asterisk-recording)
   ;exten => 1112,n,Hangup
   ;[typetest2]
   ;exten => _XXXX,1,answer()
   ;exten => _XXXX,2,dial(sip/${EXTEN},10,r)
   ;[typetest3]
   ;exten => 999,1,answer()
   ;exten => 999,2,dial(sip/${EXTEN},10,r)
   ;exten => 999,1,Meetme(1234,i,123456)
   ;[OneToOne]
   ;exten => _XXXX,1,answer()
   ;exten => _XXXX,2,mixmonitor(test${EXTEN}.wav|av(0)V(0))
   ;exten => _XXXX,3,dial(sip/${EXTEN},10,r)
   ;exten => _XXXX,4,Hangup
   ;exten => _XXXX,3,Record(/tmp/asterisk-recording${EXTEN}:gsm)
   ;[IVR]
   ;exten => _XXXX,1,answer()
   ;exten => _XXXX,2,playback(hello-world)
   ;exten => _XXXX,3,goto(IVR,_XXXX,2)
   Sipp 基本操作:
   sipp 涉及三个文档(以呼入后,就不停播放IVR 语音):
   *.bat   批处理命令,方便调用, 其中 -m 参数表示
   sipp -sf a16.xml -inf a16.csv -p 5062 -m 200 -i 172.16.3.199 10.0.1.4:5060 -trace_err
   *.xml   // 具体的操作, 核心部分, 下篇具体介绍xml 文件
   *.csv  // xml 里面引用的参数, 以便发起不同呼叫
   SEQUENTIAL
   2001;1002;
   2003;1003;
   2200;1200;

IPPBX-性能测试相关推荐

  1. 软件性能测试vu脚本录制,利用LR插件完成性能测试脚本

    ● 菜单中会多出一项[Vuser]的菜单.这个菜单就是我们主要使用的内容. ● 另外,在对象库中也会增加LoadRunner相应的对象.这些对象的使用和软件中其他对象的使用没有什么分别.这些对应都是可 ...

  2. java反射最佳实践,java反射性能测试分析

    java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...

  3. linux命令 iperf-网络性能测试工具

    iperf命令是一个网络性能测试工具.iperf可以测试TCP和UDP带宽质量.iperf可以测量最大TCP带宽,具有多种参数和UDP特性.iperf可以报告带宽,延迟抖动和数据包丢失.利用iperf ...

  4. Jmeter性能测试 入门

    Jmeter性能测试 入门 原文:Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jme ...

  5. sysbench的安装和做性能测试

    sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. ...

  6. 利用Apache的ab命令做Benchmark性能测试

    测试系统性能,例如httpsqs # ab -k -c 10 -n 100000 "http://127.0.0.1:1218/?name=xoyo&opt=put&data ...

  7. 深入浅出开源性能测试工具 Locust (使用篇 1)

    在<[LocustPlus序]漫谈服务端性能测试>中,我对服务端性能测试的基础概念和性能测试工具的基本原理进行了介绍,并且重点推荐了Locust这一款开源性能测试工具.然而,当前在网络上针 ...

  8. 性能测试回归测试_自动网站性能回归测试

    性能测试回归测试 by Adam Henson 亚当·汉森(Adam Henson) 如何使用Foo自动执行网站性能回归测试 (How to automate website performance ...

  9. 小程序前端性能测试_如何提高前端应用程序的性能

    小程序前端性能测试 If your website takes longer than 3 seconds to load, you could already be losing nearly ha ...

最新文章

  1. oracle打散分组函数,oracle分组函数
  2. Java并发编程的基础-线程的终止
  3. linux 流量 脚本,linux 检测网络出入流量 当达到一定量时 自动执行另一个脚本。...
  4. windows下的gvim配置
  5. GTimeSheet正式启用官方网站
  6. 英特尔与Verizon合力推动5G技术 新网络传输革命即将来临
  7. html搜索框 模糊搜索,前端js模糊搜索(模糊查询)
  8. 计算机数值方法知识点,数值分析 全部 知识点.docx
  9. SpringCloud 应用在 Kubernetes 上的最佳实践(二):部署篇 (开发部署)
  10. 推荐几个学习GIS的社区
  11. 【XP系统后的声卡问题】
  12. mongodb的安装和使用
  13. 基于STC12C5A60S2的SDHC卡的初始化和读写过程
  14. 以儒始,以道终:九十年代新武侠电影观
  15. 《计算机工程》从投稿到录用之一手经验
  16. tiptop自定义发送邮件
  17. python库——pandas
  18. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出
  19. Eureka注册中心配置登录验证
  20. 2019计算机考研大纲考什么,2019计算机考研大纲有哪些变动

热门文章

  1. 【附源码】计算机毕业设计java幼儿园管理系统设计与实现
  2. 怎么用Java来操作Word和Excel?
  3. TCP三次握手,四次挥手详解
  4. 4.0电机参数的含义及测量方法
  5. WINCE 实现WIFI连接功能(WZC)
  6. can 光端机 适配国内主流消防主机的CAN光纤转换器
  7. Maven学习之推送本地jar到远程仓库
  8. excel写为字节流使用base64加解密
  9. DSP TMS320F28335使用总结
  10. 51单片机串口通讯c语言程序,如何使用51单片机实现串口通信