1.1.SIPp简介
SIPp是一个测试SIP协议性能的工具软件。它包含了一些基本的用户代理工作流程(UAC和UAS:UAC负责发起SIP呼叫请求,UAS接收UAC的请求并负责对其做出响应),并可使用INVITE和BYE建立和释放多个呼叫。
1.2功能
可以读取XML的场景文件,即描述任何性能测试的配置文件,在场景定义文件中可以使用正则表达式;能动态显示测试运行的统计数据(呼叫速率、消息统计等);
可以用来测试许多真实的SIP设备,也可以模仿上千个SIP代理呼叫你的SIP系统;
另外,SIPp可以用来模拟现场的SIP信令,以重现出现的故障;或者可以自定义SIP协议以测试终端对某些方面的容错或错误处理能力。
1.3安装
1.3.1 sipp在linux的安装——见上篇文章。
1.3.2sipp在windows的安装:直接双击即可
注意事项
1)安装前:在SIPp安装目录的根目录(如C:)下安装cygwin或者直接在根目录下建立一个空的文件夹cygwin;
2)安装完成后:配置环境变量,在系统变量“Path”的最后添加“;SIPp的安装目录”并保存;
3)运行脚本时:脚本所在盘的根目录下必须包含usr文件夹,系统盘下一般都有,或者直接从其他机器上复制一份过来;
1.4sipp使用
用SIPp做测试的时候需要准备五个文件:uac.xml,uas.xml,uac.sh,uas.sh,data.csv。(xml文件是必须的,后面三个根据情况可以使用命令或参数代替)
uac.xml(uas.xml):根据实际需要编写的uac(uas)侧的sip信号流程;
uac.sh(uas.sh):模拟主叫(被叫),调用sipp命令,并传入相应参数的批处理文件,也可不准备此文件直接输入sipp命令执行程序,但是写成文件执行更加方便可靠;
data.csv:用于uac.xml和uas.xml中需要引入的相应数据。
注:在Windows下运行时,通过usc.bat(uas.bat)代替.sh文件。
应用实例
在编写xml脚本文件之前,需要先明确SIPp脚本模拟的对象、以及最终需要测试的对象,现以Volte彩铃业务为例说明,Volte彩铃业务框架如下图:
当需要测试业务平台,且不受核心网限制时,可以将主/被叫与核心网当成一个整体,通过抓取SIP前台服务器的包作为参考来编写uac.xml(uas.xml),而UAC(UAS)发送给SIP前台的消息应该是真实主(被)叫消息通过核心网后发给SIP前台的消息形式。
下面以Volte彩铃非Precondition流程为例:
将主/被叫与核心网当成一个整体,得出SIPp脚本编写所需的流程图为:
1.5sipp脚本编写一
介绍一下如何创建自己的SIPp XML脚本。一个SIPp脚本总是以如下开头:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario name="Basic Sipstone UAC">
而且总是以下面语句结束:
</scenario>
开头和结尾很简单,至于中间的写法规则其实也不难,在SIPp的脚本文件中,有许多用于操作SIP消息的命令,以下是使用率比较高的命令详细列表:
命令 | 属性 | 描述 | 例子 |
---|---|---|---|
<send> | retrans | 用udp传输 | <send retrans="500"> ,表示每500ms重传输该消息,可在没收到响应的情况下,在设定的时间之后重传。 |
<send> | lost | 模拟丢包率 | <send lost="10">: 发送的丢包率为10% |
<recv> | response | 指定SIPp期望收到的SIP消息代码,如1xx,2xx,3xx等 | <recv response="200">: 表示SIPp期望收到代码为200的消息 |
<recv> | request | 指定SIPp期望收到的SIP请求消息,如:INVITE,ACK,BYE,REGISTER,CANCEL,OPTIONS等。 | <recv request="ACK">: 表示SIPp期望收到ACK请求 |
<recv> | optional | 指定SIPp期望收到的消息是可选的,对端可以回这个期望的消息,也可以没有回这个期望的消息。 | <recv response="100" optional="true">: 表示SIPp期望收到代码为100的消息,但如果没有收到也没有关系。 |
<recv> | action | 指定当收到指定的消息时SIPp需要采取的动作 | <send lost="10">: 发送的丢包率为10% |
<pause> | milliseconds | 定义暂停的时间,单位为ms。当没有指定时间时,则使用命令行参数-d来指定。 | <pause milliseconds="5000"/>: 暂停脚本5分钟 |
<sendCmd> | <![CDATA[]]> | 用于SIP中第三方呼叫控制(3PCC)。CDATA必须包括Call-ID。 | <sendCmd><![CDATA[ Call-ID: [call_id]…… ]]></sendCmd> |
<recvCmd> | action | 当接收到命令时定义一个动作。 | <recvCmd<action<ereg regexp="Content-Type:.* search_in="msg" assign_to="2"/></action</recvCmd> |
有些命令在书写时是成对出现的,如<send> </send>
是一对,有些命令在书写时不用成对出现如<pause milliseconds="5000"/>
。