Ⅰ.6 如何创建和使用Synchronization Points
来源:互联网 发布:sketch软件介绍 编辑:程序博客网 时间:2024/05/22 05:21
当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 开始,所有的测试在事件句柄内处理。
- Ⅰ.6 如何创建和使用Synchronization Points
- Ⅰ.17 如何创建和使用Verification Points
- 如何创建和使用哈希表
- 如何创建和使用线程
- !!!Chapter 6 Synchronization
- lesson 6 threads synchronization
- Synchronization
- synchronization
- synchronization
- 如何创建和使用Web服务 [转帖]
- 如何创建和使用Web服务
- 如何创建和使用Web服务
- 如何创建和使用Web服务
- 如何正确创建DLL和使用DLL
- 如何创建和使用Web服务
- 如何创建和使用Web服务
- SQLSREVER如何创建和使用动态游标
- SQLSREVER如何创建和使用动态游标
- 郭天祥ARM9架构嵌入式linux培训视频教程
- 15 java.util.BitSet
- 网络安全学习网站
- UNIX编程——管道和FIFO
- HTML+CSS+JavaScript+JQuery+JSP学习笔记
- Ⅰ.6 如何创建和使用Synchronization Points
- java super
- LintCode-剑指Offer-(174)删除链表中倒数第n个节点
- 关于Popupwindow的一些理解
- Leveldb源码分析之Slice
- Codeforces 599A Patrick and Shopping 【水题】
- 【FastDev4Android框架开发】RecyclerView完全解析之结合AA(Android Annotations)注入框架实例(三十)
- 算法导论 第三章 函数的增长 3.2习题个人解答
- 数学史上著名的常量