QTP恢复方案用于“跳过”连续的FAILED步骤,超时为0 - 如何恢复原始超时值?

时间:2010-11-10 12:41:39

标签: timeout automated-tests qtp gui-testing

假设我使用QTP恢复方案管理器将回放同步超时设置为0.处理程序将返回“继续下一个语句”。

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

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

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

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

然后当然在下一个传递回放步骤时,我想要恢复原始超时值。我怎么能这样做? 这是我的问题。

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您有许多控件,其中一些可能会丢失,并且您知道在您提到的10秒后(第一次超时发生时),将不再显示任何内容,那么您可以使用带有timeout参数的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,这将节省您的时间。