1

假设我使用 QTPs 恢复场景管理器将播放同步超时设置为 0。处理程序将返回“继续执行下一条语句”。

我这样做是为了确保任何以下播放语句都不会在失败之前浪费时间等待下一个不存在/不匹配的步骤:

我有很多 GUI 测试会卡住,因为假设如果缺少 10 个控件,它们的(连续)播放步骤会在失败之前产生 10 个超时等待。如果播放超时为 30 秒,我会失去 10x30 秒 = 5 分钟的执行时间,而一次等待 30 秒就足够了(因为应用程序不再更改——我们已经等待了一个完整的超时时间)。

现在,如果我有 100 个测试用例(=动作迭代),这可能会发生 100 次,浪费了 500 分钟的测试执行时间窗口。

这就是为什么我想出一个恢复场景函数的想法,在第一个失败的播放步骤之后/之后将超时设置为 0。这将加快速度,同时跳过正确失败的步骤,但不会影响识别下一个匹配的 GUI 上下文(创建通过步骤)的精度/可靠性。

然后当然在下一个通过的播放步骤中,我想恢复原始超时值。我怎么能那样做?这是我的问题。

无法定义为 PASSED 步骤调用的恢复方案函数。

我目前正在考虑为 Reporter.ReportEvent 设置一个方法函数,并在那里“嗅探” PASSED 日志条目。我会在将超时设置为 0 的场景恢复函数中安装该方法函数。然后,当“嗅探器”函数在以下播放步骤之一期间检测到具有 PASSED 状态的 ReportEvent 调用时,我将重置所有内容(即恢复原超时,并卸载方法功能)。(但是,我 99% 确定 .Click 和 .Set 方法不会调用 ReportEvent 来写入它们的结果状态……所以这个选项可能不起作用。)

更好的想法?这真的让我很烦。

4

2 回答 2

2

在我看来,您的测试设计不正确,如果您找不到对象,为什么还要继续?

一种可能的(非恢复方案)解决方案是用于RegisterUserFunc覆盖您正在使用的方法,以便obj.Exist(0)在运行所需的方法之前执行。

Function MyClick(obj)
    If obj.Exist(1) Then
        obj.Click        
    Else
        Reporter.ReportEvent micFail, "Click failed, no object", "Object does not exist"
    End If
End Function

RegisterUserFunc "Link", "Click", "MyClick"
RegisterUserFunc "WebButton", "Click", "MyClick"
''# etc
于 2010-11-10T13:25:18.753 回答
0

如果您有许多控件可能缺少一些控件,并且您知道在您提到的 10 秒后(当第一次超时发生时),不会再显示任何内容,那么您可以使用带有超时参数的 exists 方法。像这样的东西:

timeout = 10

For Each control in controls
  If control.exists(timeout) Then
    do something with the control
  Else
    timeout = 0
  End If
Next

现在只有第一次超时将是 10 秒。您的控件集合中的每个后续超时都将超时设置为 0,这将节省您的时间。

于 2013-02-20T15:04:27.703 回答