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 | 关闭文档 |