注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研自动组

快乐耕耘,收获成长!

 
 
 

日志

 
 

STAX脚本示例  

2010-12-16 13:42:19|  分类: 自动测试 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

作者:佳佳  整理:璎珞


下面这个示例调用两台Linux机器上的ls命令,将结果输出到文件,根据命令返回的结果判断调用是否成功,然后复制文件到另外的STAF机器中。为了方便描述,为脚本加上行号。

STAX采用现在流行的XML语言作为其脚本语言。 STAX脚本可以用staf local stax execute file SampleScript.xml wait执行,或者通过java -jar STAXMon.jar启动STAXMonitor来调用。

1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1行是XML语言的标准格式,第2行表示此XML文件使用stax.dtd样式表进行验证。所有的STAX脚本文件都应该保留这两行。

2 <!DOCTYPE stax SYSTEM "stax.dtd">        
3 <!-- sample1.xml - Sample of a job definition file for STAX
4 Job Description:
5   This job executes some STAF commands and sends messages to the STAX Job Monitor.
6 -->
3-6行是XML的注释,用来描述这个脚本的功能。

7  <stax>
8   <script> LinuxMachine = ['Linux1', 'Linux2'] </script>
 7行是STAX脚本命令的开始符,所有STAX脚本内容都要用它起始。第8行中script类似于编程语言中的定义变量的语句,在这里定义一个长度为2的数组LinuxMachine,其值为Linux1Linux2

9   <defaultcall function="ListDirectory">
10   </defaultcall>
11   <function name="ListDirectory">
 9-10行指定STAX脚本运行时调用的函数。第11-40行是函数的定义体。11行指定函数名为ListDirectory


12-39行定义一个循环,类似于Java中的for,但是这个循环是并行的。var="machineName" in="LinuxMachine" 表示此循环从LinuxMachine数组中获得输入,并且赋给machineName变量。


12     <paralleliterate var = "machineName" in="LinuxMachine">
13    <testcase name = "'listDirectory'">
13行定义测试用例,在STAX脚本的运行中,可以根据运行结果来决定测试用例的结果,方便用户查看。


14-37行表示其中的STAX脚本是顺序执行的。


14         <sequence>
          
15           <stafcmd>
16             <location>'%s' % machineName</location>
17             <service>'process'</service>
18             <request>'start command "ls" parms "-l" wait stdout /root/ls.log'</request>
19           </stafcmd>
15-19行执行具体的STAF命令,其中location指定需要运行STAF命令的机器,可以由变量来动态指定,比如'%s' % machineName service表示需要调用的服务,在这里为process进程服务。request为需要传递给服务的参数。
进程服务的参数分为几部分,首先是需要调用的命令"ls"parms指定需要传递给"ls"的参数"-l" wait表示需要等待这个命令结束才能返回。stdout表示将命令运行的结果输出到文件中去。

20           <if expr="RC == 0">
21             <sequence>
22               <tcstatus result="'pass'"/>
23               <log message="1">'List directory successfully on %s' % machineName</log>
24             </sequence>
25             <else>
26               <sequence>
27                 <tcstatus result="'fail'"/>
28                 <log message="1">'Error in listing directory on %s' % machineName</log>
29               </sequence>
30             </else>
31          </if>
20-31行判断上个命令的返回结果,并根据返回结果的值设定测试用例的状态,并且记录日志以及将消息发送到STAFMonitorexpr="RC==0"判断返回结果是否为0 RC表示上个命令的返回结果,0表示命令执行成功。<tcstatus result="'pass'"/>设置测试用例状态为通过,fail则表示测试用例失败。<log message="1"> 表示不仅将消息记录到STAX的日志中,而且将其发送到STAFMonitor(如果STAFMonitor处于运行状态)。          

32           <stafcmd>
33             <location>'%s' % machineName</location>
34             <service>'fs'</service>
35             <request>'copy FILE /root/ls.log TOFILE ls%s.log TODIRECTORY C:/STAF 
                    TOMACHINE windows' % machineName</request>
36           </stafcmd>
32-36行是STAF的文件拷贝命令。fs表示文件系统服务,copy FILE指定复制文件操作,TOFILE指定目标文件的名字,STAX会用命令后面的参数% machineName替换%s,因此目标文件的名字为lsLinux1.loglsLinux2.log TODIRECTORY指定目标文件夹,TOMACHINE指定目标机器。

37         </sequence>
38       </testcase>
39     </paralleliterate> 

40   </function>
41 </stax>


  评论这张
 
阅读(411)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018