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 启动界面
配置 XML 参数,如下图所示
图 8. STAX XML 参数配置界面
提交 XML 任务
STAX 任务执行状态如下所示
图 9. 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> |