技术开发 频道

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

    STAF/STAX 脚本

    STAF/STAX 脚本包括以下部分:

    环境清理
    下载配置 WAS 登录模块脚本
    分发和运行配置 WAS 登录脚本
    重启 WAS
    复制源码到编译机
    控制编译机编译源码
    复制 WAR 到部署机器上并部署
    调用测试代码
    收集日志

    下面我们分别介绍每个部分的脚本。

    环境清理

    在进行自动化编译、部署和测试之前,需要对上次测试的环境进行清理,以除去上次测试的残留,保证测试结果的正确和合理。首先我们需要调用第 4 章的 WAS clean 脚本来删除 WAS 中的登录模块。

    清单 6. STAX 调用 WAS clean 脚本示例
                 
1 <script>
2   machineList = [‘was602_Linux’, ‘was61_Linux’, ‘was602_Windows’, ‘was61_Windows’]
3 </script>
4 <paralleliterate var=”machine” in=”machineList”>
5   <if expr=“machine.find(‘Linux’)>=0 ”>
6     <sequence>
7       <stafcmd>
8         <location> ‘%s’ % machine </location>
9         <service> ‘process’ </service>
10        <request> ‘start command "/root/script/CleanupEnv.sh" username "root" password
11         "password" workdir "/root/script" wait stdout /root/script/cleanupEnv%s.log'
12         % machineName
13        </request>
14      </stafcmd>
15    </sequence>
16  </if>
17  <if expr=“machine.find(‘Windows)>=0 ”>
18    <sequence>
19      <stafcmd>
20        <location> ‘%s’ % machine </location>
21        <service> ‘process’ </service>
22        <request> ‘start command "C:/script/CleanupEnv.bat" username "Administrator"
23          password "password" workdir "C:/script" wait stdout
24          C:/script/cleanupEnv%s.log' % machineName
25        </request>
26      </stafcmd>
27    </sequence>
28   </if>
29 </paralleliterate>

    在清单 6 中,我们把系统分成了两套环境,Windows 系统和 Linux 系统,针对于不同的环境,cleanupEnv 脚本有不同的路径和后缀名。首先 4-29 行使用了并行的遍历来分别在各个系统上调用 cleanupEnv 脚本。在第 5 行和第 17 行中,if 语句使用的 expr 用 python 来解析,因此可以用 python 来写一些复杂的比较和判断语句。find 函数表示在字符串中查找指定的字符串。

    5-16 行针对于 Linux 的系统,使用 root 用户来调用 CleanupEnv.sh 脚本。17-28 行针对于Windows 系统,使用 Administrator 用户来调用 CleanupEnv.bat 脚本。

    CleanupEnv 脚本有两种储存方法:

    事先存放在各个测试机器上
    存放在 CruiseControl 控制机器上,然后由 STAX 来根据环境来分发这些脚本。
    一般情况下,推荐使用第二种方法。脚本分布在不同的机器上,如果发生一点小的改动,极易引起脚本的不同步。使用第二种方法,不仅会避免这个问题,而且只需改动一个脚本,将极大的节省测试人员的工作量。使用第二种方法只需在第 7 行和第 19 行前面加上 STAF 复制文件的命令即可。在 Linux 上如下所示:

    清单 7. STAX 分发 CleanupEnv 脚本示例

  <stafcmd>
  <location> ‘%s’ % machine </location>
  <service> ‘fs’ </service>
  <request> ‘copy FILE "D:/sample/CleanupEnv.sh" TODIRECTORY /root/script/’
  </request>
</stafcmd>

    把文件复制到 Linux 上需要注意一个问题,就是文件的某些属性可能没有被复制,比如可执行属性,因此需要使用下面的命令来更改文件的属性,以便用户能够执行此文件。

    清单 8. STAX 更改文件属性

  <stafcmd>
  <location> ‘%s’ % machine </location>
  <service> ‘process’ </service>
  <request> ‘start command "chmod +x /root/script/CleanupEnv.sh"’
  </request>
</stafcmd>

0
相关文章