代码之家  ›  专栏  ›  技术社区  ›  TheBlastOne

QTP恢复场景用于“跳过”具有0超时的连续失败步骤-如何还原原始超时值?

  •  1
  • TheBlastOne  · 技术社区  · 15 年前

    假设我使用QTPs恢复方案管理器将播放同步超时设置为0。处理程序将返回“continue with next statement”。

    我会这样做,以确保任何后续回放语句不会浪费他们的时间等待下一个不存在/不匹配的步骤失败之前:

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

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

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

    当然,接下来 通过 这是我的问题。

    不能定义为已通过的步骤调用的恢复方案函数。

    我目前正在考虑为Reporter.ReportEvent设置一个方法函数,并在那里“嗅探”传递的日志条目。我将在场景恢复函数中安装该方法函数,该函数将超时设置为0。然后,当“sniffer”函数在以下回放步骤中检测到状态为PASSED的ReportEvent调用时,我将重置所有内容(即恢复原始超时,并卸载method函数)。(不过,我99%肯定,单击和.Set方法不会调用ReportEvent来写入其结果状态…因此此选项可能不起作用。)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Motti    15 年前

    听起来你的测试设计不正确,如果你找不到对象,为什么还要继续?

    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
    
        2
  •  0
  •   user2091741    13 年前

    如果您有许多控件,其中有些可能丢失,并且您知道在10秒之后(当第一次超时发生时),将不再显示更多的内容,然后可以使用ItHealt方法使用超时参数。 像这样的:

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