1

假设正在执行一个测试脚本并发生错误,有人可以解释 QTP 如何检测到它是一个错误吗?基本上我想知道QTP是如何检测到这个错误的?例如:也许某些变量会被持续监控以检查是否发生错误。

我查看了 Err.Number,但在错误发生后进行了修改。QTP 怎么知道 Err.Number 被修改了?

我只想批量运行测试脚本,当测试脚本失败时,我想将错误描述和测试脚本名称写入文件并跳过当前测试并执行下一个测试脚本。有任何想法吗?

4

2 回答 2

3

这可能对您的用处有限,因为我实际上是在说“编写您自己的测试执行引擎”,但它是完全可以实现的。只需从小处着手并逐步构建功能,您就会立即拥有满足您自己独特需求的酷炫产品。

虽然快速调用停止测试的错误可能很有用(可能在不查看详细步骤的情况下进行快速故障诊断),但请不要忽略包含详细步骤的报告。当测试失败时,您需要知道出了什么问题和原因,并记录导致该失败的操作。

尽管如此,这是满足您要求的一种方法:

  1. 使用 QTP API 使用您选择的受支持语言编写测试驱动程序,并在 QTP 中为每个测试触发单独的运行。调用Test.Run时,您可以使用RunResultsOptions结构控制结果的保存位置。在您的测试中,只需将“运行会话期间发生错误时”保留为“弹出消息框”,以便在发生错误时停止。如果您想要不同的行为,则使用“on error resume next / on error goto 0 / check Err.Number and Err.Description”块逐个处理它。永远不要将其切换为“继续下一步”。

  2. 运行完成后检查 Test.LastRunResults 返回的LastRunResults结构LastRunResults.Status将告诉您运行的状态,因此让您决定是否要继续执行步骤 #3 以提取失败详细信息。

  3. 每次运行后从结果文件夹中解析results.xml 。它将位于 {results 文件夹}\Report\results.xml。扫描 XML 以查找所有失败的步骤或仅扫描最后一个失败的步骤是微不足道的,然后您可以获取步骤详细信息并将它们以您选择的格式保存到另一个文件中。您将寻找具有属性 eType=User 的 NodeArgs 元素。然后,您可以在附近找到步骤的状态和步骤详细信息。如果除了 QTP 自动生成的日志记录之外,您还需要有关错误的更多信息,那么您需要在错误发生时捕获错误,并添加一些您自己的 Reporter.ReportEvent 语句以及更多显着信息。

  4. 用您的结果摘要文件做一些有趣的事情......

如果您希望将 QTP 本身用作一批测试的驱动程序(即按一次播放并运行所有测试)并因此从子测试或其他内容中捕获错误消息,那么我只想说:不要这样做除非您只是运行同一测试的多次迭代。使用 QTP 本身在一个史诗般的测试运行中运行所有测试是一种糟糕的方法,原因有很多,但我不打算在这里写一篇关于它的文章!

于 2013-10-10T16:36:50.300 回答
1

QTP reports that a test execution failed in one of the following situations

  • An object that should perform an action cannot be identified
  • When executing an action the action fails (e.g. illegal value)
  • A checkpoint fails, this means the test creator specified a state the application should have and it actually has a different value
  • The test explicitly writes an error to the log (using the Reporter object)
于 2013-10-10T10:04:53.247 回答