STAX脚本编写文档_第1页
STAX脚本编写文档_第2页
STAX脚本编写文档_第3页
STAX脚本编写文档_第4页
STAX脚本编写文档_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、STAX脚本编写1. STAX 介绍STAF(Software Test Automation Framework是开源、跨平台、支持多语言并且基于可重用的组件 来构建的自动化测试框架。它为自动化测试建立了基础,并且提供了一种可插拔的机制支持不同的 语言平台。STAF采用点对点的实现机制,被用来减轻自动化测试的工作负担,加快自动化测试的进 程。在STAF环境中,所有的机器都是对等的,没有客户端和服务区的区分。STAX(Software Test Automation execution Engire是基于 STAF 的执行引擎。它在 STAF基础上, 帮助用户实现测试用例的分发、部署、执行以及

2、结构分析oSTAX使用了三种技术:STAF、XML和 Python。简单来说,STAX在STAF之上提供了一些接口,方便用户来操纵STAF进行自动化测试的 实现。STAF 和 STAX 的官方网站是: HYPERLINK /%e3%80%82 /。2. XML 简单教程XML 是英文 Extensible markup language 的缩写,中文意思是“可扩展标记语言”。 XML 的主要 功能是帮助系统信息通过互联网共享结构化的数据。 XML 不是一个软件,也不是编程语言, XML 只是一个标记语言的标准。用XML标准编写的文件,我们称为XML文件。下面是一个简单的XML文件。books

3、ISBN =9787544238212The book thiefprice25/pricequantity10/quantity编写 XML 必须遵循一些简单的语法规则:(1)、每个开始标记必须有结束标记(2)、每个 XML 文档只能有一个根元素(3)、所有 XML 元素必须正确嵌套(4)、属性值必须加引号STAX脚本采用基于XML的脚本语言进行编写,这是专门为STAX测试设计的一种语言。在STAX 脚本中,根元素是vstax。一个STAX脚本的基本格式是这样的:v?xml version=1.0 encoding=UTF-8 standalone=no?vstaxv/stax脚本的头两行是

4、固定的,主要指名我们采用的 XML 版本和编码规则,我们不进行详细讲解。 我们需要将自己的代码写在vstax 和v/stax 之间。XML 的官方网站是 。参考文献 1 是 XML 的简明教程。3. Python 简单教程Python是一种脚本语言,STAX利用Python定义变量和表达式。变量命名规则:、变量由字母、数字和下划线组成,第一个字符必须是字母或者下划线。、变量区分大小写。、Python中的关键字不能用作STAX的变量名、STAX的保留字也不能用作变量名oSTAX的保留字包括:RC、以”STAF开头的单词、以”STAX” 开头的单词。vscripttestName = CoolTe

5、stlv/scriptvscripttestName = CoolTest1v/script这两条语句作用相同,都是将字符串CoolTest1赋值给变量testName。testName = CoolTest1v/script这条语句的作用是将变量CoolTest1的值赋给变量testName。如果变量CoolTest1在前面没有定义, 脚本出错。vtestcase name=Test1这条语句的作用是将字符串Test1赋值给变量name。注意这里是双引号里面包含单引号。 :表示单引号“:表示双引号:表示双引号嵌套单引号vtestcase name=testName这条语句的作用是将变量tes

6、tName的值赋给变量name。由于XML中属性值必须用引号引起来,因 此这里的testName不是字符串,而是变量。vscripttestName = CoolTestlv/script这样, name 的值是字符串 CoolTestl。testName = “TestiMachineName = “localtestcase name=%s Part A % testName我们可以用引用一个变量的值。上面这段脚本相当于vtestcase name=Testl part Atestcase name=Testl part A on machine localPython 的官方网站是 HY

7、PERLINK /%e3%80%82 /。参考文件 2 是 Python 的简明教程。4. STAX 脚本教程有了前面的知识,我们来正式介绍stax脚本的编写规则。一个stax脚本的基本模板是这样的:!DOCTYPE stax SYSTEM “stax.dtdvdefaultcall function=FunctionA/vfunction name=FunctionAv/functionvfunction name=FunctionBvfunction name=FunctionCv/functionv/stax脚本开头两行是关于脚本的说明,stax是脚本的根标签,除去脚本说明以外的所有标签

8、必须包 含在根标签中。defaultcall是脚本执行时首先执行的语句。这个标签有个属性fUnction=”FunctionA”, 表示默认执行函数FunctionA,相当于C语言中的main函数。是函数FunctionA的定义,标签function表示一个函数,这个元素有一个属性name指名了函数的名 字。函数体定义在和中间。我们看到,这个脚本中一共定义了三个函数FunctionA、FunctionB、FunctionC。我们可以通过 FunctionA 去调用函数 FunctionB 和 FunctionC。下面是一个更加详细的例子。?xml version=1.0 encoding=UT

9、F-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvdefaultcall function=FunctionA/localvcommandlsv/command-l /localvservicemiscv/servicevrequestversionv/requestv/stafcmdv/functionvfunction name=FunctionCvlogThis function logs this messagev/logFunctionA中包含一个process元素0process代表一个STAF进程,这个进程调用STAF PROCES

10、S 服务在指定的机器上执行指定的命令。因此,FunctionA的作用是在本地执行命令”ls -1 /”。FunctionB 中包含一个元素stafcmd。stafcmd表示要请用一个服务。因此,FunctionB相当于命令”staf local misc version”。Function包含一个元素log,产生日志信息。python 代码vscripA 标签说明:stax脚本中,标签script中的语句是Python语句,我们可以在这里定义XML文件解析和执行 时用到的一些变量。我们还可以在这里加载python模块,执行python函数。vstax中包含的vscript 在文件执行前被初始化

11、,vstax中所有函数都可以用vscript中定义的变量,这些变量相当于其他语 言中的全局函数。其他标签中包含的vscript 中定义的变量只能在特定范围内有效,相当于其他函数 中的局部变量。例子:vscripttestName = CoolTest1v/script这条语句的作用是将字符串CoolTestl赋给变量testName。vscriptmachName = STAFResultv/script这条语句的作用是将变量STARTResult的值赋给变量machName。vscriptfrom random import randomr = random。这条语句的作用是加载random

12、模块,然后产生0-1之间的随机数。服务调用vprocess 标签作用:为了编写STAX脚本方便,STAX定义了 process标签用来调用STAF中的进程(process)服 务。vprocess标签会向process服务提交start需求,然后等待process执行。返回值: process 服务调用结束后会产生以下返回值。返回值说明RC本次执行的错误码,0表示正常,非0值表示执行出错。STAFResult本次执行的错误信息,成功为None,不成功STAFResult中包含具体出错信息。STAXResult本次执行的返回信息,参见下面的例子。子标签: process 包含以下子标签子标签名称

13、属性说明locationrequiredprocess执行的机器。local表示本机2表示在IP地 址为2的机器上执行。commandrequired执行的命令parmsoptional执行命令需要的参数,其他参数不再介绍。returnstdoutoptional标准输出例子:vprocess name=TestProcessvlocationlocalv/locationcommandls/commandvparms-lv/parmsSTAXResultv/message上面这段程序中,我们执行了一条指令ls -l /,STAXResult将包含根目录下所有目录的列表。vstafcmd标签作

14、用:标签stafcmd用于调用STAF的命令。返回值:调用结束后有以下返回值供我们使用返回值说明RC本次执行的错误码,0表示正常,非0值表示执行出错。STAFResult本次执行的错误信息,成功为None,不成功STAFResult中包含具体出错信息。STAXResult本次执行的返回信息。子标签:stafcmd包含以下子标签:子标签属性说明locationrequiredSTAF命令在哪台机器上执行servicerequired接收request的服务的名称requestrequired我们提交的需求例子:vstafcmdvlocation2v/locationvservicePINGv/s

15、ervicevrequestPINGv/requestSTAF %s PING PING request failed with RC: %s, Result: %s % (RC, STAFResult)上面是 stafcmd 的一个例子,这个例子的作用是向机器2 的 PING 服务提交 PING 需 求,判断机器2的STAF是否正常运行。当命令执行结束后,if标签检测返回值,如果返 回值不是0表明192。168.0.42上STAF运行不正常,错误信息写入日志中。vlocati on loca lprocessv/servicestart comma nd Is parms -l wait 标

16、签作用:parallel标签可以包含子标签,这些子标签将并行执行。当所有的子标签执行结束后parallel 标签执行结束。例子:vstafcmdv/stafcmd在这个例子中,stafcmd、process、call三个操作同时执行。vparalleliterate 标签作用: paralleliterate 标签是并行执行的另一种方法。在使用 paralleliterate 前需要定义一个列表, paralleliterate 标签中只包含一个执行子标签,列表中的每一个元素都要执行子标签中指定的任务, 而且是并行执行的。当列表中所有的元素任务执行完毕时, paralleliterate 结束

17、。属性: paralleliterate 标签含有以下几个属性:属性说明var列表中的兀素in我们定义好的列表,列表中的兀素将进行并行操作例子:scrip tmachineLis t=2,3,4/scrip t vparalleliterate var=machineName in=machineListvstafcmdlocalv/locationvservicePINGv/servicePING MACHINE %s % machineName v/stafcmdv/paralleliterate在这个例子中,我们将会从本机同时ping 42、43、44三台机器。函数创建和调用这一节中,我

18、们来谈谈STAX中如何创建函数,如何调用函数。4.4.1vfunction 标签作用:我们采用标签创建函数。属性:function有一个属性name指名这个function的名字。属性说明name函数的名字例子:vfunction name=FunctionA 标签作用:我们用建带有参数的函数。我们在4.4.1中创建的函数没有参数,若想 创建带参数的函数,需要在标签中使用标签。例子:vfunction-required-arg name=parms/vfunction-optional-arg name=machine default=local/vfunction-optional-arg

19、name=command default=ls/v/function我们将所有的参数放在标签中,变量分为两种类型: vfunction-required-arg:这种变量在函数调用时必须传递值。vfunction-optional-arg:这种变量有默认值,函数调用时可以传值,可以不传值。如果不传递值就使 用默认值。 标签作用:vfunction-list-args标签和标签作用类似,也是用来创建带有参数的函数。 这两个标签的主要区别时函数调用时参数的形式有差异。例子:vfUnction name=FunctionAvfunction-list-argsvfunction-required-a

20、rg name=parms/vfunction-optional-arg name=machine default=local/vfunction-optional-arg name=command default=ls/v/function-list-argsvcall 标签作用:我们用vcall标签调用前面定义的函数。例子:调用不带参数的函数vfUnction name=FunctionAvfUnction name=FunctionBvcall fUnction=FunctionA/调用vfunction-map-args标签定义的带参数的函数vfUnction name=Functio

21、nBvcall function=FunctionAparms:aaa,machine:97v/callv/function调用标签定义的才参数的函数,我们需要将参数写成字典的形式。键值就是 函数定义时的参数名称。我们传递给parms的值是字符串aaa,我们传递给machine的值是字符串 2,参数 command 没有传递值就采用默认值 ls。调用vfunction-list-args标签定义的带参数的函数vfUnction name=FunctionBvcall function=FunctionA,aaa, 2v/call我们按照变量定义的顺序进行赋值,第一个值aaa赋给第一个变量par

22、ms,第二个值赋给第二个 变量machine,第三个变量采用默认值ls。vcall-with-map标签作用:vcall-with-map标签是调用标签定义的带参函数的另一种方式。作用与采 用vcall 标签调用vfunction-map-args标签定义的带参函数一样。例子:vfUnction name=FunctionBvcall-with-map function=FunctionAvcall-map-arg name=parmsaaav/call-map-argvcall-map-arg name=machine2v/call-map-argv/call-with-mapv/funct

23、ionname属性对应函数定义时指定的参数名称,vcall-map-arg与v/call-map-arg中间的值就是参数 值。vdefaulteall 标签作用:这个标签指名脚本执行时默认调用的函数。例子:vdefaultcall function=main/vfUnction name=mainv/function脚本启动时默认调用main函数。vreturn标签作用:我们可以用return标签指定函数返回值。函数执行到return语句就返回主调函数,不再向下 执行。如果函数中没有return语句,那么执行完所有的函数语句返回主调函数。在主调函数中,我 们可以用变量STAXResult获取函

24、数返回值。这个变量可以表示任何类型,如整型、字符串、列表等 等。例子:v?xml version=1.0 encoding=UTF-8 standalone=no? v!DOCTYPE stax SYSTEM stax.dtd vdefaultcall function=main/vfunction name=FunctionA vfunction-list-argsvfunction-required-arg name=x/vfunction-required-arg name=y/v/function-list-argsvsequencevscripty.append(test3)v/sc

25、riptvreturnx,yv/returnv/sequencev/functionvfunction name=mainvsequencevscriptA = 1B =testl, test2vcall function=FunctionAA,Bv/callA, B = STAXResultA = %s, B = %s % (A, B) 这是一个完整的脚本,这个脚本中我们定义了两个函数 FunctionA 和 main,FunctionA 带有两个 参数x和y,在函数FunctionA内部,我们让x的值加2, y增加一个元素test3,然后返回x和y的 值。main是主调函数,定义了两个变量

26、A=1 B=testl,test2,然后调用函数FunctionA,调用结束 后查看返回值,最终结果应该是:A = 3, B = testl,test2,test3。vimport标签作用:import标签用于加载其他STAX脚本中定义的函数,这个标签有下面两个属性属性说明machineSTAX 脚本在哪台 机器上 machine=”2”表示STAX 脚本在2这台机器上。file我们要引入的脚本file=”/usr/local/staf/samples/test1.xml表示我们要引入的 是testl.xml这个STAX脚本。例子:文件 test1.xml 中定义了如下函数vfunction

27、name=FunctionA vfunction-list-argsvfunction-required-arg name=x/vfunction-required-arg name=y/v/function-list-argsx = x + 2y.append(test3)vreturnx,yv/return我们在文件 test2.xml 中想调用函数 FunctionAvfUnction name=mainA = 1B =testl, test2vimport machine=local file=/usr/local/staf/samples/testl.xmlvcall functio

28、n=FunctionAA,Bv/callA, B = STAXResultA = %s, B = %s % (A, B) 4.5流程控制STAX脚本中也有if、loop等标签控制语句流程。vloop 标签作用:vloop标签表示语句循环,被loop包含的语句将执行若干次。属性:vloop标签有几个属性。属性说明var循环过程中的变量from循环的起点to循环的终点Vloop var=”i” from=”0” to=”5”相当于 C 语言中的 for(i=0, iv=5, i+)。例子:vloop from=0 to=5vstafcmdvlocation2v/locationvservicePI

29、NGv/servicevrequestPING上面这段语句表示执行6 次 PING 服务。viterate 标签作用:这个标签表示迭代,在迭代之前我们要先定义一个迭代的范围machineList =2: 3: 4,。iterate会依次获取列表中的每一个元 素执行指定的操作。属性:iterate标签有三个属性。属性说明var表示正在迭代的变量in表示迭代范围indexvar表示正在迭代的变量在迭代范围中的编号例子:machineList = 2, 3, 4viterate var=machineName in=machineListvstafcmdlocationlocal/locationv

30、servicePINGv/servicevrequestPING MACHINE %s% machineNamev/request上面这段语句表示在本机依次PING 42、43、44三台机器。 标签作用:STAX中有三个标签用于选择流程:vif、velseif、,相当于C语言中的if、elseif、else 语句。例子:vscriptfrom random import randomv/scriptr=random()*100v/scriptvif expr=r 75vcall function=Function1/velseif expr=r 50vcall function=Functio

31、n2/v/elseifvelseif expr=r 25vcall function=Function3/v/elseifvelsevcall function=Function4/v/elsev/iffrom random import random 表示加载 random 模块中的 random 函数,第一个 random 是 Python 中的一个模块名称,第二个 random 是 random 模块中的一个函数的名称。 random 函数生成 0-1 之间 的随机数。我们看到,上面这段程序对不同的情况进行了不同的处理。如果r大于75执行函数functionl. 如果r在50-75之间执

32、行函数Function2,如果r在25-50之间执行函数function3,如果r在0-25之 间执行函数 Function4。4.6 执行测试用例4.6.1 vtestcase标签作用:vtestcase是用来执行测试用例的一个标签,STAX就是执行自动化测试的,因此vtestcase标 签是非常重要的一个标签。vtestcase有一个属性name用于表明测试用例的名称。vtestcase要和 标签联合使用。vtcstatus是用于标明本次测试状态的一个标签。vtcstatus有一个属性 result, vtcstatus result=pass/表示测试通过,vtcstatus resul

33、t=fail/表示测试失败。例子:脚本 testcase.xml 定义如下:v?xml version=1.0 encoding=UTF-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvstaxvfunction name=testvsequencevscriptfrom random import randintr = randint(1, 100)v/scriptvstafcmdvlocationlocalv/location vserviceDELAYv/service vrequestDELAY 2000v/request v/stafcm

34、drv/returnv/sequencev/functionv/stax脚本 test.xml 定义如下:v?xml version=1.0 encoding=UTF-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvdefaultcall function=begin_tests/ImportMachine = localImportDirectory = STAF/Config/STAFRoot/services/stax/samplesvfunction name=begin_testsvcall function=test/vif expr=STAXResult & lt;= 50vtcstatus result=pass/velsevtcstatus result=fail/v/elsev/ifv/sequencev/testcas

温馨提示

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

评论

0/150

提交评论