技术开发 频道

使用CruiseControl和STAF建立复杂环境下的编译和测试自动化

    清单 14. 编译 RFT 测试脚本
                 
<stafcmd>
<location>'%s' % machine </location>
<service>'process'</service>
<request>'start command "c:/apache-ant-1.6.5/bin/ant.bat -buildfile %s/buildRFT.xml
-DRFTDriver=%s > %s/build.log"  username "Administrator" password "password"
workdir %s wait' % (sourceLocation, RFTDriver, sourceLocation, sourceLocation)
</request>
</stafcmd>

    复制 WAR 到部署机器上并部署

    编译完成后,需要将编译生成的 WAR 文件到部署机器上并且通过部署机器来远程部署所有的WAS 服务器。

    清单 15.部署 WAR
                 
<stafcmd>
<location>'%s' % machine </location>
<service>'process'</service>
<request>'start command "/root/script/deploywar.sh" username "root"
password "password" workdir "/root/script/work" wait
stdout /root/script/deploy.log STDERRTOSTDOUT'
</request>
</stafcmd>

    我们选择通过一台部署机器来部署 WAR 的原因是这样做维护比较简单,如果 WAS 服务器IP 改变或者增加时,只需要更改部署服务器的部署脚本即可,甚至对 STAX 脚本也不用更改。当然也可以选择每台 WAS 分别对自己部署 WAR,这样当 WAS 服务器增加时,需要对 STAX 脚本做一点更改,添加相应的 WAS 服务器。

    在编译机器上调用测试代码

    部署完成后,在编译机器上调用测试代码(包括 RFT 代码)来测试示例 Web Service 程序。

    调用代码有两种方式:

    STAX 直接调用远程机器上的 Java 命令来执行
    STAX 调用远程机器上的 Ant 脚本来执行
    为了演示这两种方式的用法,我们使用 Ant 脚本来调用 JUnit 测试代码,使用 Java 命令来调用 RFT 代码。但在实际使用过程中,我们推荐使用 Ant 脚本来调用。

    清单 16. 调用测试代码
                 
<stafcmd>
<location>'%s' % machine </location>
<service>'process'</service>
<request>'start command "c:/apache-ant-1.6.5/bin/ant.bat -buildfile %s/runTest.xml
> %s/runTest.log"  username "Administrator" password "password" workdir %s wait'
% (sourceLocation, sourceLocation, sourceLocation)
</request>
</stafcmd>
<stafcmd>
<location>'%s' % machine </location>
<service>'process'</service>
<request>'start command "java -cp "%s\bin\rational_ft.jar" -Drational_ft.install.dir
="%s\bin" com.rational.test.ft.rational_ft -datastore "%s" -rt.log_format "html"
-rt.bring_up_logviewer false -playback testscript.VerifyWebService
>%s/runRFTTest.log"  username "Administrator" password "password" workdir %s wait'
% (RFTLocation, RFTLocation, sourceLocation, sourceLocation, sourceLocation)
</request>
</stafcmd>

    第一个 STAFCMD 使用 Ant 来调用 Junit 测试代码,可以看出命令比较简单。而第二个STAFCMD 使用 Java 来调用 RFT 测试脚本,命令要复杂得多,这样会给维护带来一定的困难,因此推荐使用 Ant 来编译和调用。

    收集产生的日志文件

    在部署和测试完成后,控制机器需要遍历每个 WAS 服务器(包括编译机和部署机)来收集日志文件,也就是复制文件到控制机器上。这与清单 7 类似。

    至此,我们已经完成了这个 STAX 脚本的编写。需要指出的是,所有的 STAX 脚本只需要在控制机器上执行即可,部署机、编译机以及测试机器完成不知道这些代码的存在,它们只需要安装 STAF 并且信任控制机器即可。

    配置 CruiseControl
    安装 CruiseControl

    CruiseControl 是一个非常容易使用的持续集成工具。读者可以从它的官方网站下载最新版的CruiseControl 2.7 安装包进行安装。由于安装十分简单,本文略过其安装过程。

    验证 CVS 配置

    在 Dos 命令行窗口中运行如下命令来验证你可以从 CVS 检出源代码 (假定我们使用 cygwin来连接 CVS )

cd <build_home>
set CVS_RSH=c:\cygwin\bin\ssh.exe
\progra~1\cvs\cvs -d :ext:user@cvshostname:/cvsroot/sampleproject/ \
checkout -d <build_home> Build

    配置完成 CVS 后,在 build.xml 中添加如下任务:

    清单17. 检出 CVS 上测试源代码的 ant 脚本
                 
<target name="getSrc">
       <echo message="Extracing source from CVS in to ${build.src.dir}" />
       <cvs
            cvsRoot=":ext:user@cvshostname:/cvsroot/sampleproject/"
            command="checkout -P"
    cvsRsh="c:\cygwin\bin\ssh.exe"
    package="src/test"
    dest="${cvs.dir}"/>
       <copy todir="${src.dir}">
  <fileset dir="${cvs.dir}/src/test>
             <exclude name="**/CVS/**"/>
  </fileset>
       </copy>
   </target>

    注意:用户也可以直接通过配置使用 CruiseControl 来检出和编译源代码。但是由于在本文的场景中,编译这些测试代码需要有特定的类库支持,而 CruiseControl 所处的控制机没有安装这些类库。因此在本文中我们使用一个 ant 脚本来将代码从 CVS 检出并在后面的步骤中将其发布到编译机上进行编译。

0
相关文章