1. 录制登录脚本
步骤 1. 启动 RPT 中的脚本录制器录制登录脚本,待由 RPT 启动的浏览器打开之后,关闭该浏览器的局域网代理服务器。
IE 设置的路径:Tools -> Connections -> LAN setting -> Proxy server
图 1. 浏览器中局域网设置界面
步骤 2. 启动另外一个浏览器实例,开启局域网 Proxy server。然后在这个浏览器中录制登录脚本。
步骤 3. 录制完登录脚本后,停止录制(关闭 RPT 启动的那个浏览器或者直接点击停止录制按钮)
图 2. RPT 客户端中停止录制按钮
2. 录制业务逻辑脚本
步骤 4. 启动录制业务逻辑脚本录制。操作同步骤 1
步骤 5. 开启之前手动打开浏览器的 Proxy server,开始在这个浏览器中继续录制业务逻辑脚本。
步骤 6。录制完业务逻辑脚本后,停止录制。操作同步骤 3
3. 录制注销脚本
步骤 7. 录制过程同步骤 4,步骤 5,步骤 6,只是录制脚本为注销
4. 组合脚本,添加数据关联
步骤 8. 添加自定义代码维护数据关联关系
在登录的测试项中向 RPT 的 DataArea 中缓存数据。
RPT 的 Data Area 中的数据有三种生命周期,第一个是 TEST 域,存储数据的生命周期仅限于自定义代码所在的测试项。第二个是 VIRTUALUSER 域,存储数据的生命周期等同于执行到该代码段的虚拟用户的生命周期。第三个是 ENGINE 域,整个测试代理中运行的测试均可以使用 ENGINE 域中的数据。
由于登录,业务逻辑,注销被分别录制为 3 个测试项,3 个测试项之间会用一个测试调度串联起来,因此选择 VIRTUALUSER 域的 Data Area 来在同一个用户的测试脚本上下文间传递信息。
清单 1. 在同一个用户的测试脚本上下文间传递信息
public String exec(ITestExecutionServices tes, String[] args) { String acount = args[0]; IDataArea dataArea = tes.findDataArea(IDataArea.VIRTUALUSER); dataArea.put(user_KEY, acount); return null; } |
业务逻辑的测试项从 DataArea 中取得数据
清单 2. 从 DataArea 中取得数据
public String exec(ITestExecutionServices tes, String[] args) { IDataArea dataArea = tes.findDataArea(IDataArea.VIRTUALUSER); String account = (String) dataArea.get(user_KEY); return ACCOUNT; } |
3.2 通过自定义代码实现脚本间同步
用 RPT 编写的测试调度中引用的不同测试项之间通常会存在某种数据层的制约关系。比如,测试项 1 需要给一个变量赋于一个值,测试项 2 则需要从这个变量中读一个值。两个测试项分别被不同的用户执行,在最开始时,肯定是执行测试项 1 的用户先执行,之后是执行测试项 2 的用户,但是由于测试项在调度中都是无限重复的执行下去,数据总会有不同步的现象,即测试项 2 先于测试项 1 被执行,此时会造成整个测试场景混乱的情况。
本小节介绍的方法是通过 ENGINE 域的 DataArea 来实现测试调度中不同脚本间的数据同步从而保证整个测试场景长时间的正常执行。
下面是一个场景,测试项 1 提交一个申请,并设置了一个提交标识。测试项 2 等待申请,判断是否有提交申请标识,若有则处理该申请并停止循环。
测试项 1 提交一个申请。通过自定义代码“test.ApplyFor”将提交标志信息存放到 ENGINE 域的 DataArea 中,测试脚本如下:
图 3. 测试项 1 示例
自定义代码“test.ApplyFor”如下:
清单 3. 自定义代码“test.ApplyFor”
public String exec(ITestExecutionServices tes, String[] args) { IDataArea eDataArea = tes.findDataArea(IDataArea.ENGINE); String item = args[0]; eDataArea.put(ITEM_KEY, ITEM); return null; } |
测试项 2 审批测试项 1 的申请。首先从 ENGINE 域的 DataArea 取得提交申请标志信息,如果申请标志信息为空,则等待一段时间,再继续提取提交申请标志信息,判断是否为空,如此循环下去,直到申请标志不为空则停止循环。
图 4. 测试项 2 示例
判断申请标志是否为空的自定义代码“test.CheckApply”:
清单 4. 自定义代码“test.CheckApply”
public String exec(ITestExecutionServices tes, String[] args) { IDataArea eDataArea = tes.findDataArea(IDataArea.ENGINE); String item = (String) eDataArea.get(ApplyFor.ITEM_KEY); if (item != null) return "PASS"; return "FAIL"; } |
原文转自:http://www.ibm.com/developerworks/cn/rational/r-cn-rptlongrun/index.html