STAX XML 脚本用于灵活控制 STAF Agent 的运行的事务,并可以作为通用框架来重用,该脚本是实现并发执行的核心,主要实现思想:根据性能测试的负载定义,把每个产生负载的机器(安装了 STAF 的远程机器)定义为 虚拟用户,根据一系列参数输入(如 IP 列表,初始启动虚拟用户,负载稳定时长,负载爬升高度等)传入 XML 调度文件,执行 XML 任务时,先针对每个虚拟用户创建一个任务,并且挂住(STAX 提供的 hold 方法)所有的任务,然后
并发(利用 STAX 的 paralleliterate 方法)释放指定数目的虚拟用户任务,每隔一段时间(即负载稳定一段时间),并发释放一定数目的虚拟用户任务,于是虚拟用户开始执行,根据 XML 中调用的命令,运行定义好的一系列事务,每个事务结束后继续执行下一个事务,重复释放的动作,就可以实现负载的阶梯上升,从而观察系统在不同的负载,以及随着负载渐增时的性能表现。
主要实现是基于下面的示例,详细范例请参考 Getting Started with STAF V3 Guide
并发执行元素 paralleliterate
清单 1. XML 并发执行的元素
<paralleliterate var="machine" indexvar="i" in="machineList" maxthreads="20">
<block name="'#%s: %s' % (i + 1, machine)">
<call function="'RunTest'">machine</call>
</block>
</paralleliterate>
|
挂住和释放任务
清单 2. XML 挂住和释放任务
<function name="ReleaseBlock" scope="local">
<function-list-args>
<function-required-arg name="parentBlock" />
<function-required-arg name="blocknameList" />
<function-required-arg name="sleeptime" />
</function-list-args>
<sequence>
<script>
import time
time.sleep(int(sleeptime))
</script>
<message>'ReleaseBlock: sleep time=%s,
then paral to release specific blocks num:%s' %(sleeptime,
len(blocknameList))</message>
<paralleliterate var="block" indexvar="i" in="blocknameList">
<sequence>
<message>'ReleaseBlock: release blocks:%s.%s'
%(parentBlock,block)</message>
<script>
BlockChain = '%s.%s' %(parentBlock, block)
</script>
<release block="BlockChain" />
</sequence>
</paralleliterate>
</sequence>
</function>
|
编写模拟用户行为的 Autoit 脚本:
1). 模拟用户行为的用例示范:
表 1. 用例设计示例
| 用例序号 | 行为 | 响应时间检查点 | |
|---|---|---|---|
| 用例1:浏览网页 | |||
| 1-1 | 按下 Win+R 组合键 | ||
| 1-2 | 在“运行”中,输入浏览器路径,回车 | ||
| 1-2 | 思考时间 | ||
| 1-3 | 按顺利访问 URL | 加载完每个网页的时间 | |
| 1-4 | 关闭浏览器 | ||
| 用例2: 记事本输入 | |||
| 2-1 | 按下 Win+R 组合键 | ||
| 2-2 | 打开 notepad,输入文字 | 输入的文字完全显示的时间延迟 | |
| 2-3 | 思考时间 | ||
| 2-4 | 关闭记事本 | ||
| 用例3: 打开 Word 文档、翻页 | |||
| 3-1 | 按下 Win+R 组合键 | ||
| 3-2 | 打开 Word 文档 | ||
| 3-3 | 思考指定时间,翻页 | 从翻页动作发生到下页显示完全的时间 | |
| 3-4 | 关闭文档 | ||