SIPp脚本编写方法基础m1_第1页
SIPp脚本编写方法基础m1_第2页
SIPp脚本编写方法基础m1_第3页
SIPp脚本编写方法基础m1_第4页
SIPp脚本编写方法基础m1_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SIPp脚本编写方法基础作者王伟版本号目录1. 脚本格式1.1. 基于XML进行扩展SIPp的测试脚本遵循标准的XML版本的语法规范,XML即“可扩展标记语言”extensibleMarkupLanguage的缩写,W3c组织与1998年发布XML规范。1.2. DTD扩展语法规则SIPp的执行目录中,存在一个文件。该文件为标准的xml扩展语法规则,在该文件中,对sendrecv、paus制元素增加了定义,包括其属性列表等内容,可作为脚本文件格式的校验。1.3. 脚本结构一个标准的SIPp脚本,文件起始应为通用的xml前导区和DTD文件定义区如图所示:接下来使用和包括的部分,即为脚本的正文部分

2、。sipp脚本正文部分,包含如下几个区域:1. 初始化区在初始化区域中,通常用来进行全局变量的定义和赋值等操作,在脚本未进行逻辑流程前,预先完成初始化动作。初始化区是在脚本正文的最开始,通过使用命令小让和/小让,并在其之间才f入一些nop和label命令即可实现,在初始场景中的变量,仅用于全局变量,并不会应用于呼叫。例如下图中,在初始化区对THINKTIME进行赋值:2. 逻辑执行区逻辑执行区中包括了业务流程的相关内容,比如接收消息、发送消息、暂停时长、分支判断、媒体播放、内外部命令执行等操作。逻辑执行区是脚本的最关键部分,编写sipp脚本,主要也就是针对该部分进行编写和调试。3. 变量抑制区

3、该部分是为了避免在脚本逻辑区定义了大量的变量,但实际并未使用导致运行时报错无法执行的问题,不论定义了多少变量,这些变量有无被使用,只需要添加进变量抑制区的列表中,脚本均可正常执行。该部分仅有一个命令Reference/,variables属性为所需抑制的变量列表。如下图所示:4. 定时器自定义区该区域主要作用为:针对消息响应时长(ResponseTime以及呼叫持续时长(CallLength)的Timer进行自定义间隔的配置,以获取所需的显示范围,例如自定义timer配置为:则在sipp运行时,查看运行统计界面呈现如下:1.4. 注释sipp脚本注释的语法格式为xxx,支持多行注释,如:2.

4、脚本类型SIPp脚本根据使用场景不同,主要分为UAC、UAS、3PCC和OCC4种类型,每种类型均有其特定的使用方式,内部逻辑也有所不同。2.1. UAC顾名思义,UAC类型的脚本主要是模拟sip会话中的UAC侧,即负责发起会话的client端。如注册客户端、主叫用户、订阅者等。通常的UAC脚本逻辑区会以send作为业务流程的起始。UAC脚本一旦启动,如果不设置起始暂停时长的参数,通常会立即开始执行。2.2. UASUAS与UAC相对,主要模拟sip会话的UAS侧,启动后即进入被动接收状态,通常作为server端使用,如注册服务器、被叫用户、通知者、业务网关等。通常的UAS脚本逻辑区会以rec

5、v作为业务流程的起始。UAS脚本启动后,即绑定相关本地socket,进入接收消息的状态。2.3. 3PCC(三方通话)SIPp工具允许多个脚本实例间进行交互,完成较为复杂的业务流程。如三方通话等业务,因此该种脚本在普通脚本的基础上,更多地使用内部cmd交互命令,如recvcmd、sendcmd等在不同脚本间传递会话参数,配合完成复杂流程的测试实现。sipp还提供了扩展的3pcc模式,支持master和slave的脚本角色。该类型的脚本编写和调试较为复杂,本文档中不再赘述,如有兴趣可以翻阅sipp的使用手册等文档,其中有详细说明。2.4. OCC(Out-of-call)OCC(Out-of-c

6、all)脚本作为特殊类型的脚本,通常不会单独使用,而是与UAC脚本配合使用(也只能与UAC脚本配合,UAS等类型脚本无法支持-occsn等执行命令)。主要作用为扩展UAC脚本的适用范围,使UAC脚本能够在接收到不同会话内的非预期消息时,不至于直接丢弃。如注册客户端可能会遇到接收到通知NOTIFY的消息,此时就需要在运行register脚本的时候适用-oocsn或-oocsf参数,配合ooc脚本,实现对NOTIFY消息返回200的操作。3. 命令与属性3.1. 常用命令SIPp工具提供的命令相当丰富,包括消息操作命令、变量操作、正则表达式、赋值和判断、内部命令、外部命令、日志操作、媒体命令等多种

7、,在一般的使用场景下,通常根据不同的动作,来进行命令的使用。下面针对比较常用的场景,如发送消息、接收消息、媒体播放等进行描述:(更详细的命令功能及示例,可以翻阅sipp的使用手册等文档)一个最基本的sipp脚本,通常包含了sendrecv、nop、pause这几个命令。其中send为发送sip消息,recv为接收sip消息,nop为处理非业务的逻辑,pause为提供暂停时长。例如一个基本语音呼叫的主叫侧脚本:首先使用send命令发送INVITE消息,注意在发送消息时,sip消息所有内容均包含在标准的xml数据格式CDATA内,CDATA的语法格式请格外注意,避免因为语法错误导致无法正确发送。(

8、注:在构造发送的INVITE消息时,为实现批量发送,使用到了大量的变量和关键字,在后续内容中会详细加以说明。)发送出消息后,还需要进行后续响应消息的接收,请注意由于sip协议存在临时响应和最终响应两种,而1xx的响应在业务中可能存在,也可能不存在,因此需要采用可选属性加以区别。(注:optional=true”即表示该条消息为可选接收,如果没有收到,也不会影响后续消息的接收及处理,如100/183/180。而200为必选接收消息,只有当接收到该消息后,脚本才会继续后续流程,因此没有optional参数。)在接U到200ok消息,并发送出ACK后,语音通话接续流程即完成,此时根据实际业务流程,需

9、要进行语音媒体的传输,因此脚本在这里需要增加一个nop命令,用于媒体的播放(注:nop命令可以用于任何非消息处理的位置,在nop命令中增加action命令,然后即可执行类似媒体处理、变量操作、条件判断等动作。)在执行媒体播放命令后,由于sipp在执行nop相关命令后,不会等待命令执行完毕而是立即执行后续脚本内容,因此为保证媒体播放正常,我们还需要根据实际要求,将脚本暂停一段时间,以确保流程模拟正确。(注:millisenconds属性可以自定义暂停的时长,单位为ms,如果该属性为空,则可以通过在执行命令中增加“-d1000。来指定暂停时长)3.2. 常用属性列表命令属性描述示例用于消息的发送,

10、常用参数包括retrans:udp报文重传时长;lost:丢包率;start_txn:启动响应时间记录ack_txn:记录接收响应时间,与start_txn匹配用于消息的接收,常用参数包括response:期望收到的响应消息request:期望收到的请求消息optional:可选接收消息,值为true或globaltimeout:超时时长,默认超时后直接ENDontimeout:超时后的跳转处理action:收到消息后米取的处理动作regexp_match:检查收到消息是否匹配预期用于设置暂停时间,常用参数包括milliseconds:设置暂停时长,单位msvariable:设置当变量出现时暂

11、停distribution:使用GSL定义或分布模型定义呼叫时长pausedistribution=exponentialmean=900000”/用于非协议消息处理的命令执行,常用参数包括action:执行命令动作用于两个SIPp实例间的交互发送,常用于3PCCW,常用参数包括:MT3PCCSi的参数传递dest:仅用于扩展模式3PCC用于两个SIPp实例间的交互接收,常用于3PCCW,常用参数包括action:接收到命令时的执行命令动作src:仅用于扩展模式3PCCaction通用属性:属性名描述示例start_rtd启动响应定时器sendstart_rtd=invite”rtd停止响应定

12、时器repeat_rtd重复启用响应定时器crlf运行界面增加回车换行next跳转任意labeltest与next一起使用,设置跳转条件chance与test、next一起使用,当test结果有值时,则概率跳转counter计数器累加13.3. 正则表达式正则表达式作为sipp中极为重要的功能,在各个场景下应用广泛,最常见的是通过正则表达式,获取接收消息中某个参数,并将该参数赋给变量,用于后续流程的使用。正则表达式的使用语法如下图所示:正则表达式的命令为regexp属性为需要匹配的表达式内容,其中使用()”包括起来的部分,为匹配项,可以赋给变量;search_in属性为设置本次查询的方式,si

13、pp支持3种正则匹配的方式,分别为:1.头域查询匹配当search_in=hdr”时,表示正则按照头域匹配,必须包含heade嚓数,给出需要查询的头域名称,如header=From。sipp会在指定的头域中进行匹配。注:start-line的匹配也是用头域匹配方式。2 .消息查询匹配当search_in=msg”时,表示正则根据整个消息内容进行匹配,通常在需要匹配SDP内容时会用到。3 .变量查询匹配当searchjnvar”时,表示正则按照变量进行匹配,必须配置variable参数,给出需要匹配的变量名称,如variable=header_to_tag(。4 .变量与关键字4.1. 关键字的

14、使用sipp中定义了大量的关键字,涉及到网络参数、sip会话参数和媒体参数等等,需要在编写脚本时加以注意。关键字的引用格式为keyword,例如locao_ip、call_id等。下表列出了常用的关键字:关键字描述备注service由参数-s传递,一般用来指定单个主被叫remote_ip远端设备地址remote_port远端设备端口。可以在脚本中使用偏移量,如remote_port+3transport指定传输层协议,UDP/TCP由参数-t决定local_ip主机本地地址,可以由参数-i指定local_port由系统随机分配可由-p指定,可以在脚本中使用偏移量,local_port+3len

15、sdp长度,用于Content-Length头域,由sipp自动生成或者手动指7E,可以添加偏移量,如len+3call_number呼叫索引,从1开始,每增加一个呼叫递增1cseq初始值为1,可以使用参数-base_cseq手动指定初始值。media_ip本地媒体流ip,可以由-mi参数指定media_port本地媒体流端口,可由-mp指定,可以设置偏移量media_port+3auto_media_port自动指定媒体流端口,仅用于pcap。该参数使多个呼叫的音频和视频端口从-mp指定的端口开始,并给每个新的呼叫分配端口。SIPp默认支持10000个rtp流并发last_*此关键字附于从接

16、收的上一个sip消息中提取指定头域(如果存在)的值。比如last_to则表小从接收的上一个sip消息中提取To域的消息保存到last_to中并应用。field0-nfile=line=从外部文件csv加载值,file表7K选择从命令行中指定的csv文件的一个文件作为外部文件;line定义选择的外部文件的起始行,field选择字段filename=把指定的文件中内容全部插入到sip消息中。由于空格符,回车符及换行符不被某些关键字识另L所以插入的文件需要被精确地编辑成你想要的格式才行,否则会有乱码。timestamp当前时间戳,与错误日志的时间戳格式一样last_message上一个收到的消息au

17、thentication用丁认证头(authenticationhead),这个关键字可以使用参数,书写格式为:authenticationusername=myusernamepassword=mypassword,如果没后指定用户名(username),则需使用命令行参数-au或者-s指定;如果没后指定号码(password),则需使用命令行参数-ap指定pid指tesipp的pid,即进程号routes如果在recv命令中已设置rrs属性为true,则Record-Route头被存储在关键子route中,可使用routes调用。next_url如果在recv命令中已设置rrs属性为tru

18、e,则next_url中包含Contact头中的内容branch生成一个由(z9hG4bK)+callnumber+message索引组成的branchid到脚本中。如果你想要使用与之前的消息一样的branchid,你可以使用偏移量指定,如branch-Nmsg_index在脚本中提供消息号clock_tick在消息中包含sipp的内部时钟sipp_version在消息中包含sipp的版本fill使用字符填充消息users如果在命令行中指定了-users参数,则这个关键字表示当前已经运行的用户的数量userid如果在命令行中指定了-users参数,则这个关键字表示当前正在运行的用户的id(范围

19、为0到users-1)4.2.变量定义与使用sipp的脚本中,支持双精度浮点型变量和字符串变量两种变量类型.5 .浮点型变量针对浮点型变量的操作命令主要有assgin(赋值)、sample(统计分布)和todouble(强制类型转换),以及加减乘除等简单算术运算,举例如下:浮点型变量还支持变量比较测试功能,该部分在分支一节中会重点描述。6 .字符串变量可以使用命令&建字符串变量,该命令有两个参数“assign_tO不口“value,例如:字符串变量支持比较操作,命令为,其对字符串比较的值是一个小于,等于,或大于0的双精度整型值。通常该功能用在对正则表达式提取结果的操作,以及从外部文件获取值的操

20、作中,例如:4.3.鉴权在sipp的关键字和变量使用中,有一类特殊的变量需要重点说明,那就是鉴权。sipp支持标准的Digest和AKA两种鉴权方法。具体的使用方法如下:1.在接收到401或407响应时,如果该流程需要鉴权,则需要在recv命令中增加属性auth=true,sipp会记录该消息中鉴权头域的相关值。2.3.随后在发送的第二条请求消息中,使用authentication关键字,指定用户名及密码(Digest方式)或aka_K、aka_OP、aka_AMF(AKA),sipp将自动计算出response并构造相关头域内容。例如:还可以通过在外部文件中某一列,配置authenticat

21、ionusername=1001password=1001J然后在消息中使用fieldN弓I用,来实现不同用户的鉴权过程。4. sipp脚本中还支持对鉴权的response吉果进行校验,该操作使用verifyauth命令来完成,并将检查结果赋值给一个布尔变量中。例如:5. 分支和跳转5.1. 标签sipp脚本支持自定义标签操作,因此可以通过next、jump等命令,实现对流程逻辑的分支和跳转功能,类似C语言中的goto。标签的定义语法格式如下:其中id属性值为该标签的标识,可以通过next属性进行标签之间的跳转,例如:在例子中,recv命令使用了next,即如果收到了486响应,则直接跳转至i

22、d为err_ack的label处。sipp支持通过变量测试,来进行某些条件的判断,继而执行相关的操作,类似于开发语言中的if-else语法,变量测试的动作命令为“test”,含有四个参数:variable,value,assign_to,compare。variable和value的比较的结果,通过assgin_to赋给某一变量,值为1或00compare为比较的操作方法,一共有6种,分别为:equalnot_equalgreater_thanless_thangreater_than_equalless_than_equal举例如下:上述语句中,变量st与10进行比较,如果小于10,则res

23、ult=1,否则result=0。5.3. 跳转和循环sipp脚本的正常执行流程为顺序依次执行相关语句,但是在某些场景下需要非线性地执行,例如收到错误消息,则跳转至错误处理等,就需要用到分支功能。结合上文内容可知,sipp的分支功能时通过标签和跳转命令来实现的。在任意一个动作命令之后添加一个next=”label_id”的参数,当脚本执行完这个动作后就会跳到指定标号处继续往下执行,另外,如果在next参数后再添加一个test=m参数,脚本仅在变量$m为真时才会跳到指定标号,这个特性结合条件判断,可以用来实现某些特殊要求。例如:上述例子为注册服务器部分脚本,实现的效果是:当接收到REGISTE就

24、息后,通过正则表达式获取Expires头域的值,并将其与0比较,如果相等,则表示该消息为注销请求,result2=1。nop命令行中,判断如果result2=1,这跳转至deregister标签,进行注销流程的处理。(注:通过正则表达式匹配而获取到的值,均为字符串变量,因此无法直接与数值0进行比较,而是通过strcmp命令进行字符串比较,将此结果赋给result,再对result和0进行二次比较判断,最终获得结果。)5.4. 概率分支为了更加符合真实测试环境的业务流程,sipp还提供了概率分支功能,即通过在next属性后,增加chance属性,并配置0-1之间的数值,模拟几率跳转分支动作。例如

25、:当sipp脚本执行到该段时,有50%的几率会跳转至401标签处,紧接着会有30%勺几率跳转至ENDS签。(注:1. 由于chance属性必须与test配对使用,因此如果不需判断直接跳转,可以配置test=”1”,类似于ifTrue,即始终执行。2. 配置chance时必须注意,该值仅为当前所有会话的几率,即如例子中配置的数值,则会有50%的会话跳转至401标签,15%的会话跳转至ENDS签,65%勺会话顺序线性执行。)6. 文件引用6.1. 外部文件格式sipp脚本支持通过引用外部文件的方式,导入变量内容以供使用。外部文件的后缀名为.csv或.conf,可以在命令行使用“-inf文件名”参数

26、来引入变量到脚本中。文件的第一行须中明变量的读取方式是顺序读取(SEQUENTIAL还是随机读取(RANDQM还是基于用户的方式读取(USER。每一行对应一个呼叫,使用“;”分隔符分隔每一项数据,分开的项在脚本中作为变量名filed0,field1,?fieldn来引用。例如:SEQUENTIALSarah;sipphone32Bob;sipphone12Fred;sipphone94该文件中的行会被按顺序读取,第一个呼叫第一行,第二个呼叫第二行。在脚本中的任何地方只要出现了关键词field0,根据第几个呼叫决定,这个关键词就会被替换为Sarah或者Bob或者Fred,field1也是类似。如

27、果达到了文件末尾则再重新开始,一直循环,文件的大小没有限制。在实际使用中,也可以使用参数使得不从第一行开始,例如从第二行开始:field0line=1另外,还可以使用不止一个外部文件来引入变量,这在测试一些场景是很有用的,比如要做一个测试主叫号码是按顺序的但是被叫是随机的时候,就可以用一个第一行为顺序的文件和一个第一行为随机的文件来实现了。例如:INVITEsip:field0file=SIP/From:sippuser;tag=pidSIPpTag00call_numberTo:sutuser由于在数据较多时,编辑和使用均不方便,sipp还支持对外部文件的格式化定义,然后在程序中自动根据规则

28、生成相应的数据。(该部分内容较多,详见sipp使用手册)6.2. 引用方法sipp脚本中使用外部文件,常见的场景有两种:1. 利用外部文件引入field变量,构造相应的发送消息体例如在主叫用户的脚本中,可以通过引用文件中的field0、fieldl,分别对应主叫号码和被叫号码,构造From头域和To头域。2.通过查找外部文件,获取对应的行号,随后进行相关处理例如,在针对不同的被叫号码,进行用户忙、无响应、前转等业务时,可以通过事先配置文件,在其中针对不同被叫号码,分别设置若干列,对应不同的值,并在被叫用户的脚本中,使用正则表达式获取到被叫号码,再使用lookup命令查询文件,匹配当前用户号码处于第几行,并读取改行的field1的值,然后通过变量测试,跳转不同的处理分支。6.3.文件索引在针对外部文件进行查找命令时,必须先对该文件生成索引,具体方法为再执行sipp脚本的命令中,使用-infindex参数对引入的文件生成索引,参数值为该文件的文件名,如:-infindex0。注:在通常情况下,文件的索引值均设置为从0开始。7. 脚本中的命令操作7.1. 内部命令sipp脚本支持的内部命令,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论