基于 STAF/STAX + Autoit 的性能测试方案实现桌面云扩展性测(4)

发表于:2012-03-16来源:IBM作者:董文涛点击数: 标签:性能测试
2). 定义函数调用方法 2. 通过 STAX 远程运行带命令行参数的 Autoit 脚本示例: Autoit 程序路径 Common_ web _view C:\\TestDir\\ iexplore.exe index_chart.htm Microsoft Internet

  2). 定义函数调用方法

  2. 通过 STAX 远程运行带命令行参数的 Autoit 脚本示例:

  '"Autoit 程序路径" " Common_web_view" "C:\\TestDir\\" "iexplore.exe" "index_chart.htm" "Microsoft Internet Explorer" 5000 1 %s 20000 %s' %(machine, debug)

  说明:该条目模拟主机名为 machine 的用户通过 IE 打开本地的位于 C:\\TestDir\\ 下的 index_chart.htm 文件(也可以设置为实际的 URL),停顿 5 秒之后,执行翻页浏览,停顿,关闭 IE 等一系列操作(定义在函数体中),而对于 doc、xls、pdf 等文件,则调用另外写好的函数,该函数会自动检查刚打开的页面内容以及翻页后的内容,跟事先抓好的图片比对(图片比对只是衡量应用程序 GUI 延迟的一种较直接的方法,实际上可以通过 Windows 消息循环队列等机制来做程序延迟的统计),从而保存这两处窗口的刷新时间间隔,以上命令示例统计出:

  从打开 htm 文件到文件内容正确显示出来的时间

  从翻页的动作执行完后到第二页显示出来的时间

  可以自定义多个检查点,得到用户不同操作的时间延迟。指定 Microsoft Internet Explorer 用来保证用户是在正确的 IE 窗口所作的操作,确保桌面窗口处于最前端。Debug 参数在 XML 中做了统一定义,可以统一打开或者关闭 debug 开关 , 打开 debug,可以使用 dbgview 进行远程调试,该 Common_web_view 定义的行为循环 1 次,生成的日志文件以加上 machine 的前缀用以区分。

  3. 编写不用用户类型的 workload 配置文件

  为了便于修改脚本,采用模块化的方法,每种用户类型采用单独的 XML 文件,并且针对每种用户类型,分别有两套 AutoIt 函数接口,但是都编译在一个 exe 文件里面,针对每个 Load HTML Web Page 的事务,调用 Client_Action_v2.0.exe 程序执行,但是传入的参数有两套:

  Common_action_view1:该参数调用 AutoIt 程序的接口时不做响应时间捕获(主要考虑捕获响应时间对系统本身资源的消耗的影响,因为做图片比对时,对系统 CPU 有一定的资源消耗),也就是扩展性测试中的‘ N ’个并发用户所调用的部分

  Common_action_view2:该参数调用 AutoIt 程序的接口时自动进行响应时间的捕获,这就是扩展性测试中的‘ 1 ’个受监控的用户。

  4. 调试 / 运行单用户的步骤

  启动 STAX 并设置 XML 任务文件,如图 7 所示

  图 7. STAX 启动界面

图 7. STAX 启动界面

  配置 XML 参数,如下图所示

  图 8. STAX XML 参数配置界面

图 8. STAX XML 参数配置界面

  提交 XML 任务

  STAX 任务执行状态如下所示

  图 9. STAX 任务执行界面

图 9. STAX 任务执行界面

  监控测试运行图例,可以看到每个虚拟用户在某一时刻做什么事务,执行了多久,运行第几个事务循环,暂停或者启用某些个用户以及事务运行的日志输出。

  图 10. STAX 监控界面

图 10. STAX 监控界面

  查看大图。

  关于数据结果采集

  实时数据采集方式: 调用 STAX 提供的接口 returnfile,结果会实时输出到 STAX 的下面的面板,但是不够直观。

  清单 3. returnfiles 实时返回文件到 STAX Monitor 窗口

				
 <process> 
    <location>machName</location> 
    <command>cmd</command> 
    <stdout>'C:/temp.out'</stdout> 
    <stderr mode="'stdout'"/> 
    <returnstdout/> 
    <returnfiles>['C:/process1.inf', 'C:/process2.inf']</returnfiles>
 </process> 

  定期远程拷贝文件的方式,在数据文件较大较多的时候适宜使用

  清单 4. STAX 远程拷贝函数

				
 <function name="RemoteCopy" scope="local"> 
      <function-list-args> 
         <function-required-arg name="srcIP" /> 
         <function-required-arg name="srcFolder" /> 
         <function-required-arg name="dstIP" /> 
         <function-required-arg name="destFolder" /> 
         <function-required-arg name="regExpr" /> 
      </function-list-args> 
      <sequence> 
         <message>'Enter RemoteCopy function, srcIP=%s, srcFolder=%s, 
         dstIP= %s, destFolder=%s, regExpr=%s' %(srcIP, srcFolder, dstIP, 
         destFolder, regExpr)</message> 
 <script> 
 ImportMachine = 'local'
 ImportDirectory = '{STAF/Config/STAFRoot}/services/stax/libraries'
 </script> 
         <import machine="ImportMachine" file="'%s/STAXUtil.xml' % ImportDirectory" />
          <message>'Enter STAXUtilCopyFiles function, srcIP=%s, srcFolder=%s, 
          dstIP= %s, destFolder=%s, regExpr=%s' %(srcIP, srcFolder, dstIP, destFolder, 
          regExpr)</message> 
         <call function="'STAXUtilCopyFiles'">{ 'machine': srcIP, 'directory':
         srcFolder, 'toMachine': dstIP, 'toDirectory': destFolder, 'regularExpression':
          regExpr}</call>         
 <script> 
 [rc, numFilesCopied, errorList] = STAXResult 
 </script> 
         <message>'Exit STAXUtilCopyFiles function, srcIP:%s -- dstIP:%s. 
         rc=%s, numFilesCopied=%s, errorList= %s' %(srcIP,dstIP, rc, numFilesCopied,
          errorList)</message> 

         <call function="'STAXUtilCheckSuccess'">{ 'result': rc == 0, 'failMsg'
         : 'CopyFiles failed. RC: %s. Files copied: %s Error List: %s' % (rc,
          numFilesCopied, errorList), 'sendToMonitor': 1, 'recordStatus': 0 }</call> 
      </sequence> 
 </function> 

原文转自:http://www.ltesting.net