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