




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SPIDER语法基础培训SPIDER语法基础培训课程目标学习本课程后,您将能够:了解SPIDER约束符号怎么使用。了解SPIDER的PCO的基本特征。了解SPIDER常用的AW怎么使用。了解SPIDER逻辑结构和逻辑语法。了解SPIDER测试用例的结构和语法。了解什么是复合逻辑,什么是RunLogic。了解用例的执行顺序怎么控制。课程目标学习本课程后,您将能够:目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾SPIDER基本概念PCO:程序控制对象。可以将PCO理解为模拟对象的代表。如SIP/MML/Diameter等。AW:ActionWord,关键字。AW体现为某个PCO对象的一个或一组动作,如摘机、拨号等。Logic逻辑:通过一个或者多个PCO的AW组合完成的业务或功能的抽象过程。TESTCASE测试用例:把已配置的PCO以及具体的测试数据作为参数传递给逻辑,然后按照一定的顺序把各个逻辑组织起来的结构。下面以打印操作为例把各个概念串起来。SPIDER基本概念PCO:程序控制对象。可以将PCO理解为SPIDER用例编写实例
第一步:这个打印动作谁来执行?定义一个PCO,取名为test。SPIDER用例编写实例第一步:这个打印动作谁来执行?SPIDER用例编写实例
第二步:确定AW打印是一个动作,SPIDER为它提供专门的方法:Print(注:Print只携带一个参数)第三步:编写逻辑实现打印LogictestPrint{PCOcontent}{PCO{
"%content%"}}Logic晋级写完后以*.logic命名保存在:…GTR\BIN\lib\SPIDERV3\Userfiles\LogicSPIDER用例编写实例第二步:确定AW打印是一个动作SPIDER用例编写实例
第四步:编写用例执行打印packagerequireSPIDERTESTCASE{Information{CaseID"test_print_001"CaseName"测试打印输出结果"Level"Level1"}
Procedure-S{
testPrint{%test%"WelcometoSPIDER!"}}}第一步定义的PCO第三步定义的逻辑每个用例的具体测试数据SPIDER用例编写实例第四步:编写用例执行打印packa察看执行结果
执行成功Output输出窗口LogManager察看执行结果执行成功Output输出窗口LogManag目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾SPIDER符号约束:分隔符分割符:SPIDER中的分割符有:空格,Tab,回车换行。空格:单词之间,单词与符号之间用空格分开。Tab:主要用于缩进(建议用四个空格代替Tab进行缩进)。回车换行:各个AW操作之间,AW操作列表之间,等等,用回车换行符进行分割。注意:SPIDER语法是严格区分大小写的。SPIDER符号约束:分隔符分割符:SPIDER中的分割符有SPIDER符号约束:分隔符举例
注意:{不能单独换行,这与华为编程规范是有区别的^-^。RecvCRCX{
CHKS==86123456}行之间回车空格分开各个单词,以及单词与符号Tab缩进SPIDER符号约束:分隔符举例注意:{不能单独换行,这与SPIDER符号约束:{}大括号{}用于将多个空格、Tab或是回车分隔的单词绑定为一个整体来处理。当{}用作AW或逻辑参数时,{}里面的内容不作任何处理。Print{ThisisBobSpeaking!}括号必须匹配,否则SPIDER会报错当AW参数中含有空格或Tab或回车换行符时,必须加{},否则这个示例中SPIDER当作Print有4个参数,就会报错。SPIDER符号约束:{}大括号{}用于将多个空格、Tab或SPIDER符号约束:""引号""有两个作用一是同{}一样,将含有空格、Tab或是回车分隔的单词绑定为一个整体。二是引号中的特殊符号如[]、\、%%、??,[]等符号的作用不会消失。Print{[GetTel+86-123-456]}Print"[GetTel+86-123-456]"输出[GetTel+86-123-456]输出86123456GetTel是SPIDER提供的一个AW,用来把电话号码中的+、-去掉。SPIDER符号约束:""引号""有两个作用Print{[SPIDER的注释:#和;##:从‘#’开始直到所在行结尾的所有字符都被SPIDER看作注释。;#:如果‘#’不是出现在行首而是紧跟在某些命令行末尾,则用;#作注释。#我是注释Print"Hello,World!";#我是注释{}注释里的内容的{和}必须匹配!良好的编写自动化脚本习惯从注释开始!SPIDER的注释:#和;##:从‘#’开始直到所在行结尾的SPIDER符号约束:[]SPIDER中的中括号[]是用来执行命令的,[]里的内容必须是SPIDER识别的完整AW(大多在SPIDERAW手册Public下面定义的AW),该AW需要要有返回值,[]一般用作AW的某个参数或参数的某一部份。RecvCRCX{
CHKS==[GetTel+86-123-456]}Print[GetCaseID]执行GetTel命令执行GetCaseID命令SPIDER符号约束:[]SPIDER中的中括号[]是用来执SPIDER符号约束:%%SPIDER采用%%来区分所有的PCO以及PCO的属性。LogicTest_Register{S2P{User%UE2P%
}}{S2P{
AssociateUser%User%……
};#ENDS2P}Print{%MACRO.PeerIP%
}SPIDER遇到%%就会去匹配它里面的内容是否为PCO或者PCO的某个属性,否则会报错逻辑体引用逻辑形参时也需要用%%,数据池也会用到%%SPIDER符号约束:%%SPIDER采用%%来区分所有的PSPIDER符号约束:??SPIDER允许用户自己定义变量,自己定义的变量必须通过??加以保护和区别。RegisteUserVariable{time20071115}Print"?time?"SPIDER遇到??就会去查找??里面的内容是否为用户自己定义的变量,如果找不到则当作普通字符串处理,或者报告失败先注册用户变量并赋值然后引用用户变量SPIDER符号约束:??SPIDER允许用户自己定义变量,目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾PCO的必备属性SPIER中PCO的两个必备属性PCO的类型,也就是协议类型,如SIP、MML、SS7PCO的名字,如Caller、CalleePCO的必备属性SPIER中PCO的两个必备属性PCO的类PCO的可选属性PCO的属性值PCO的属性值,如话机分为手机,固定电话;手机又有电话号码,主叫显示号码等特征,这些都通过PCO的属性值来表示。PCO的可选属性PCO的属性值PCO的属性值,如话机分为手机PCO的引用逻辑、测试用例引用PCO时,必须加上%%packagerequireSPIDERTESTCASE{…………Procedure-S{testPrint{%test%"WelcometoSPIDER!"}}}%%不可少PCO的引用逻辑、测试用例引用PCO时,必须加上%%pack宏宏用来定义一个变量,一般这个变量用在PCO需要引用某个变量时的场景。可以把宏理解为全局变量,对于那些依赖于环境的常用数据可以定义为宏:宏定义在Macro下宏宏用来定义一个变量,一般这个变量用在PCO需要引用某个变量宏:PCO引用宏举例
宏可以应用于逻辑,测试用例或者PCO本身,但是宏不能彼此嵌套。我们建议在测试用例或者逻辑中不要引用宏。引用宏宏:PCO引用宏举例宏可以应用于逻辑,测试用例或者PCO本自定义用户数据用户可以根据需要来定义自己经常用到的数据,并进行分类管理。例如各种电话号码的定义。自定义数据只能用在测试逻辑和测试用例中。自定义用户数据定义在Group的某个群组下自定义数据只能用在逻辑和测试用例中自定义用户数据用户可以根据需要来定义自己经常用到的数据,并进自定义用户数据在测试用例中应用举例
测试用例和测试逻辑引用自定义用户数据时同样需要加%%。SendInvite%TelNum.InternationalNum%;#Dial+86-755-12345678自定义用户数据在测试用例中应用举例测试用例和测试逻辑引用自目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾常用AW介绍SendXXXRecvXXX发送xxx消息接收xxx消息常用AW介绍SendXXX发送xxx消息接收xxx消息常用AW:SendXXX功能:SendXXX发送XXX消息,通常该AW由协议开发者提供,XXX表示消息名称,即Send+消息名称(注:通常消息名称的第一个字母大写)。以H248的ReqNotify消息为例,即SendReqNotify。常用AW:SendXXX功能:SendXXX发送XXX消息,常用AW:SendXXX格式:SendXXX
OperationList
SwitchPara没有规矩不成方圆常用AW:SendXXX没有规矩常用AW:SendXXX参数说明:OperationList对发送的消息作进一步的操作的列表,支持如MOD,ADD,RMV等操作符,是可选的。通用的消息都可以通过OperationList操作达到测试目的。利用这些操作符,各种消息都可以构造{不可少,{前面要留一个空格且要与}匹配回车换行符分割各个操作列表常用AW:SendXXX参数说明:利用这些操作符,各种消息都常用AW:SendXXX参数说明:SwitchPara开关参数,可选。SendReqNotify{}-savemsgtempReqMsg所有开关参数都是可选的,且没有先后顺序常见的开关参数:-savemsg(保存发送的消息)形式:-savemsgvalue常用AW:SendXXX参数说明:SendReqNotifySendXXX举例
发送H248的ReqNotify消息:SendReqNotify{ADDTransaction.Context.Notify.Eventsal/riADDT.C.N.Eal/*GETT.C.N.E(end)TCN}-savemsgtempReqMsg发送SIP的Invite消息:SendInvite123456789@SendXXX举例发送H248的ReqNotify消息:发常用AW:RecvXXX功能:必须有消息到达后,SPIDER才能接收到消息,也就是说,接收消息是被动的,它是有时序的AW,必须先有SendXXX发送消息或者被测环境发送消息给SPIDER,才能使用RecvXXX。RecvXXX接收XXX消息,通常该AW由协议开发者提供,XXX表示消息名称,即Recv+消息名称,和SendXXX一一对应。以H248的ReqNotify消息为例,即RecvReqNotify。常用AW:RecvXXX功能:必须有消息到达后,SPIDER常用AW:RecvXXX格式:RecvXXX
OperationList
SwitchPara没有规矩不成方圆常用AW:RecvXXX没有规矩常用AW:RecvXXX参数说明:OperationList对接收的消息进行检查,支持如CHK,ABS,EXT,TFT等消息检测符,是可选的,所有的消息的检测都是通过OperationList的检测条件来达到测试目的。有了这些符号,就可以对接收的消息进行各种检查{不可少,{前面要留一个空格且要与}匹配回车换行符分割各个操作列表常用AW:RecvXXX参数说明:有了这些符号,就可以对接收常用AW:RecvXXX参数说明:SwitchPara开关参数,可选。RecvReqNotify{}-recvmodepeek-savemsgtempReqMsg所有开关参数都是可选的,且没有先后顺序常见的开关参数:-savemsg(保存接收的消息),-recvmode(消息接收模式),-seek(接收消息的过滤条件)形式:-savemsgvalue常用AW:RecvXXX参数说明:RecvReqNotifyRecvXXX举例
接收H248的ReqNotify消息:RecvReqNotify{CHKTransaction.Context.Notify.Events==al/riCHKT.C.N.E==al/*GETT.C.N.E(end)TCN}-savemsgrecvtempNotify接收SIP的Invite消息:RecvInvite{EXTTo.tagCHKViaINCLUDE"4:5070"}RecvXXX举例接收H248的ReqNotify消息:目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾Logic的基本结构
LogicLogicName{PCO1PCO2…OthParams…}{PCO1{AW1%OthParams%OtherAWList}PCO2{AWList}...}关键字逻辑名PCO形参,至少要有一个逻辑的其他形参,视情况可选,0个或多个PCO和AW组合,并形成一定的测试流程整个Logic里的内容叫:逻辑体{、}也是逻辑结构的一部分^-^Logic的基本结构LogicLogicName{P逻辑Logic语法说明
Logic:必须以Logic为关键字,SPIDER严格区分大小写LogicName:逻辑名必须唯一PCO1PCO2…:必须至少包含一个PCO形参,没有上限OthParams…:根据具体测试流程可以有0或多个只有用例调用了Logic,Logic才能执行逻辑Logic语法说明Logic:必须以Logic为关键逻辑Logic语法说明逻辑体:逻辑的整个内容,由1个或多个过程块组成各个控制块之间是并行执行的顺序过程块内的AWList可以为空,过程块里的AW串行执行逻辑以.logic为后缀进行命名保存,逻辑文件命名以字母下划线开头,且只能含有字母、下划线、数字,默认保存路径:…GTR\BIN\lib\SPIDERV3\Userfiles\Logic,可以是多层次的文件夹,一个逻辑文件中可以包含多个Logic结构逻辑Logic语法说明逻辑体:逻辑的整个内容,由1个或多个过逻辑Logic的参数:逻辑体引用形参形参可以有多个,各个参数之间空格分开LogictestPrint{printPco{content123456}}{
printPco{
Print"%content%"
}}这里的PCO形参不需要加%%,SPIDER自己去识别逻辑体引用形参时需要加%%逻辑Logic的参数:逻辑体引用形参形参可以有多个,各个参数逻辑Logic的参数:默认值
参数可以给出默认值LogictestPrint{printPco{content123456}}{
printPco{
Print"%content%"
}}用例中如下调用:testPrint{%test%}用例中如下调用:testPrint{%test%Welcome!}用{}把形参名和默认值绑定打印Welcome!用例在调用该逻辑时就可以省掉默认参数,则打印123456逻辑Logic的参数:默认值参数可以给出默认值Logic逻辑Logic的参数:默认值带有空格
默认值允许含有空格、Tab等符号,必须加{}或“”用以保护LogictestPrint{printPco{Content{HelloSPIDER!}}}{
printPco{
Print"%Content%"
}}用{}或""把含空格的默认值加以保护逻辑体引用含空格的参数时要加{}或""加以保护,否则SPIDER以为Print后面跟了2个参数,就会报错逻辑Logic的参数:默认值带有空格默认值允许含有空格、T逻辑Logic的参数:形参的默认值是PCO
LogicTest_PCSCF_Register{UE2PS2P{User%UE2P%}}{
S2P{
AssociateUser%User%
RecvRegister
SendRegister401
RecvRegister
SendRegister200
};#ENDS2P}引用形参形参默认值是PCO,只能作为AW参数,不能作为PCO来使用逻辑Logic的参数:形参的默认值是PCOLogicT逻辑Logic的参数:形参的默认值是PCO的属性值
LogictestPrint{printPco{content%CalleeMobile.TeleNumber%}}{
printPco{
Print"%content%"
}}用例中如下调用:testPrint{%test%}或用例中如下调用:testPrint{%test%12345678}打印名叫CalleeMobile的PCO的TeleNumber属性值逻辑Logic的参数:形参的默认值是PCO的属性值Logi逻辑Logic的参数:默认值形参的位置带默认值的参数位于参数列表的末尾LogictestPrint{printPcocontent1{content2Welcome!}}{
printPco{
Print"%content1%"Print"%content2%"
}}用例中如下调用:testPrint{%test%123456}123456传给了content1,content2则使用默认值Welcome!逻辑Logic的参数:默认值形参的位置带默认值的参数位于参数逻辑Logic的参数:默认值形参的位置带默认值的参数不位于参数列表的末尾,可能会报错!LogictestPrint{printPco{content2Welcome!}content1}{
printPco{
Print"%content1%"Print"%content2%"
}}用例中如下调用:testPrint{%test%123456}123456传给了content2,而content1的内容为空,执行用例时SPIDER会报错逻辑Logic的参数:默认值形参的位置带默认值的参数不位于参逻辑的参数异常灵活
定义如下一个逻辑LogicCONFIG_MMLExec{PcoNameNETypeCmdNameCmdArgs
{RetCodeArgs
0}}{
PcoName{
SetNe%NEType%
EXEC_MML"%CmdName%"{%CmdArgs%}""
%RetCodeArgs%
}}含有默认值0逻辑的参数异常灵活定义如下一个逻辑LogicCONFIG逻辑的参数异常灵活
CONFIG_MMLExec
{%OMU_MML%"%ENV1.SCSCFID%""MODSCSCF"{"S-CSCFID"
"0""Defaultforkpolicy""Noforking"
}}用例中如下调用该逻辑:{}保护所有橙色字体的部分(不管里面是否有引号,空格,回车等符号),当作一个参数,赋值给CmdArgs,固定了参数的个数。另外,实际只传了4个参数,RetCodeArgs没有被赋值,使用默认值逻辑的参数异常灵活CONFIG_MMLExec
{%O逻辑的参数异常灵活
CONFIG_MMLExec
{%OMU_MML%"%ENV1.SCSCFID%""MODSCSCF"{"S-CSCFID"
"0""Defaultforkpolicy""Noforking"
…………}
{01000}}用例中如下调用该逻辑:{}保护所有橙色字体的部分,使得CmdArgs可以在脚本中得到自由的控制红色字体赋值给RetCodeArgs,{}把0和1000当作一个参数逻辑的参数异常灵活CONFIG_MMLExec
{%O逻辑中默认参数太多逻辑中的有默认值的形参个数多个LogicDemo{PCO{p11}{p22}{p33}{p44}}{
PCO{Print
"%p1%
%p2%%p3%%p4%"
#dosth...
}}现在用户只希望修改p3的值,在用例中怎么调用该逻辑?逻辑中默认参数太多逻辑中的有默认值的形参个数多个Logic@default,-params方法1:记住所有的默认值参数方法2:@default派上用场Demo{%RealPCO%12100}Demo{%RealPCO%@default@default100}@default,-params方法1:记住所有的默认值@default,-params方法3:用-params修改默认值,-params开关使用更为方便,同时显示也更直观Demo{
%RealPco%}–params{
P3100}@default,-params方法3:用-params修@default,-params扩充现在用户希望修改p2,p3的值分别为200,300
Demo{%RealPCO%1200300}Demo{%RealPCO%}-params{p2200
p3300}方法1:记住所有的默认参数值方法3:-paramsDemo{%RealPCO%@default200300}方法2:记住默认参数的个数,用@default
@default,-params扩充现在用户希望修改p2,p逻辑Logic晋级总结逻辑的格式逻辑的形参逻辑的逻辑体……高级Logic逻辑Logic晋级总结逻辑的格式高级Logic目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾TESTCASE基本结构
packagerequireSPIDER
TESTCASE{Information{CaseID“测试用例编号”CaseName“测试用例的名字”Level“用例级别”}IncludeID{“关联的用例ID”}
Procedure-S{LogicName1{%pco%其他参数}LogicName2{%pco%其他参数}}}必须先申明是SPIDER测试用例TESTCASE基本结构packagerequire测试用例TESTCASE结构说明执行体可以有多个,如常用的Procedure、Precondition,Postcondition,书写顺序可以无关,必须包含其中的某一个。必须包含有Information信息体,有且只有一个测试用例的关键字入口为TESTCASE在同一个TESTCASE中,不能重复定义执行体Procedure、Precondition,Postcondition。TESTCASE包括信息体和执行体测试用例TESTCASE结构说明执行体可以有多个,如常用的P信息体Information信息体Information用来描述一个测试用例TESTCASE的关键信息Information{CaseID"用例ID"CaseName"用例名称"Level"用例的级别"other"其他描述信息"}这2个必须有CaseID、CaseName便于产生日志、上传日志,其内容可以为空,用引号""把内容加以保护其他信息根据测试需要可选。信息体Information信息体Information用来信息体IncludeID信息体IncludeID用来描述与本测试用例的关联的其他用例的编号IncludeID{"BF-ReREG-S01-003_001""BF-ReREG-S01-003_002""BF-ReREG-S01-003_004"}多个关联CaseID以回车换行符分割各个CaseID如果有空格要加{}或""加以保护整个IncludeID信息体是可选的信息体IncludeID信息体IncludeID用来描述与CaseID和IncludeID的区别
简单的说,CaseID为每个测试脚本编号,一定是唯一的,通常以TP开头,即测试规程的编号。但是每一个测试脚本可能包含有多个测试点,每个测试点在测试用例方案设计时都有对应文字描述并被赋予了有特定含义的编号,通常以TC开头,即测试用例编号,放在IncludeID部分。例如:CaseID和IncludeID的区别简单的说,CaseICaseID和IncludeID的区别SPIDER通过脚本中的CaseID和IncludeID把脚本执行的结果自动(必须启动上传功能)上传到GT3000。只有脚本执行PASS,GT3000上的用例才记为PASS;否则当脚本执行失败后,上例中对应的CaseID编号(TP_SS7_01_006)的测试规程以及IncludeID里包含的所有编号(TC_FUN_SS7_001_001,TC_FUN_SS7_001_002)的用例都记为Fail。CaseID和IncludeID的区别SPIDER通过脚本中信息体DataPool信息体DataPool也是用例的可选部分,中文名叫数据池,顾名思义,定义数据的集合。也可用它来定义用户自己的变量。DataPool{
VarName{Value1Value2}}这些变量可以是普通的字符串,可以是PCO,或者PCO的某个属性,可以是逻辑信息体DataPool信息体DataPool也是用例的可选部执行体Procedure执行体Procedure是测试用例真正执行的内容,它由具体的测试数据和逻辑组成
Procedure-S{PhoneSpeaking{%Bob%%David%}PhoneSpeaking{%xiaowang%%xiaozhang%}}已定义的逻辑,可以有多个,回车换行符分割的语句。实际配置的PCO参数过程中的内容顺序执行(-S/-Serial)还是并行(-P/-Parallel)执行执行体Procedure执行体Procedure是测试用例真执行体PreconditionPrecondition用来对测试环境做准备。如用户必须先注册,后续才能打电话。Precondition和Precedure的结构一样:Precondition-S{Register{%Bob%}Register{%David%}Register{%xiaowang%}Register{%xiaozhang%}}Precondition和Precedure的区别在于当他们二者同时存在时,先执行Precondition的内容,然后执行Precedure。执行体PreconditionPrecondition用来对执行体PostconditionPostcondition用来对测试环境做恢复。如用户注册之后必须注销恢复环境,以免下次执行用例时重复执行注册而失败。结构同Precedure,如下:Postcondition-S{Deregister{%Bob%}Deregister{%David%}Deregister{%xiaozhang%}Deregister{%xiaowang%}}调用逻辑执行体PostconditionPostcondition用Precondition、Precedure和Postcondition的执行顺序
脚本编写时,Precondition、Precedure和Postcondition的顺序没有要求,但是严格按照Precondition、Precedure、Postcondition顺序执行。建议书写顺序是:Precondition、Precedure然后Postcondition,增加脚本可读性。Precondition、Precedure和Postcon语法总结AWInPCO(AW包含在PCO里面)PCO+AW=过程块Logic=过程块+过程块+……过程块(一个或多个)TestCase=信息体+执行体执行体=(Logic+测试数据)+(Logic+测试数据)+……+(Logic+测试数据)(一个或多个)……语法总结AWInPCO(AW包含在PCO里面)问题用例的执行先后顺序怎么控制?简单的测试用例写法?逻辑可以调用逻辑吗?……问题用例的执行先后顺序怎么控制?用例TESTCASE中的结构体Serial/ParallelDataPoolRunLogic……MORE…用例TESTCASE中的结构体Serial/ParallelSerial/Parallel场景描述当测试场景越来越复杂,简单的用例串、并执行关系不能满足测试需要时怎么办?例如:我们需要测试一个遇忙前转业务,主叫用户A呼叫被叫用户B,B无应答前转到C,C无应答前转到D,D接听电话。Serial/Parallel场景描述当测试场景越来越复杂,测试语言描述测试流程图主叫A呼叫被叫BCaller_NormalCall被叫B前转给CCallee_TransferCall被叫C前转给DCallee_TransferCall被叫D接听电话Callee_NormalCall测试语言描述测试流程图主叫A呼叫被叫B被叫B前转给C被叫C前SPIDER解决办法
Procedure–P{
Caller_NormalCall{%A%}
Serial{
Callee_TransferCall{%B%}
Callee_TransferCall{%C%}
Callee_NormalCall{%D%}
}}A与B、C、D同时做这些操作B、C、D按照顺序来做这些操作SPIDER解决办法
Procedure–P{A与BSerial/Parallel结构Serial/Parallel是SPIDER的执行顺序控制结构,用以保证它里面的内容按照约定的顺序来执行。Serial和Parallel只有执行的顺序不同,没有其他区别Serial/Parallel结构Serial/ParallSerial/Parallel使用说明
Serial/Parallel可以在用例执行体中任何可以出现逻辑的地方出现Serial/Parallel中可以出现任何用例结构体Serial里面的内容按顺序执行,而Parallel中的内容同时执行,由SPIDER来控制时序。Serial/Parallel根据测试需要,可以彼此嵌套,并可以无限的嵌套。Serial/Parallel使用说明Serial/Pa应用场景
经常遇到很简单的测试用例,就一个打印的输出,或者用例很特殊,没有重用的价值,也必须得封装逻辑Logic然后用例调用逻辑才能执行吗?应用场景经常遇到很简单的测试用例,就一个打印的输出,或者用解决方法
封装逻辑Logic不是必须的,对于一些特殊的应用场景,可以用RunLogic来直接执行AW,但是我们提倡都封装成逻辑,便于重用,也便于统一管理。RunLogic跟逻辑结构形式上很类似,下面来具体介绍。解决方法封装逻辑Logic不是必须的,对于一些特殊的应用场RunLogic结构
RunLogic{RealPCO_1{AWList}
RealPCO_2{AWList}
……RealPCO_n{AWList}}必须是PCO实例,即已经配置了的PCO名字N建议小于3,否则封装成逻辑RunLogic结构RunLogic{必须是PCO实例,RunLogic的位置
packagerequireSPIDERTESTCASE{Information{CaseID“001"CaseName"简单测试"Level"Level3"}
Procedure-S{
RunLogic{ test{ Print"Justforatest!"};#endtest};#endRunLogic};#endProcedure}复合逻辑中也可以有RunLogic出现在用例中逻辑可以出现的地方,PCO参数是PCO实例这里的括号注意匹配☺RunLogic的位置packagerequireSP应用场景
学习了逻辑的概念和逻辑的结构,其实从某种程度上来说,逻辑是一个函数。我们知道,函数是可以调用另一个函数的,那么有一个疑问,逻辑中也可以引用其他已定义的逻辑吗?可以。为了适应更多的测试场景以及更充分的重用逻辑,逻辑是可以调用另一个逻辑的,不过,我们不再简单的叫逻辑,而是叫:复合逻辑。我们把那种可以包含其他逻辑的逻辑叫复合逻辑应用场景学习了逻辑的概念和逻辑的结构,其实从某种程度上来说复合逻辑结构
复合逻辑结构形式上和普通逻辑结构一样复合逻辑结构复合逻辑结构形式上和普通逻辑结构一样复合逻辑使用说明
SPIDER使用Join和Combine来定义复合逻辑
Join定义的复合逻辑表示逻辑体内容按照顺序执行;而Combine定义的复合逻辑,其逻辑体里的内容是同时执行的复合逻辑中逻辑体是由各个逻辑组成的,可以是逻辑(包括复合逻辑),RunLogic,Serial/Parallel等用例结构体复合逻辑的位置:用例中,凡是可以出现普通逻辑的地方,就可以出现复合逻辑
复合逻辑使用说明SPIDER使用Join和Combine来复合逻辑应用假设有如下一个测试场景,被测设备为HSS复合逻辑应用假设有如下一个测试场景,被测设备为HSS复合逻辑应用
LogicTestLogic1{PCOI}{PCOI{SENDUARRECVUAA}}LogicTestLogic2{PCO1PCO2}{PCO1{SENDREGISTERRECV200}PCO2{RECVREGISTERSEND200}}第一步第二步复合逻辑应用LogicTestLogic1{PCOI复合逻辑应用
JoinTest_REELTEST{ICSCF
SCSCF}{TestLogic1{%ICSCF%}TestLogic2{%ICSCF%
%SCSCF%}}第三步逻辑参数必须来自复合逻辑的形参列表复合逻辑应用JoinTest_REELTEST{IC复合逻辑应用
packagerequireSPIDERTESTCASE{...;#用例其他信息Procedure-S{ ...;#其他逻辑 Test_REELTEST{%ICSCF%%SCSCF%} ...;#其他逻辑}}第四步可以保证发送REGISTER一定在UAR/UAA处理完成才开始进行。复合逻辑应用packagerequireSPIDER第复合逻辑里定义RunLogic
CombineRunLogicInCombine{PCOName}{;#…..RunLogic{
%PCOName%{
Print"RunLogic可以出现在复合逻辑中,不过注意PCO参数两边需要加%%"}};#….}%%不可少,这和普通逻辑是有区别的。可以把RunLogic看作是一种特殊的逻辑(一次性的,临时性的),PCOName在此也就是普通RunLogic的一个参数而已,但这个参数必须来自复合逻辑的形参列表。复合逻辑里定义RunLogicCombineRunLog有什么疑问吗?有什么疑问吗?ThankYou!ThankYou!演讲完毕,谢谢观看!演讲完毕,谢谢观看!SPIDER语法基础培训SPIDER语法基础培训课程目标学习本课程后,您将能够:了解SPIDER约束符号怎么使用。了解SPIDER的PCO的基本特征。了解SPIDER常用的AW怎么使用。了解SPIDER逻辑结构和逻辑语法。了解SPIDER测试用例的结构和语法。了解什么是复合逻辑,什么是RunLogic。了解用例的执行顺序怎么控制。课程目标学习本课程后,您将能够:目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾SPIDER基本概念PCO:程序控制对象。可以将PCO理解为模拟对象的代表。如SIP/MML/Diameter等。AW:ActionWord,关键字。AW体现为某个PCO对象的一个或一组动作,如摘机、拨号等。Logic逻辑:通过一个或者多个PCO的AW组合完成的业务或功能的抽象过程。TESTCASE测试用例:把已配置的PCO以及具体的测试数据作为参数传递给逻辑,然后按照一定的顺序把各个逻辑组织起来的结构。下面以打印操作为例把各个概念串起来。SPIDER基本概念PCO:程序控制对象。可以将PCO理解为SPIDER用例编写实例
第一步:这个打印动作谁来执行?定义一个PCO,取名为test。SPIDER用例编写实例第一步:这个打印动作谁来执行?SPIDER用例编写实例
第二步:确定AW打印是一个动作,SPIDER为它提供专门的方法:Print(注:Print只携带一个参数)第三步:编写逻辑实现打印LogictestPrint{PCOcontent}{PCO{
"%content%"}}Logic晋级写完后以*.logic命名保存在:…GTR\BIN\lib\SPIDERV3\Userfiles\LogicSPIDER用例编写实例第二步:确定AW打印是一个动作SPIDER用例编写实例
第四步:编写用例执行打印packagerequireSPIDERTESTCASE{Information{CaseID"test_print_001"CaseName"测试打印输出结果"Level"Level1"}
Procedure-S{
testPrint{%test%"WelcometoSPIDER!"}}}第一步定义的PCO第三步定义的逻辑每个用例的具体测试数据SPIDER用例编写实例第四步:编写用例执行打印packa察看执行结果
执行成功Output输出窗口LogManager察看执行结果执行成功Output输出窗口LogManag目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾SPIDER符号约束:分隔符分割符:SPIDER中的分割符有:空格,Tab,回车换行。空格:单词之间,单词与符号之间用空格分开。Tab:主要用于缩进(建议用四个空格代替Tab进行缩进)。回车换行:各个AW操作之间,AW操作列表之间,等等,用回车换行符进行分割。注意:SPIDER语法是严格区分大小写的。SPIDER符号约束:分隔符分割符:SPIDER中的分割符有SPIDER符号约束:分隔符举例
注意:{不能单独换行,这与华为编程规范是有区别的^-^。RecvCRCX{
CHKS==86123456}行之间回车空格分开各个单词,以及单词与符号Tab缩进SPIDER符号约束:分隔符举例注意:{不能单独换行,这与SPIDER符号约束:{}大括号{}用于将多个空格、Tab或是回车分隔的单词绑定为一个整体来处理。当{}用作AW或逻辑参数时,{}里面的内容不作任何处理。Print{ThisisBobSpeaking!}括号必须匹配,否则SPIDER会报错当AW参数中含有空格或Tab或回车换行符时,必须加{},否则这个示例中SPIDER当作Print有4个参数,就会报错。SPIDER符号约束:{}大括号{}用于将多个空格、Tab或SPIDER符号约束:""引号""有两个作用一是同{}一样,将含有空格、Tab或是回车分隔的单词绑定为一个整体。二是引号中的特殊符号如[]、\、%%、??,[]等符号的作用不会消失。Print{[GetTel+86-123-456]}Print"[GetTel+86-123-456]"输出[GetTel+86-123-456]输出86123456GetTel是SPIDER提供的一个AW,用来把电话号码中的+、-去掉。SPIDER符号约束:""引号""有两个作用Print{[SPIDER的注释:#和;##:从‘#’开始直到所在行结尾的所有字符都被SPIDER看作注释。;#:如果‘#’不是出现在行首而是紧跟在某些命令行末尾,则用;#作注释。#我是注释Print"Hello,World!";#我是注释{}注释里的内容的{和}必须匹配!良好的编写自动化脚本习惯从注释开始!SPIDER的注释:#和;##:从‘#’开始直到所在行结尾的SPIDER符号约束:[]SPIDER中的中括号[]是用来执行命令的,[]里的内容必须是SPIDER识别的完整AW(大多在SPIDERAW手册Public下面定义的AW),该AW需要要有返回值,[]一般用作AW的某个参数或参数的某一部份。RecvCRCX{
CHKS==[GetTel+86-123-456]}Print[GetCaseID]执行GetTel命令执行GetCaseID命令SPIDER符号约束:[]SPIDER中的中括号[]是用来执SPIDER符号约束:%%SPIDER采用%%来区分所有的PCO以及PCO的属性。LogicTest_Register{S2P{User%UE2P%
}}{S2P{
AssociateUser%User%……
};#ENDS2P}Print{%MACRO.PeerIP%
}SPIDER遇到%%就会去匹配它里面的内容是否为PCO或者PCO的某个属性,否则会报错逻辑体引用逻辑形参时也需要用%%,数据池也会用到%%SPIDER符号约束:%%SPIDER采用%%来区分所有的PSPIDER符号约束:??SPIDER允许用户自己定义变量,自己定义的变量必须通过??加以保护和区别。RegisteUserVariable{time20071115}Print"?time?"SPIDER遇到??就会去查找??里面的内容是否为用户自己定义的变量,如果找不到则当作普通字符串处理,或者报告失败先注册用户变量并赋值然后引用用户变量SPIDER符号约束:??SPIDER允许用户自己定义变量,目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾PCO的必备属性SPIER中PCO的两个必备属性PCO的类型,也就是协议类型,如SIP、MML、SS7PCO的名字,如Caller、CalleePCO的必备属性SPIER中PCO的两个必备属性PCO的类PCO的可选属性PCO的属性值PCO的属性值,如话机分为手机,固定电话;手机又有电话号码,主叫显示号码等特征,这些都通过PCO的属性值来表示。PCO的可选属性PCO的属性值PCO的属性值,如话机分为手机PCO的引用逻辑、测试用例引用PCO时,必须加上%%packagerequireSPIDERTESTCASE{…………Procedure-S{testPrint{%test%"WelcometoSPIDER!"}}}%%不可少PCO的引用逻辑、测试用例引用PCO时,必须加上%%pack宏宏用来定义一个变量,一般这个变量用在PCO需要引用某个变量时的场景。可以把宏理解为全局变量,对于那些依赖于环境的常用数据可以定义为宏:宏定义在Macro下宏宏用来定义一个变量,一般这个变量用在PCO需要引用某个变量宏:PCO引用宏举例
宏可以应用于逻辑,测试用例或者PCO本身,但是宏不能彼此嵌套。我们建议在测试用例或者逻辑中不要引用宏。引用宏宏:PCO引用宏举例宏可以应用于逻辑,测试用例或者PCO本自定义用户数据用户可以根据需要来定义自己经常用到的数据,并进行分类管理。例如各种电话号码的定义。自定义数据只能用在测试逻辑和测试用例中。自定义用户数据定义在Group的某个群组下自定义数据只能用在逻辑和测试用例中自定义用户数据用户可以根据需要来定义自己经常用到的数据,并进自定义用户数据在测试用例中应用举例
测试用例和测试逻辑引用自定义用户数据时同样需要加%%。SendInvite%TelNum.InternationalNum%;#Dial+86-755-12345678自定义用户数据在测试用例中应用举例测试用例和测试逻辑引用自目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾常用AW介绍SendXXXRecvXXX发送xxx消息接收xxx消息常用AW介绍SendXXX发送xxx消息接收xxx消息常用AW:SendXXX功能:SendXXX发送XXX消息,通常该AW由协议开发者提供,XXX表示消息名称,即Send+消息名称(注:通常消息名称的第一个字母大写)。以H248的ReqNotify消息为例,即SendReqNotify。常用AW:SendXXX功能:SendXXX发送XXX消息,常用AW:SendXXX格式:SendXXX
OperationList
SwitchPara没有规矩不成方圆常用AW:SendXXX没有规矩常用AW:SendXXX参数说明:OperationList对发送的消息作进一步的操作的列表,支持如MOD,ADD,RMV等操作符,是可选的。通用的消息都可以通过OperationList操作达到测试目的。利用这些操作符,各种消息都可以构造{不可少,{前面要留一个空格且要与}匹配回车换行符分割各个操作列表常用AW:SendXXX参数说明:利用这些操作符,各种消息都常用AW:SendXXX参数说明:SwitchPara开关参数,可选。SendReqNotify{}-savemsgtempReqMsg所有开关参数都是可选的,且没有先后顺序常见的开关参数:-savemsg(保存发送的消息)形式:-savemsgvalue常用AW:SendXXX参数说明:SendReqNotifySendXXX举例
发送H248的ReqNotify消息:SendReqNotify{ADDTransaction.Context.Notify.Eventsal/riADDT.C.N.Eal/*GETT.C.N.E(end)TCN}-savemsgtempReqMsg发送SIP的Invite消息:SendInvite123456789@SendXXX举例发送H248的ReqNotify消息:发常用AW:RecvXXX功能:必须有消息到达后,SPIDER才能接收到消息,也就是说,接收消息是被动的,它是有时序的AW,必须先有SendXXX发送消息或者被测环境发送消息给SPIDER,才能使用RecvXXX。RecvXXX接收XXX消息,通常该AW由协议开发者提供,XXX表示消息名称,即Recv+消息名称,和SendXXX一一对应。以H248的ReqNotify消息为例,即RecvReqNotify。常用AW:RecvXXX功能:必须有消息到达后,SPIDER常用AW:RecvXXX格式:RecvXXX
OperationList
SwitchPara没有规矩不成方圆常用AW:RecvXXX没有规矩常用AW:RecvXXX参数说明:OperationList对接收的消息进行检查,支持如CHK,ABS,EXT,TFT等消息检测符,是可选的,所有的消息的检测都是通过OperationList的检测条件来达到测试目的。有了这些符号,就可以对接收的消息进行各种检查{不可少,{前面要留一个空格且要与}匹配回车换行符分割各个操作列表常用AW:RecvXXX参数说明:有了这些符号,就可以对接收常用AW:RecvXXX参数说明:SwitchPara开关参数,可选。RecvReqNotify{}-recvmodepeek-savemsgtempReqMsg所有开关参数都是可选的,且没有先后顺序常见的开关参数:-savemsg(保存接收的消息),-recvmode(消息接收模式),-seek(接收消息的过滤条件)形式:-savemsgvalue常用AW:RecvXXX参数说明:RecvReqNotifyRecvXXX举例
接收H248的ReqNotify消息:RecvReqNotify{CHKTransaction.Context.Notify.Events==al/riCHKT.C.N.E==al/*GETT.C.N.E(end)TCN}-savemsgrecvtempNotify接收SIP的Invite消息:RecvInvite{EXTTo.tagCHKViaINCLUDE"4:5070"}RecvXXX举例接收H248的ReqNotify消息:目录SPIDER概念回顾SPIDER符号约束PCO特征常见AWLogic语法TESTCASE语法目录SPIDER概念回顾Logic的基本结构
LogicLogicName{PCO1PCO2…OthParams…}{PCO1{AW1%OthParams%OtherAWList}PCO2{AWList}...}关键字逻辑名PCO形参,至少要有一个逻辑的其他形参,视情况可选,0个或多个PCO和AW组合,并形成一定的测试流程整个Logic里的内容叫:逻辑体{、}也是逻辑结构的一部分^-^Logic的基本结构LogicLogicName{P逻辑Logic语法说明
Logic:必须以Logic为关键字,SPIDER严格区分大小写LogicName:逻辑名必须唯一PCO1PCO2…:必须至少包含一个PCO形参,没有上限OthParams…:根据具体测试流程可以有0或多个只有用例调用了Logic,Logic才能执行逻辑Logic语法说明Logic:必须以Logic为关键逻辑Logic语法说明逻辑体:逻辑的整个内容,由1个或多个过程块组成各个控制块之间是并行执行的顺序过程块内的AWList可以为空,过程块里的AW串行执行逻辑以.logic为后缀进行命名保存,逻辑文件命名以字母下划线开头,且只能含有字母、下划线、数字,默认保存路径:…GTR\BIN\lib\SPIDERV3\Userfiles\Logic,可以是多层次的文件夹,一个逻辑文件中可以包含多个Logic结构逻辑Logic语法说明逻辑体:逻辑的整个内容,由1个或多个过逻辑Logic的参数:逻辑体引用形参形参可以有多个,各个参数之间空格分开LogictestPrint{printPco{content123456}}{
printPco{
Print"%content%"
}}这里的PCO形参不需要加%%,SPIDER自己去识别逻辑体引用形参时需要加%%逻辑Logic的参数:逻辑体引用形参形参可以有多个,各个参数逻辑Logic的参数:默认值
参数可以给出默认值LogictestPrint{printPco{content123456}}{
printPco{
Print"%content%"
}}用例中如下调用:testPrint{%test%}用例中如下调用:testPrint{%test%Welcome!}用{}把形参名和默认值绑定打印Welcome!用例在调用该逻辑时就可以省掉默认参数,则打印123456逻辑Logic的参数:默认值参数可以给出默认值Logic逻辑Logic的参数:默认值带有空格
默认值允许含有空格、Tab等符号,必须加{}或“”用以保护LogictestPrint{printPco{Content{HelloSPIDER!}}}{
printPco{
Print"%Content%"
}}用{}或""把含空格的默认值加以保护逻辑体引用含空格的参数时要加{}或""加以保护,否则SPIDER以为Print后面跟了2个参数,就会报错逻辑Logic的参数:默认值带有空格默认值允许含有空格、T逻辑Logic的参数:形参的默认值是PCO
LogicTest_PCSCF_Register{UE2PS2P{User%UE2P%}}{
S2P{
AssociateUser%User%
RecvRegister
SendRegister401
RecvRegister
SendRegister200
};#ENDS2P}引用形参形参默认值是PCO,只能作为AW参数,不能作为PCO来使用逻辑Logic的参数:形参的默认值是PCOLogicT逻辑Logic的参数:形参的默认值是PCO的属性值
LogictestPrint{printPco{content%CalleeMobile.TeleNumber%}}{
printPco{
Print"%content%"
}}用例中如下调用:testPrint{%test%}或用例中如下调用:testPrint{%test%12345678}打印名叫CalleeMobile的PCO的TeleNumber属性值逻辑Logic的参数:形参的默认值是PCO的属性值Logi逻辑Logic的参数:默认值形参的位置带默认值的参数位于参数列表的末尾LogictestPrint{printPcocontent1{content2Welcome!}}{
printPco{
Print"%content1%"Print"%content2%"
}}用例中如下调用:testPrint{%test%123456}123456传给了content1,content2则使用默认值Welcome!逻辑Logic的参数:默认值形参的位置带默认值的参数位于参数逻辑Logic的参数:默认值形参的位置带默认值的参数不位于参数列表的末尾,可能会报错!LogictestPrint{printPco{content2Welcome!}content1}{
printPco{
Print"%content1%"Print"%content2%"
}}用例中如下调用:testPrint{%test%123456}123456传给了content2,而content1的内容为空,执行用例时SPIDER会报错逻辑Logic的参数:默认值形参的位置带默认值的参数不位于参逻辑的参数异常灵活
定义如下一个逻辑LogicCONFIG_MMLExec{PcoNameNETypeCmdNameCmdArgs
{RetCodeArgs
0}}{
PcoName{
SetNe%NEType%
EXEC_MML"%CmdName%"{%CmdArgs%}""
%RetCodeArgs%
}}含有默认值0逻辑的参数异常灵活定义如下一个逻辑LogicCONFIG逻辑的参数异常灵活
CONFIG_MMLExec
{%OMU_MML%"%ENV1.SCSCFID%""MODSCSCF"{"S-CSCFID"
"0""Defaultforkpolicy""Noforking"
}}用例中如下调用该逻辑:{}保护所有橙色字体的部分(不管里面是否有引号,空格,回车等符号),当作一个参数,赋值给CmdArgs,固定了参数的个数。另外,实际只传了4个参数,RetCodeArgs没有被赋值,使用默认值逻辑的参数异常灵活CONFIG_MMLExec
{%O逻辑的参数异常灵活
CONFIG_MMLExec
{%OMU_MML%"%ENV1.SCSCFID%""MODSCSCF"{"S-CSCFID"
"0""Defaultforkpolicy""Noforking"
…………}
{01000}}用例中如下调用该逻辑:{}保护所有橙色字体的部分,使得CmdArgs可以在脚本中得到自由的控制红色字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中西医结合内科学之循环系统疾病知到课后答案智慧树章节测试答案2025年春湖南中医药大学
- 广东省揭阳市普通高中2017-2018学年高一数学1月月考试题06
- 核心素养导向下的小学语文作业设计策略
- DB13-T2292-2015小型商务酒店服务质量规范
- MongoDB的存储与查询策略优化与应用
- 武育粳3号条纹叶枯病抗性和食味品质的定向改良研究
- DB11T-建筑垃圾再生回填材料应用技术规程编制说明
- 活动板房拆除施工方案
- 2025版高中政治课时作业4民主决策:作出最佳选择含解析新人教版必修2
- 山西专版2025版高考物理二轮复习第一篇选择题热点12原子物理精练含解析
- DZ∕T 0202-2020 矿产地质勘查规范 铝土矿(正式版)
- 天然装饰石材
- 门诊导医正确分诊
- 经典导读与欣赏-知到答案、智慧树答案
- DB32T3610.3-2019道路运输车辆主动安全智能防控系统技术规范第3部分:通讯协议
- 信息资源建设-习题集(含答案)
- 2024年湖南铁道职业技术学院单招职业技能测试题库及答案解析
- 2024年合肥职业技术学院单招职业适应性测试题库及答案解析
- 2024年西安医学高等专科学校单招职业技能测试题库及答案解析
- 2024年事业单位考试云南省昭通市A类《职业能力倾向测验》深度预测试题含解析
- 火灾自动报警系统检查表
评论
0/150
提交评论