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>
|