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

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

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

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

        拷贝文件后,需要通知编译服务器对更新后的源码进行编译。假定在编译服务器上存在用于编译源码的脚本文件 /root/build/build.sh,则调用此脚本文件编译源码的 STAX 脚本如代码 8 所示。


代码 8:编译源码的 STAX 脚本
                
<stafcmd>
  <location>'buildserver'</location>
  <service>'process'</service>
  <request>'start command "/root/build/build.sh" username "root" password "password" 
    workdir "/root/build" wait stdout /root/build/build.log'</request>
</stafcmd>
      

        代码 8 指定以用户 root 的身份来运行编译脚本 build.sh,并且将输出重定向到文件 build.log 中,以便分析编译运行的过程和结果。另外如果编译脚本 build.sh 用到某些和路径相关的命令,比如相对路径,则需要指定工作目录。 workdir 指定工作目录为 build.sh 所在的目录,这相当于在 /root/build 目录中运行 build.sh 命令。

3.4 部署测试

        更新包编译完成后,需要将编译之后的更新包分发到部署服务器和测试服务器,然后部署服务器部署程序,测试服务器调用测试程序来测试更新包。将更新包分发到部署和测试服务器的 STAX 脚本如代码 9 所示。


代码 9:更新包分发
                
<script> serverList = ['deployServer', 'testServer'] </script>
<iterate var = "server" in="serverList">
  <testcase name = "'buildCopy'">
    <if expr="server != 'deployServer'">
      <stafcmd>
        <location>'buildserver'</location>
        <service>'fs'</service>
        <request>'copy DIRECTORY /root/build/result TODIRECTORY /root/build/result 
          TOMACHINE %s RECURSE KEEPEMPTYDIRECTORIES'  % server </request>
      </stafcmd>
    <else>
      <stafcmd>
        <location>'buildserver'</location>
        <service>'fs'</service>
        <request>'copy DIRECTORY /root/build/result TODIRECTORY C:/build/result 
          TOMACHINE %s RECURSE KEEPEMPTYDIRECTORIES'  % server </request>
      </stafcmd>
    </else>
    </if>
  </testcase>
</iterate>
      

        代码9使用了判断语句来判断目标机器的平台,根据目标机器的平台选择不同的文件路径。当只有两台机器时,使用 if-else 的好处并不明显,甚至还不如分别向 windows 和 linux 机器上单独拷贝方便。 但考虑如下的情况,环境中有大量的部署服务器和测试服务器,这时一台一台的拷贝显然很难维护,而使用 if-else 加上循环的方式则要方便的多。

        部署测试的 STAX 脚本如代码 10 所示。


代码 10:部署测试
                
<sequence>
  <stafcmd>
    <location>'deployServer'</location>
    <service>'process'</service>
    <request>'start command "C:/build/deploy.bat > deploy.log" username "Administrator" 
      password "password" workdir "C:/build" wait '</request>
  </stafcmd>
  <stafcmd>
    <location>'testServer'</location>
    <service>'process'</service>
    <request>'start command "/root/build/runtest.sh" username "root" password "password" 
      workdir "/root/build" wait stdout /root/build/runtest.log'</request>
  </stafcmd>
</sequence>
      

        代码 10 中在 Windows 和 Linux 平台运行命令的方式有细微的区别,在 Windows 中我们使用> deploy.log来重定向输出,而在 Linux 中我们使用 stdout 来重定向输出。具体的原因将在经验教训中说明。

        至此,我们已经完成了更新包下载、分发、编译、部署和测试的整个过程,根据本节提供的示例代码,读者应该能够根据自己的环境编写出适合环境的STAX脚本。 另外,读者也可以自定义一些附加的操作,比如在更新代码之前,先把原有的代码删除;在测试完毕后,把分散于各个服务器上的日志汇总到一台集中的机器上;甚至和 CruiseControl 结合实现定时或者基于 CVS 上的代码更新来运行,以及将测试的日志发布到某台服务器上。

4.经验教训

        虽然现在 STAF(STAX) 已经比较完善,但在实际使用的过程中,我们还是发现了一些问题。本节介绍这些问题以及解决或者避免这些问题的方法,使读者在碰到这些问题时能够及时的解决它们。

4.1 使用 STAFCMD 的 process 服务,不要使用 STAX 的 process 标签

        为了编写 STAX 脚本方便,STAX 定义了 process 标签用来调用 STAF 中的进程(process)服务。但在使用过程中,发现 STAX 的 process 标签在某些情况下存在着一定的问题,其所调用的进程不能返回。 代码 11 的 STAX 脚本就是这样一个例子。


代码 11:process 标签不能返回

                
<process>
  <location>'linuxServer' </location>
  <command>'ls'</command>
  <parms>'-l'</parms>
</process>
      
        代码 11 调用 Linux 机器上的 ls 命令,并且传给 ls 命令 -l 参数。使用 STAXMonitor 执行此脚本,任务始终无法返回。因此推荐使用 stafcmd 标签直接调用 STAF 服务,如代码 12 所示。


代码 12:修改后的任务

                
<stafcmd>
  <location>'linuxServer'</location>
  <service>'process'</service>
  <request>'start command "ls" parms "-l" wait '</request>
</stafcmd>
      

4.2 在 Windows 平台上不要使用 STDOUT 重定向输出

        STAF 使用 STDOUT 来为启动的进程重定向输出,类似于>参数,比如 ls -l > ls.log。但在 Windows 平台使用中,我们发现使用 STDOUT 会带来一些问题。 如果调用的进程为批处理文件,并且此批处理文件中包含某些特定的功能,比如 xcopy,则 xcopy 将不会工作。另外一些检查目录和文件的命令也不能与 STDOUT 共存。 在 Linux 环境中并不存在这样的问题。因此,如果需要在 Windows 平台中使用重定向输出的功能时,建议使用>来重定向输出。

4.3 使用 STAXMonitor 监控任务的执行情况

        对于 STAF 和 STAX 新手来说,尽可能使用 STAXMonitor 来监控 STAX 任务的执行情况。STAXMonitor 为我们提供了足够详细的信息,比如测试用例的执行结果,任务执行的消息,当前执行的命令。 使用 STAXMonitor 有助于我们对正在进行的任务进行分析并且监控其执行情况和结果。

STAXMonitor 在 STAX 安装文件中,可以用java -jar STAXMon.jar来启动 STAXMonitor。STAXMonitor 的界面如图 3 所示。

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号