【第22期】观点:IT 行业加班,到底有没有价值?

Ⅰ.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 开始,所有的测试在事件句柄内处理。


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

相关文章推荐

数据库查询之(Ⅰ)条件(比较、范围、集合、模糊、空值)查询

查询(select)的基本结构: <img src="http://img.my.csdn.net/uploads/201210/22/1350890536_7555.jpg" alt

!!!Chapter 6 Synchronization

Cooperating processes can either directly share a logical address space(multithread) or be allowed t...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

jstl C标准标签库Ⅰ

jstl C标准标签库Ⅰ 前言 从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。 作者:杨通杆(http://hexun....

第Ⅰ部分 Squish教程

这篇Squish用户指南解释了所有Squish最常用的特性,提供了一些如何最好的使用Squish的示例。 该篇指南主要致力于Squish的脚本支持,不同的脚本语言支持,这里我们只给出Python的示例...

JMS的学习总结Ⅰ

JMS的学习总结Ⅰ <span lang="en-US" style="font-fa
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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