Ⅰ.6 如何创建和使用Synchronization Points

原创 2015年11月21日 20:43:32

当Squish纪录脚本时,事件recorder必须确保同步了AUT和测试脚本。实现此功能的方法是recorder自动的插入snooze语句到脚本中。这些语句强制脚本等待一定的时间(该时间可能是个小数如2.5秒)。有必要确保脚本回放的速度和纪录时的速度一致。例如,如果用户等待弹出某个窗口,脚本将等待同样的时间。阻止Squish过快的运行AUT是很重要的,这样AUT的toolkit才能跟得上。

使用snooze 语句是最简单的同步AUT和测试脚本的方法。但是在很多情况下,只是简单的等待一定的时间还是不够的。例如,如果在一台运行快的机器上记录一个脚本,然后在一个运行慢的机器上回放脚本,snooze 等待的时间可能就不足够长了。

另一个同步的方法是使用 waitForObject 语句代替snooze 语句。如果使用了waitForObject 函数,在记录每个行为之前,将会纪录一条waitForObject 语句,这样才可以访问对象。因此重播时,Squish将会等待指定对象出现并且可访问(即可见),而不是等待一定的时间。自打证明使用waitForObject 函数比使用snooze 更可信,当记录测试案例时自动将它设为默认方法。

第三种方法是使用waitFor 函数。这个函数在指定条件为true之前一直阻塞,或者,在一个指定的时间过期之前一直阻塞。 条件可以是从一个属性到一个复杂的脚本语句中的任何事物。下面的例子等待弹出一个特定的对话框,如果在5秒内没有弹出将会纪录下一条数据错误的日志。

ok = waitFor("object.exists(':Address Book - Save As_QFileDialog')", 5000)
if not ok:
    test.fatal("AddressBook Save As dialog didn't appear")

下面是另外一个例子:如果没有指定超时时间它将“永远”等待。因此如果未知文件没有出现或者未被创建,测试脚本将会卡住。

waitFor("QFile.exists('addresses.tsv')")

下面的例子将会花2秒钟等待OK按钮变成可用的。waitFor 函数反复计算是否给出了代码的第一个参数,并且一旦机算代码的值为true它将返回true;如果在它的第二个参数指定的微秒时间内没有将代码计算为true它将返回false。

button = findObject(":Address Book - Add.OK_QPushButton")
enabled = waitFor("button.enabled",2000)
if not enabled:
    test.fatal("OK Button has not been enabled")

这些例子展示了各种不同的synchronization points。传递给waitFor 函数的条件可以使任何可计算的脚本代码,包括函数调用,在创建synchonization points方面没有限制。

更多的关于Web应用程序的synchronization和先进的AJAX synchronization可以参考Ⅰ.3.8。

 

事件驱动的测试

通过将waitFor 函数和事件句柄(Ⅰ.5)结合在一起,有可能使测试脚本执行等待处理完一个指定的事件。可以通过安装一个事件句柄实现此功能, 设置一个全局变量(如,eventHandled)为false,将全局变量作为条件传给waitFor 函数。在事件句柄中,只要设置eventHandled 的值为true就完成了。

使用这种方法使创建完全的事件驱动的测试成为可能,测试的main 函数只在事件驱动测试中安装事件句柄,然后由调用waitFor 开始,所有的测试在事件句柄内处理。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Ⅰ.17 如何创建和使用Verification Points

verification points是自动化测试中一个核心特性。为创建一个verification point,我们必须首先运行AUT这样它可以运行到我们想验证的状态。这是通过使用verificat...
  • dzh0622
  • dzh0622
  • 2015年12月04日 14:58
  • 252

A Bag of 3d points 6

  • 2015年02月10日 17:04
  • 271KB
  • 下载

Boost.Interprocess使用手册翻译之六:同步机制(Synchronization mechanisms)

[+] 六.          同步机制 同步机制概述 互斥量 条件变量 信号量 升级互斥量 通过移动语义转移锁 文件锁 消息队列   同步机...

Boost.Interprocess使用手册翻译之六:同步机制(Synchronization mechanisms) .

2012-02-07 18:13 444人阅读 评论(0) 收藏 举报 六.          同步机制 同步机制概述 互斥量 条件变量 信号量 升级互斥量 ...

Boost.Interprocess使用手册翻译之六:同步机制(Synchronization mechanisms)

六.          同步机制 同步机制概述 互斥量 条件变量 信号量 升级互斥量 通过移动语义转移锁 文件锁 消息队列   同步机制概述 ...

leetcode系列(6)Max Points on a Line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line...
  • macchan
  • macchan
  • 2014年10月19日 10:58
  • 521

Boost.Interprocess使用手册翻译之六:同步机制(Synchronization mechanisms)

六.          同步机制 同步机制概述 互斥量 条件变量 信号量 升级互斥量 通过移动语义转移锁 文件锁 消息队列   同步机制概述 ...

Boost.Interprocess使用手册翻译之六:同步机制(Synchronization mechanisms)

六.          同步机制 同步机制概述 互斥量 条件变量 信号量 升级互斥量 通过移动语义转移锁 文件锁 消息队列   同步机制概述...

博为峰Java技术题 ——JavaSE 创建对象Ⅰ

[使用new关键字] 博为峰小博老师: 这是最常见的创建对象的方法,并且也非常简单。通过使用这种方法我们可以调用任何我们需要调用的构造函数。   [class类的newInst...
  • bwf_erg
  • bwf_erg
  • 2016年11月22日 10:09
  • 124

Ⅰ.2.6.4 如何测试 Table Widgets,以及使用外部数据文件(Qt 4)

这个部分,我们将了解如何测试 csvtable 程序。这个程序使用了 QTableWidget 来展现一个 .csv(以逗号间隔开值)文件的内容,它提供了基本的处理数据的功能——插入行、删除行、编辑格...
  • dzh0622
  • dzh0622
  • 2015年11月18日 13:58
  • 307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.6 如何创建和使用Synchronization Points
举报原因:
原因补充:

(最多只允许输入30个字)