在RFT中实现对时间的控制
作者:网络转载 发布时间:[ 2012/10/30 10:50:12 ] 推荐标签:
简介:在使用 Rational Functional Tester(RFT)实施自动化测试时,脚本的不稳定往往是由于对时间的把控不够好所导致的。本文将介绍一些有关在 RFT 自动化测试脚本中控制时间方面的经验。
引言
您肯定遇到过测试脚本的执行结果有时成功有时失败。这也是在做自动化测试项目中困扰我们的一个问题。在长期的项目实践中我们发现脚本的不稳定性主要是由于脚本中代码对时间把控的不够好导致的。测试脚本和 AUT 是在两个不同的进程中运行,缺少同步机制。脚本中的代码在不恰当的时间点对测试对象进行操作很容易导致意想不到的结果。比如模式对话框关闭时,还没有完全消失,对其父窗口进行操作,将导致异常发生。过快的文字输入,测试对象来不及接收,将导致测试数据不完整。本文将介绍一些实际项目中积累的经验,希望对 Rational Functional Tester 初学者有所帮助。
调用适当的 API 来确保测试对象处于正确的状态
有些 GUI 对象会出现的特别慢。这种的情况下,可以用 TestObject.waitForExistence() 等待足够长的时间后再对其进行操作。例如代码清单 1 所示。
清单 1.
button().waitForExistence(60, 5);
button().click();
相反有些 GUI 对象会消失很慢,过快的执行下一步操作导致脚本失败也是常见现象。RFT 并没有提供类似 waitForExistence 的方法来等待对象消失。可以通过代码清单 2 所示实现一个 waitForInexistence。像代码清单 3 所示来使用它。
清单 2.
/**
* 判断测试对象在指定时间内是否消失了
* @param testObject 测试对象
* @param timeout 大等待时长
* @param interval 重新检测的时间间隔
* @return
*/
public boolean inexists(TestObject testObject, double timeout, double interval) {
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < timeout * 1000) {
if (!testObject.exists())
return true;
sleep(interval);
}
return !testObject.exists();
}
/**
* 等待测试对象消失。如果在指定时间内测试对象没有消失,将抛出异常
* @param testObject 测试对象
* @param timeout 大等待时长
* @param interval 重新检测的时间间隔
*/
public void waitForInexistence(TestObject testObject, double timeout, double interval) {
if (!inexists(testObject, timeout, interval))
throw new RuntimeException("TestObject doesn't disappear!");
}
清单 3.
// 关闭 foregroundDialog,但它需要做些清理工作,会消失的很慢。foregroundDialog().close();
// 我们需要等待一下。否则,下一步的 click 可能被 foregroudialog 挡住
waiForInexistence(foregroundDialog(), 10, 2);
backgroundDialog().click();
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11