Ⅰ.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
  • 270

Android SQLite数据库创建和使用实战(一)

转载地址:http://blog.csdn.net/yanbober/article/details/20688273 Android SQLiteSQLiteOpenHelper数据库...
  • qq_20816947
  • qq_20816947
  • 2015年08月06日 11:05
  • 307

怎样创建和读写共享内存?

 读写的时候怎样锁定? --------------------------------------------------------------- 在16位Windows中,有好几种方法可以共享数...
  • sky04
  • sky04
  • 2009年02月19日 18:06
  • 1846

创建和使用私有仓库

环境:Centos7.21. 修改 Docker 配置 客户端和仓库之间使用 https 协议,默认 docker push 只能使用 127.0.0.1,如果需要支持外部 push 到此仓库需要对...
  • u010472499
  • u010472499
  • 2017年12月28日 14:58
  • 42

Android中Sqlite的创建与使用

SQLite是一款轻量级的关系型数据库,它的运行速度很快,占用资源少,通常只需要几百K的内存就足够了,因而现在的主流移动设备都使用SQLite作为复杂数据的存储引擎。对于Android来说,系统内置了...
  • qq_35549248
  • qq_35549248
  • 2017年09月21日 13:45
  • 229

Android编程之Sqlite数据库的建立与使用

主Activity: package edu.hrbeu.SimplePreferenceDemo; import edu.hrbue.SimplePreferenceDemo.R...
  • did_you
  • did_you
  • 2017年11月05日 22:57
  • 38

c1xx : fatal error C1027: 创建和使用预编译头时的 /Ym 值不一致

今天用VS2010编译一个工程,突然报出 “c1xx : fatal error C1027: 创建和使用预编译头时的 /Ym 值不一致”这个错误,最后在网上找到解决方案,参见http://blog....
  • zhw_giser
  • zhw_giser
  • 2016年09月20日 00:13
  • 1630

android模拟器创建和使用SD卡

1.创建一个SD卡镜像文件 打开cmd,进入Android SDK安装路径下的tools目录下,输入如下命令:  mksdcard 1024M sdcard.img 该命令会在当前目录下生成一个s...
  • android_lee
  • android_lee
  • 2011年08月06日 11:29
  • 2303

Oracle中索引的创建和使用

OLTP系统索引创建 创建索引的作用 1、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 3、可以加速表和表之间的连接,...
  • u010383786
  • u010383786
  • 2016年09月07日 13:38
  • 2124

C++中静态链接库创建与使用

演练:创建和使用静态库 (C++) Visual Studio 2013 其他版本 此分步演练演示如何创建用于 C++ 应用的静态...
  • wzhwhust
  • wzhwhust
  • 2016年11月24日 16:04
  • 1269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.6 如何创建和使用Synchronization Points
举报原因:
原因补充:

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