利用 STAF 实现程序更新包的自动部署测试

发表于:2007-10-30 14:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:崔俊涛    来源:网络转载

分享:

        这个示例调用两台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来调用。

3.自动部署更新包


图2. STAF(STAX)环境拓扑
STAF环境示意图

        图2是本节将要介绍的简化的场景图。软件开发分为两部分,一部分是在CVS上的最新的软件源码,另外一部分是在FTP服务器上的执行脚本。在STAF(STAX)自动部署更新包的过程中,STAX需要同时从CVS和FTP上下载最新的代码和安装脚本。 测试环境中,测试机器上都装有STAF,并且在从CVS和FTP下载代码的机器上安装有STAX。

        STAX下载完代码后,将代码拷贝到用于编译的服务器上。因为代码的编译需要特殊的环境,比如需要WAS (WebSphere Application Server) 的环境,因此我们把STAX服务器和编译服务器分开。 编译服务器编译好源码之后,将其分发到部署和测试服务器上。部署服务器负责向应用程序服务器部署程序,而测试服务器则用来进行自动化测试。

        本节根据这个场景介绍如何通过STAF(STAX)来实现部署和测试的自动化。

3.1 FTP脚本

        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脚本如下所示:


代码5:调用FTP命令的STAX脚本

                
<process>
  <location>'local'</location>
  <command>'ftp'</command>
  <parms>'-s:ftpSample.conf'</parms>
  <workdir>'C:/STAF'</workdir>
</process>
      
        process标签表示调用STAF的进程服务(process),location表示请求被发送的目标机器,command表示需要执行的进程,而parms表示传递给进程的参数,workdir表示进程运行的工作目录。

        通过FTP脚本和STAX脚本,我们可以控制STAX来自动下载FTP上的源代码。

3.2 CVS下载

        和FTP类似,CVS源码下载也使用命令行的方式,但由于CVS服务器使用的协议不同,对CVS客户端的要求也不同,因此我们在这里不再介绍如何使CVS客户端工作的内容。假定我们能够使用如下的命令更新CVS代码: cvs -d :ext:username@cvs.ibm.com:/cvsroot/ checkout -d directory modulename.

        根据这个CVS命令,调用此命令更新CVS代码的STAX脚本如下:


代码6:调用FTP命令的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>
      
        与代码 5 不同的是,代码 6 使用了stdout 标签,此标签表示将进程 cvs 的输出重定向到 cvsupdate.log 中,以便于我们查看 cvs 命令执行的状态和结果。

3.3 拷贝编译源码

        从 CVS 和 FTP 上下载源码之后,需要将源码拷贝到编译服务器上。本节介绍如何使用 STAF 的文件传输命令以及 STAX 的循环指令。


代码 7:传输文件的 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>
      
        代码 7 拷贝 CVS 和 FTP 源码到编译服务器中。script 标签定义了一个数组 directoryList,这个数组有两个值,分别表示 CVS 源码目录和 FTP 目录。iterate 定义了一个顺序循环,分别从 CVS 目录和 FTP 目录拷贝文件到编译服务器中。 stafcmd 标签调用 STAF 命令,此处我们调用的是 FS(文件系统)服务。copy DIRECTORY 表示我们需要拷贝整个目录到编译服务器中。 如果编译服务器已经有原来的代码,为了正确起见,可以在拷贝之前使用 fs delete entry 命令来删除原有的文件。

42/4<1234>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号