这个示例调用两台Linux机器上的ls命令,将结果输出到文件,根据命令返回的结果判断调用是否成功,然后复制文件到另外的STAF机器中。为了方便描述,为脚本加上行号。
STAX采用现在流行的XML语言作为其脚本语言。第一行是XML语言的标准格式,第二行表示此XML文件使用stax.dtd样式表进行验证。所有的STAX脚本文件都应该保留这两行。
3-6行是XML的注释,用来描述这个脚本的功能。
第7行是STAX脚本命令的开始符,所有STAX脚本内容都要用它起始。第8行中script
类似于编程语言中的定义变量的语句,在这里定义一个长度为2的数组LinuxMachine,其值为Linux1和Linux2。
第9-10行指定STAX脚本运行时调用的函数。第11-40行是函数的定义体。11行指定函数名为ListDirectory。
第12-39行定义一个循环,类似于Java中的for,但是这个循环是并行的。var="machineName" in="LinuxMachine"
表示此循环从LinuxMachine数组中获得输入,并且赋给machineName变量。
13行定义测试用例,在STAX脚本的运行中,可以根据运行结果来决定测试用例的结果,方便用户查看。
第14-37行表示其中的STAX脚本是顺序执行的。15-19行执行具体的STAF命令,其中location指定需要运行STAF命令的机器,可以由变量来动态指定,比如'%s' % machineName。 service表示需要调用的服务,在这里为process进程服务。request为需要传递给服务的参数。进程服务的参数分为几部分,首先是需要调用的命令"ls",parms指定需要传递给"ls"的参数"-l"。 wait表示需要等待这个命令结束才能返回。stdout表示将命令运行的结果输出到文件中去。
20-31行判断上个命令的返回结果,并根据返回结果的值设定测试用例的状态,并且记录日志以及将消息发送到STAFMonitor。expr="RC==0"
判断返回结果是否为0。 RC表示上个命令的返回结果,0表示命令执行成功。<tcstatus result="'pass'"/>
设置测试用例状态为通过,fail则表示测试用例失败。<log message="1">
表示不仅将消息记录到STAX的日志中,而且将其发送到STAFMonitor(如果STAFMonitor处于运行状态)。
32-36行是STAF的文件拷贝命令。fs表示文件系统服务,copy FILE指定复制文件操作,TOFILE指定目标文件的名字,STAX会用命令后面的参数% machineName替换%s,因此目标文件的名字为lsLinux1.log和lsLinux2.log。 TODIRECTORY指定目标文件夹,TOMACHINE指定目标机器。
上述STAX脚本可以用staf local stax execute file SampleScript.xml wait
执行,或者通过java -jar STAXMon.jar
启动STAXMonitor来调用。
图2是本节将要介绍的简化的场景图。软件开发分为两部分,一部分是在CVS上的最新的软件源码,另外一部分是在FTP服务器上的执行脚本。在STAF(STAX)自动部署更新包的过程中,STAX需要同时从CVS和FTP上下载最新的代码和安装脚本。 测试环境中,测试机器上都装有STAF,并且在从CVS和FTP下载代码的机器上安装有STAX。
STAX下载完代码后,将代码拷贝到用于编译的服务器上。因为代码的编译需要特殊的环境,比如需要WAS (WebSphere Application Server) 的环境,因此我们把STAX服务器和编译服务器分开。 编译服务器编译好源码之后,将其分发到部署和测试服务器上。部署服务器负责向应用程序服务器部署程序,而测试服务器则用来进行自动化测试。
本节根据这个场景介绍如何通过STAF(STAX)来实现部署和测试的自动化。
STAF(STAX)实现了自动化测试的框架,但并没有实现具体的常用功能,比如FTP, CVS。因此我们需要借助FTP命令来完成FTP源码的下载。自动化下载一般通过命令行实现,因此我们使用Windows自带的FTP命令来完成。
FTP命令提供了一个参数-s,可以指定一个FTP脚本文件来存放将要执行的FTP命令。因此我们把需要执行的FTP命令存放到某个文件,然后通过STAX调用FTP命令实现FTP上源码的自动下载。
代码4:FTP脚本(ftpSample.conf)示例
open ftp.ibm.com
username
password
binary
prompt
cd /code/latest/unix
lcd C:\latest\unix
mget *
bye
这个FTP脚本表示以用户名username,密码password访问ftp.ibm.com,设置传输方式为binary,然后下载/code/latest/unix下的文件到本地目录C:\latest\unix。可以通过ftp -s:ftpSample.conf
来运行此脚本。
调用ftp命令的STAX脚本如下所示:
<process> <location>'local'</location> <command>'ftp'</command> <parms>'-s:ftpSample.conf'</parms> <workdir>'C:/STAF'</workdir> </process> |
通过FTP脚本和STAX脚本,我们可以控制STAX来自动下载FTP上的源代码。
和FTP类似,CVS源码下载也使用命令行的方式,但由于CVS服务器使用的协议不同,对CVS客户端的要求也不同,因此我们在这里不再介绍如何使CVS客户端工作的内容。假定我们能够使用如下的命令更新CVS代码: cvs -d :ext:username@cvs.ibm.com:/cvsroot/ checkout -d directory modulename
.
根据这个CVS命令,调用此命令更新CVS代码的STAX脚本如下:
<process> <location>'local'</location> <command>'cvs'</command> <parms>'-d :ext:username@cvs.ibm.com:/cvsroot/ checkout -d directory modulename'</parms> <workdir>'C:/CVS'</workdir> <stdout>'C:/CVS/cvsupdate.log'</stdout> </process> |
从 CVS 和 FTP 上下载源码之后,需要将源码拷贝到编译服务器上。本节介绍如何使用 STAF 的文件传输命令以及 STAX 的循环指令。
<script> directoryList = ['CVSDirectory', 'FTPDirectory'] </script> <iterate var = "directory" in="directoryList"> <testcase name = "'sourceCopy'"> <sequence> <stafcmd> <location>'local'</location> <service>'fs'</service> <request>'copy DIRECTORY C:/Source/%s TODIRECTORY /root/build/%s TOMACHINE buildserver RECURSE KEEPEMPTYDIRECTORIES' % directory % directory</request> </stafcmd> </sequence> </testcase> </iterate> |