在 Rational Functional Tester 测试脚本中实现对时间的控制

发表于:2012-10-30 10:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:刘哲 宗东军 邢静    来源:51Testing软件测试网采编

  简介:在使用 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();

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号