【问题标题】:Getting error information when executing recovery scenario执行恢复方案时获取错误信息
【发布时间】:2016-06-07 01:45:46
【问题描述】:

首先我需要完成什么... 如果测试失败,它会打开一个网络浏览器,我需要关闭它。我不能只关闭 iexplore.exe,因为可能还有其他浏览器窗口打开了我想保持打开状态。

现在... 我有一个恢复场景,它会在我关闭特定浏览器窗口的测试执行中触发任何错误。当测试失败时,它会启动并关闭浏览器。出色的。问题是测试被标记为通过。我可以使用reporter.reportevent 使其失败,但我仍然错过了有关错误的数据。

如果我禁用恢复方案,测试会正确失败,并且我有一堆关于测试失败原因的信息。是否可以将该信息传递给恢复方案?所以我可以关闭浏览器,测试失败并获得有关问题的信息。

【问题讨论】:

    标签: qtp hp-uft


    【解决方案1】:

    这实际上取决于您的测试如何失败。恢复方案非常适合处理完全不可预测的情况 - 例如浏览器窗口在不可预测的时间完全崩溃,或网络连接因任何原因而中断,或者更糟糕的是,出现一些 nag 屏幕提供升级到最新的操作系统并接管屏幕...

    如果您的脚本在可预测的点上失败了,这样您就可以添加 IF 语句来检查以确保您的下一步是可行的(即检查 button.exists 是否存在),那么您不需要依赖恢复场景 - 您将直接启动失败测试过程。

    这就是我要做的——我有一个名为 FailTestBecause() 的函数,它接受一个参数——一个包含失败原因的字符串(我知道原因是因为 if 语句包装了对该函数的调用)

    FailTestBecause() 首先设置一个指示失败的标志,将失败消息记录到报告者、日志和我自己的错误文件中,然后尝试触发一个名为“完成测试”的操作。如果 action: Finish Test 不存在,则使用 E​​xittest() 优雅地退出。

    FinishTest 是我的测试中的最后一个操作,当它开始时,它会检查错误标志。无论哪种方式,它的工作是将所有剩余的文件上传回 QC/ALM。这样,我总能在脚本实际停止之前收集我的测试数据并上传到 QC。

    我的代码大量使用了失败检查。这是一个例子......

    Browser("Trade").Page("Login Page").WebEdit("User ID").Set User_ID
    Browser("Trade").Page("Login Page").WebEdit("Password").SetSecure User_Password
    Browser("Trade").Page("Login Page").WebButton("Login").Click
    
    Do Until Browser("Trade").Page("Main Page").Exist(0)
      If Browser("Trade").Page("Login Page").WebElement("Login Failed").Exist(0) then 
        FailTestBecause "Login Failed, user credentials didn't work"
      ElseIf Browser("Trade").Page("Challenge Questions").Exist(0) then
        say "Found Challenge Questions Screen, handling it..."
        RunAction "Handle Challenge Questions", OneIteration
      ElseIF Browser("Trade").Page("Create Password").Exist(0) then
        FailTestBecause "Detected new password, requires manual change"
      ElseIf not Browser("Trade").Exist(0) then
        FailTestBecause "Browser page crashed?"
      Else
        FailTestBecause "Something (unhandled) went wrong, please review log"
      End If
    Loop
    

    经常检查故障。毕竟,我们是测试人员。

    【讨论】:

    • 诀窍是我想确保我在测试开始时打开的浏览器在最后关闭,即使测试因任何原因失败。我可以将所有内容都包含在条件语句中,但我试图让事情尽可能简单,并拥有所有逻辑,或者至少大部分逻辑,而不是脚本本身。如果我只知道如何使用它们,恢复方案似乎是一件好事......
    • 需要明确的是,我通常不会“将所有内容都包含在条件中”......我只是在假设可以安全地开始将数据输入 UAT 之前对特定控件进行 .exist 签入。这让我可以自己控制 UAT 故障。
    • 我深入研究了恢复方案的工作原理(在文档中),我看到的使用恢复方案的最大问题是:在恢复方案完成后,它希望 A) 在附近继续执行它停止了,B)继续下一个动作或迭代,C)重新开始整个测试,或 D)退出。这意味着要执行您想做的事情,您需要在恢复方案本身内处理所有问题后处理(收集崩溃数据、报告等),然后让它结束测试。似乎没有“从 X 点继续”的选项。
    • 为努力干杯。另外我并不是说使用条件不好,我也使用它们,它只是不能完全解决我的问题。在测试错误的恢复场景启动后,它会结束测试,这对我来说很好,因为我不需要继续测试。问题在于问题后处理,当恢复方案启动时,有关错误的信息是否丢失?难以置信。好吧,我可能不得不这样做 try catch 风格作为一种解决方法......
    • 在恢复场景中您可以做的一件事是调用一个函数...在恢复场景结束测试之前,您应该能够在该函数中收集您需要的信息...
    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2012-05-24
    • 2018-10-10
    相关资源
    最近更新 更多