QTP - 快速指南


QTP - 简介

QTP代表Q uick Test Professional ,是惠普( HP )的产品。一旦脚本开发完成,该工具可以帮助测试人员无缝地执行自动化功能测试,而无需监视。

HP QTP 使用Visual Basic 脚本 (VBScript)来自动化应用程序。脚本引擎不需要单独安装,因为它可以作为 Windows 操作系统的一部分提供。VBScript 的当前版本是 5.8,它作为 Win 7 的一部分提供。VBScript 不是面向对象的语言,而是基于对象的语言。

测试工具

软件测试环境中的工具可以定义为一种产品,它支持一个或多个测试活动,包括规划、需求、创建构建、测试执行、缺陷记录和测试分析。

工具分类

工具可以根据几个参数进行分类。它包括 -

  • 该工具的目的
  • 该工具支持的活动
  • 它支持的测试类型/级别。
  • 许可类型(开源、免费软件、商业)
  • 使用的技术

工具类型

先生。 工具类型 用于 使用者
1 测试管理工具 测试管理、调度、缺陷记录、跟踪和分析。 测试人员
2 配置管理工具 用于实施、执行、跟踪变更 所有团队成员
3 静态分析工具 静态测试 开发商
4 测试数据准备工具 分析设计、测试数据生成 测试人员
5 测试执行工具 实施、执行 测试人员
6 测试比较器 比较预期结果和实际结果 所有团队成员
7 覆盖率测量工具 提供结构覆盖 开发商
8 性能测试工具 监控性能、响应时间 测试人员
9 项目规划和跟踪工具 计划 项目经理
10 事件管理工具 用于管理测试 测试人员

QTP适合什么地方?

QTP 是一种功能测试工具,最适合应用程序的回归测试。QTP 是 HP 拥有的许可/商业工具,是市场上最受欢迎的工具之一。它将实际结果与预期结果进行比较,并在执行摘要中报告结果。

QTP——历史与演变

HP Quick Test Professional 最初由 Mercury Interactive 所有,后被 HP 收购。它最初的名称是 Astra Quick Test,后来命名为 Quick Test Professional,但最新版本被称为统一功能测试器 (UFT)。

版本历史

现在让我们看一下QTP的版本历史。

版本 时间线
Astra 快速测试 v1.0 至 v5.5 - Mercury Interactive 1998年5月至2001年8月
QuickTest Professional v6.5 至 v9.0 - Mercury Interactive 2003年9月至2006年4月
Hp-QuickTest Professional v9.1 至 v11.0 - 由 HP 收购并发布 2007年2月至2010年9月
Hp-Unified 功能测试 v11.5 至 v11.53 2012年至2013年11月

优点

  • 使用 VBScript 开发自动化测试不需要高技能的编码人员,并且与其他面向对象的编程语言相比相对容易。

  • 易于使用、易于导航、结果验证和报告生成。

  • 与测试管理工具(Hp-Quality Center)轻松集成,可轻松安排和监控。

  • 也可用于移动应用程序测试。

  • 由于它是 HP 产品,因此由 HP 及其论坛提供全面支持来解决技术问题。

缺点

  • 与 Selenium 不同,QTP 仅适用于 Windows 操作系统。

  • 并非所有版本的浏览器都受支持,测试人员需要等待每个主要版本的补丁发布。

  • 话虽如此,它是一个商业工具,许可成本非常高。

  • 尽管脚本编写时间较短,但执行时间相对较长,因为它会增加 CPU 和 RAM 的负载。

QTP - 自动化测试流程

对于任何自动化工具实施,以下是其阶段/阶段。每个阶段都对应于一项特定的活动,并且每个阶段都有明确的结果。

自动化测试流程
  • 测试自动化可行性分析- 第一步是检查应用程序是否可以自动化。由于其局限性,并非所有应用程序都可以自动化。

  • 适当的工具选择- 下一个最重要的步骤是选择工具。这取决于构建应用程序的技术、其功能和用途。

  • 评估合适的框架- 选择工具后,下一个活动是选择合适的框架。框架有很多种,每种框架都有其自身的意义。我们将在本教程后面详细讨论框架。

  • 构建概念验证- 概念验证 (POC) 是通过端到端场景开发的,以评估该工具是否可以支持应用程序的自动化。它是在端到端场景中执行的,这确保了主要功能可以自动化。

  • 开发自动化框架- 构建 POC 后,进行框架开发,这是任何测试自动化项目成功的关键一步。应在认真分析应用程序所使用的技术及其关键功能后构建框架。

  • 开发测试脚本、执行和分析- 脚本开发完成后,将执行脚本、分析结果并记录缺陷(如果有)。测试脚本通常是受版本控制的。

QTP - 环境设置

QTP是一个商业工具,试用版可以直接从HP网站下载。仅当前版本(统一功能测试 (11.5x))可供下载。以下是可以下载试用版的 URL。

下载地址 - QTP

安装程序

步骤 1 - 单击“试用和演示”链接,然后选择“HP Unified Function Testing 11.50 CC English SW E-Media评估”,如下所示 -

下载并安装步骤1

步骤 2 - 选择“HP统一功能测试 11.50”后,下载向导将打开。填写个人详细信息,然后单击下一步。

下载并安装第2步

步骤 3 - 阅读“使用条款”并单击“下一步”。

下载并安装步骤 3

步骤 4 - 下载窗口打开。现在,单击“下载”按钮。

下载并安装第4步

步骤 5 - 下载的文件格式为 .RAR。现在您需要解压存档,文件夹内容如下所示并执行Setup.exe。

下载并安装第5步

步骤 6 - 执行安装文件后,为了安装,请从列表中选择“统一功能测试设置”,如下所示 -

下载并安装第6步

步骤 7 - 然后单击“下一步”继续。

下载并安装第7步

步骤 8 - 在自定义设置窗口中,选择自动化所需的插件,即您应该根据测试的应用程序的技术来选择插件。例如,如果您的应用程序基于 .NET,那么您应该确保选择 .NET。

下载并安装第8步

步骤 9 - 选择安装所需的插件后,单击下一步。安装完成后,您将看到一个完成按钮窗口。

下载并安装第10步

步骤 10 - 完成安装后,“其他安装要求”对话框将打开。选择列表中除“运行许可证安装向导”之外的所有内容,然后单击“运行”。我们不需要选择“运行许可证安装向导”,因为我们正在安装试用版,默认情况下,该版本提供 30 天的许可证。

下载并安装第11步

步骤 11 - 完成附加安装要求后,会显示一个勾号,这表明组件已成功安装。现在,单击“关闭”。

下载并安装第12步

启动 UFT 和插件页面

步骤 1 - 安装后,可以从“开始”菜单启动应用程序,如图所示。

下载并安装第13步

步骤 2 - 出现许可证页面。您可以单击“继续”,因为我们已经安装了试用许可证。

下载并安装第14步

步骤 3 - 加载项对话框打开,供用户选择所需的加载项。

注意- 不要加载所有加载项,而仅加载所需的加载项,然后单击“确定”。

下载并安装第15步

步骤 4 - 加载所需的插件后,UFT 11.5 工具将为用户打开,并且第一眼看到 UFT 的外观,如下所示 -

下载并安装第16步

QTP - 录制和回放

录制测试相当于录制被测应用程序的用户操作,以便 UFT 自动生成可以回放的脚本。如果初始设置正确的话,录制和回放可以给我们对该工具的第一印象,无论它是否支持该技术。

录制和播放的步骤如下 -

步骤 1 - 从起始页单击“新建”测试,如下所示 -

主页中的新测试选择

步骤 2 - 单击“新建”链接,将打开一个新的测试窗口,用户需要选择测试类型。选择“GUI Test”,为测试指定名称以及需要保存的位置。

选择测试类型

步骤 3 - 创建新测试后,新测试屏幕将打开,如下所示。现在,单击“Action1”选项卡,该选项卡默认创建有 1 个操作。

新测试页

步骤 4 - 单击“录制”菜单并选择“录制和运行设置”,如下所示 -

记录和运行设置

步骤 5 - “记录和运行设置”对话框打开,根据应用程序的类型,可以选择 Web、Java 或 Windows 应用程序。例如,在这里,我们将记录一个基于 Web 的应用程序 (http://easycalculation.com/)。

记录和运行设置

步骤 6 - 单击“录制”。Internet Explorer根据设置自动打开,网址为https://www.easycalculation.com/ 。单击“代数”下的“数字”链接,输入一个数字,然后单击“计算”。操作完成后,单击记录面板中的“停止”按钮。您会注意到生成的脚本如下所示 -

生成的脚本

步骤 7 - 现在通过单击播放按钮来播放脚本。脚本会重播并显示结果。

回放脚本

步骤 8 - 默认情况下,结果窗口打开,其中准确显示执行、通过和失败步骤的时间戳。

结果窗口分析

录音和回放的意义

  • 用作验证UFT是否可以支持该技术/应用的初步调查方法。

  • 用于创建测试应用程序的基本功能或不需要长期维护的特性。

  • 它可用于记录鼠标移动和键盘输入。

录音模式

  • 正常记录- 这是默认记录模式,记录对象以及在被测应用程序上执行的操作。

  • 模拟记录- 这不仅记录键盘操作,还记录鼠标相对于屏幕或应用程序窗口的移动。

  • 低级记录- 记录对象的确切坐标,与 UFT 是否识别对象无关。它只记录坐标,因此不记录鼠标移动。

  • Insight Recording - UFT 根据其外观而不是其本机属性来记录操作。

如何选择录音模式

单击“录制”按钮后,录制开始后,用户可以从屏幕上出现的录制窗格中选择录制模式。可以从上面讨论的任何一个中进行选择。

选择录音模式

您将看到以下场景在所有模式下都被记录,并且在不SymPy况下记录了相同的动作。

  • 启动 IE - https://www.easycalculation.com/
  • 点击“代数”下的“数字”
  • 点击“平方根”链接
  • 输入一个值来计算平方根。让我们说 10
  • 点击计算

在默认、模拟和低级别录制模式下录制的脚本如下 -

' DEFAULT RECORDING MODE 
Browser("Free Online Math Calculator").Page("Free Online Math 
Calculator").Link("Numbers").Click 

Browser("Free Online Math Calculator").Page("Numbers Calculator - 
Math").Link("Square Root").Click 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebEdit("n").Set "10" 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebButton("calculate").Click 

' ANALOG RECORDING MODE 
Desktop.RunAnalog "Track1" 

' LOW LEVEL RECORDING MODE 
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
235,395 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
509,391 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
780,631 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type 
"10" 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
757,666

使用洞察记录模式的记录如下所示 -

Insight 记录模式

QTP-对象存储库

对象存储库

对象存储库是对象和属性的集合,QTP 将能够使用它来识别对象并对其进行操作。当用户记录测试时,默认情况下会捕获对象及其属性。如果不了解对象及其属性,QTP 将无法回放脚本。

单击以下每个主题,了解有关对象存储库及其相关功能的更多信息。

先生。 主题和描述
1 对象间谍及其特点

了解对象间谍的用法及其相关功能。

2 使用对象存储库

从对象存储库中添加、编辑、删除对象及其相关功能。

3 对象存储库的类型

处理共享对象和本地对象存储库及其与脚本相关的上下文。

4 用户定义的对象

处理使用用户定义对象的情况。

5 XML 中的对象存储库

处理将 OR 转换为 XML 并将对象存储库用作 XML。

6 比较和合并 OR

比较 OR'、合并 OR 等操作可有效地与对象存储库配合使用。

7 序数标识符

使用序数标识符的情况及其优点。

8 子对象

使用子对象进行有效的脚本编写

QTP - 行动

Actions 帮助测试人员将脚本分成 QTP 语句组。动作类似于 VBScript 中的函数;然而,还是有一些差异。默认情况下,QTP 使用一个操作创建一个测试。

行动 功能
Action 是 QTP 的内置功能。 VBScript 和 QTP 均支持 VBScript 函数。
操作参数仅按值传递。 函数参数可以按值传递,也可以按引用传递。
操作的扩展名为 .mts 函数另存为 .vbs 或 .qfl
操作可能可重用,也可能不可重用。 函数总是可重用的。

可以通过右键单击脚本编辑器窗口并选择“属性”来访问操作的属性。

动作属性

操作属性包含以下信息 -

  • 动作名称
  • 地点
  • 可重复使用的旗帜
  • 输入参数
  • 输出参数

行动类型

有三种类型的动作 -

  • 不可重用的操作- 只能在设计它的特定测试中调用的操作,并且只能调用一次。

  • 可重用操作- 可以多次调用它所在的任何测试的操作,也可以由任何其他测试使用。

  • 外部可重用操作- 这是存储在另一个测试中的可重用操作。外部操作在调用测试中是只读的,但可以通过外部操作的数据表信息的可编辑副本在本地使用。

使用操作

可以使用三个选项来插入操作。单击其中每一项即可了解有关所选操作类型的更多信息。

先生。 动作类型和描述
1 插入对新操作的号召

从现有操作中插入新操作

2 插入对操作副本的号召性用语

插入现有操作的副本

3 插入对现有操作的调用

插入对现有可重用操作的调用

QTP - 数据表

DataTable 与 Microsoft Excel 类似,可以帮助测试人员创建可用于多次运行 Action 的数据驱动测试用例。有两种类型的数据表 -

  • 本地数据表- 每个操作都有自己的私有数据表,也称为本地数据表,也可以跨操作访问。

  • 全局数据表- 每个测试都有一个可跨操作访问的全局数据表。

可以从 QTP 的“数据”选项卡访问数据表,如下所示 -

QTP中的数据表

要执行某个指定迭代次数的测试用例,可以在“测试设置”对话框中设置全局数据表的迭代,可以使用“文件”→“设置”→“运行”(Tab) 访问该对话框,如下所示 -

QTP中的数据表

例子

例如,如果用户想要参数化可以使用http://easycalculation.com/compound-interest.php访问的http://easycalculation.com/的“复合兴趣” 。可以如下所示创建参数。Excel 的大部分功能也可以在数据表中使用。

QTP中的数据表

数据表操作

访问 DataTable 的对象分为三种类型。通过遍历以下内容可以很好地理解数据表操作 -

先生。 对象类型和描述
1 数据表方法

提供有关数据表方法的详细信息。

2 DTParameter 对象方法

提供有关 DTParameter 方法的详细信息。

3 DTSheet 对象方法

提供有关 DTSheet 方法的详细信息。

QTP-检查点

检查点,顾名思义,是指将指定属性的当前值或对象的当前状态与预期值进行比较的验证点,可以在脚本中的任何时间点插入。

检查点的类型

先生。 类型和描述
1

标准检查站

验证受测试应用程序中对象的属性值并受所有加载项环境支持。

2

位图检查点

将应用程序的某个区域验证为位图

3

文件内容检查点

验证动态生成或访问的文件(例如 .txt、.pdf)中的文本

4

表检查点

验证表中的信息。并非所有环境都受支持。

5

文本检查点

验证文本是否根据指定条件显示在基于 Windows 的应用程序中的定义区域内。

6

文本区域检查点

根据指定条件验证文本字符串是否显示在基于 Windows 的应用程序中的定义区域内。

7

无障碍检查点

验证页面并报告网站中可能不符合万维网联盟 (W3C) Web 内容可访问性指南的区域

8

页面检查点

验证网页的特征。它还可以检查损坏的链接。

9

数据库检查点

验证被测应用程序访问的数据库的内容。

10

XML检查点

验证 .xml 文档或网页和框架中的 .xml 文档的内容。

插入检查点

当用户想要插入检查点时,必须确保大多数检查点仅在记录会话期间受支持。一旦用户停止记录,检查点就不会启用。

下面给出的是当用户不处于录制模式时的检查点菜单。

未进行录制时的检查点菜单

下面给出的是用户处于录制模式时的检查点菜单。

录制过程中检查点菜单

例子

为正在测试的应用程序添加检查点 - “http://easycalculation.com/”

' 1. Inserted Standard Checkpoint
Status = Browser("Math Calculator").Page("Math 
   Calculator").Link("Numbers").Check CheckPoint("Numbers")

If Status Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

' 2. Inserted BitMap Checkpoint
imgchkpoint = Browser("Math Calculator").Page("Math 
   Calculator").Image("French").Check CheckPoint("French")

If imgchkpoint Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

查看检查点属性

插入后,如果测试人员想要更改值,我们可以通过右键单击脚本的关键字“检查点”并导航到“检查点属性”来实现,如下所示 -

检查点属性。

您也可以在对象存储库中找到相同的检查点,如下所示。它准确地显示了使用的检查点类型以及期望值和超时值。

检查点属性。

QTP-同步

同步点是被测工具和应用程序之间的时间接口。同步点是指定测试脚本的两个步骤之间的延迟时间的功能。

例如,点击一个链接可能需要1秒,有时5秒,甚至可能需要10秒才能完全加载页面。它取决于多种因素,例如应用程序服务器响应时间、网络带宽和客户端系统功能。

如果时间变化,则脚本将失败,除非测试人员智能地处理这些时间差异。

插入同步点的方法

  • 等待属性
  • 存在
  • 等待
  • 同步(仅适用于基于网络的应用程序)
  • 插入 QTP 内置同步点。

比方说,我们需要在单击“ www.easycalculation.com ”中的“数字”链接和单击“简单利息”计算器之间插入一个同步点。现在我们将看看针对上述场景插入同步点的所有五种方法。

方法 1 - WaitProperty

WaitProperty 是一种方法,它将属性名称、值和超时值作为输入来执行同步。这是一个动态的等待,因此,鼓励这种选择。

' Method 1 - WaitProperty with 25 seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

obj.Link("Simple Interest").WaitProperty "text", "Simple Interest",25000
obj.Link("Simple Interest").Click

方法 2 - 存在

Exist 是一种将超时值作为输入来执行同步的方法。同样,这是一个动态等待,因此鼓励这种选择。

' Method 2 : Exist Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

If obj.Link("Simple Interest").Exist(30) Then
   obj.Link("Simple Interest").Click

Else
   Print "Link NOT Available"
End IF

方法 3 - 等待

等待是一个硬编码的同步点,它的等待与事件是否发生无关。因此,不鼓励使用 Wait,并且可以使用较短的等待时间,例如 1 或 2 秒。

' Method 3 : Wait Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click
wait(30)
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

方法 4 - 同步方法

同步方法只能用于页面加载之间始终存在延迟的 Web 应用程序。

' Method 4 : 
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

Browser("Math Calculator").Sync
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

方法 5 - 插入 QTP 内置同步点

步骤 1 - 进入录音模式。如果用户未处于录制模式,则此选项将被禁用。

步骤 2 - 转到“设计”→“同步点”。

步骤 3 - 我们需要选择我们想要作为同步点的对象。选择对象后,对象窗口打开,如下所示 -

QTP 同步点

步骤 4 - 单击“确定”;“添加同步窗口”打开。选择属性、值和超时值,然后单击“确定”,如下所示 -

QTP 同步点

步骤 5 - 将生成如下所示的脚本,这与我们已经讨论过的 WaitProperty(方法 1)的脚本相同 -

Browser("Math Calculator").Page("Math Calculator").Link("Numbers").Click

Browser("Math Calculator").Page("Math Calculator").Link("Simple 
   Interest").WaitProperty "text", "Simple Interest", 10000

默认同步

当用户没有使用上述任何同步方法时,QTP仍然有一个内置的对象同步超时,可以由用户调整。

导航到“文件”>>“设置”>>“运行”选项卡>>“对象同步超时”,如下所示。

默认同步超时

QTP-智能识别

有时,QTP无法找到任何与已识别的对象描述相匹配的对象,或者可能找到多个符合该描述的对象,则QTP会忽略已识别的描述并使用智能识别机制来识别该对象。

QTP 的智能识别使用两种类型的属性 -

  • 基本过滤器属性- 特定测试对象类的基本属性,如果不改变原始对象的本质,就无法更改其值。

  • 可选过滤器属性- 其他属性也有助于识别特定类的对象,其属性不太可能经常更改,但如果不再适用,则可以忽略它们。

启用对象的智能识别

步骤 1 - 导航到“工具”→“对象识别”。对象识别对话框打开。

步骤 2 - 选择环境、对象类别并打开“启用智能识别”,如下所示 -

智能识别配置

步骤 3 - 单击配置并选择基本和可选过滤器属性。

智能识别配置

步骤 4 - 在基本属性中添加除默认属性之外的属性,并添加/删除可选过滤器属性。请注意,相同的属性不能同时属于强制属性和辅助属性,然后单击“确定”。

智能识别配置

步骤 5 - 在对象存储库中添加该类型的对象后验证是否启用智能识别。智能识别设置为 TRUE。如果我们不想启用智能识别,我们也可以将其设置为 False。

智能识别配置

步骤 6 - 我们甚至可以通过在“文件”菜单的“设置”下应用测试脚本级别来禁用测试级别,如下所示 -

智能识别配置

步骤 7 - 如果按照步骤 6 禁用智能识别,则在脚本执行期间不会对任何对象应用智能识别。

步骤 8 - 如果添加对象时智能识别为关闭,QTP 将来将不会使用智能识别进行识别,即使我们稍后启用了它。

QTP-调试

在自动化测试环境中,调试是发现和修复自动化脚本中的编码问题的系统过程,以便脚本更加健壮并可以发现应用程序中的缺陷。

在 QTP 中使用断点进行调试的方法有多种。只需按“F9”或使用菜单选项“运行”→“插入/删除断点”即可插入断点。

插入断点后,“红色”点和线将以红色突出显示,如下所示 -

使用断点调试

方法 捷径 描述
步入 F11 用于执行每个步骤。单步执行函数/操作并逐行执行。执行后它会在每一行暂停。
跨过 F10 用于单步跳过函数。Step Over 仅运行活动文档中的当前步骤。
走出去 Shift+F11 Step Into 函数后,您可以使用 Step Out 命令。Step Out 继续运行到函数末尾,然后在下一行暂停运行会话。

断点选项

可以通过“运行”菜单导航来访问断点中的各种选项。

先生。 快捷方式及说明
1

F9

插入/删除断点

2

Ctrl+F9

启用/禁用断点

3

Ctrl+Shift+F9

清除所有断点

4

仅使用菜单

启用/禁用所有断点

调试面板

以下是调试窗口中的窗格 -

使用断点调试
  • 输出- 此选项卡显示打印语句的所有输出。

  • 观察- 此选项卡显示给定表达式的布尔输出。

  • LocalVariables - 此选项卡显示局部变量的输出。

例子

监Windows格显示输出表达式,如下所示 -

使用断点调试

局部变量窗格显示局部变量保存的值,如下所示 -

使用断点调试

QTP-错误处理

QTP 中有多种处理错误的方法。使用 QTP 时可能会遇到三种可能的错误类型。他们是 -

  • 语法错误
  • 逻辑错误
  • 运行时错误

错误类型

语法错误

语法错误是指拼写错误或一段与 VBscripting 语言语法不符的代码。代码编译时会出现语法错误,错误修复后才能执行。

要验证语法,请使用键盘快捷键 Ctrl+F7,结果显示如下。如果未显示该窗口,可以导航至“查看”→“错误”。

错误处理

逻辑错误

如果脚本语法正确但产生意外结果,则称为逻辑错误。逻辑错误通常不会中断执行,但会产生不正确的结果。逻辑错误可能由于多种原因而发生,即错误的假设或对需求的误解,有时是错误的程序逻辑(使用 do-while 而不是 do-Until)或无限循环。

检测逻辑错误的方法之一是执行同行评审并验证 QTP 输出文件/结果文件,以确保该工具按照预期的方式执行。

运行时错误

顾名思义,这种错误发生在运行时期间。此类错误的原因是尝试执行某些操作的脚本无法执行此操作,并且脚本通常会停止,因为它无法继续执行。运行时错误的经典示例是 -

  • 未找到文件,但脚本尝试读取该文件
  • 未找到对象,但脚本正在尝试对该特定对象执行操作
  • 将数字除以零
  • 访问数组元素时数组索引越界

处理运行时错误

有多种方法可以处理代码中的错误。

1. 使用测试设置- 可以通过导航到“文件”>>“设置”>>“运行”选项卡来定义错误处理,如下所示。我们可以选择任何指定的设置,然后单击“确定”。

错误处理

2. 使用 On Error 语句- “On Error”语句用于通知 VBScript 引擎测试人员处理运行时错误的意图,而不是允许 VBScript 引擎显示用户不友好的错误消息。

  • On Error Resume Next - On Error Resume Next 通知 VBScript 引擎在遇到错误时处理执行下一行代码。

  • On error Goto 0 - 这有助于测试人员关闭错误处理。

3. 使用 Err 对象- 错误对象是 VBScript 中的内置对象,它捕获运行时错误号和错误描述,我们可以通过它们轻松调试代码。

  • Err.Number - Number 属性返回或设置指定错误的数值。如果 Err.Number 值为 0,则表示未发生错误。

  • Err.Description - 描述属性返回或设置有关错误的简短描述。

  • Err.Clear - Clear 方法重置 Err 对象并清除与其关联的所有先前值。

例子

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function 

4. 使用 Exit 语句- Exit 语句可以与 Err 对象一起使用,根据 Err.Number 值退出测试、操作或迭代。让我们详细看看每一个 Exit 语句。

  • ExitTest - 退出整个 QTP 测试,无论运行时迭代设置是什么。

  • ExitAction - 退出当前操作。

  • ExitActionIteration - 退出操作的当前迭代。

  • ExitTestIteration - 退出 QTP 测试的当前迭代并继续下一次迭代。

5. 恢复场景- 遇到错误时,根据某些条件触发恢复场景,并在单独的章节中详细介绍。

6. 报告对象- 报告对象帮助我们向运行结果报告事件。它帮助我们确定相关操作/步骤是否通过/失败。

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."  

QTP - 恢复场景

恢复场景

在执行QTP脚本时,我们可能会遇到一些意想不到的错误。为了从这些意外错误中恢复测试并继续执行脚本的其余部分,使用了恢复场景。可以通过导航到“资源”→恢复方案管理器来访问恢复方案管理器,如下所示 -

恢复方案管理器访问

创建恢复场景的步骤

步骤 1 - 单击“新建”恢复方案按钮;恢复方案向导打开,如下所示 -

恢复方案管理器 - 访问

步骤 2 - 选择触发事件。它对应于事件,可能出现在以下四个事件中的任何一个中 -

  • 弹出窗口
  • 对象状态
  • 测试运行错误
  • 应用程序崩溃

步骤 3 - 恢复操作窗口打开。恢复操作可以执行以下任何操作,如下面的屏幕截图所示 -

恢复方案管理器访问

步骤 4 - 指定适当的恢复操作后,我们还需要指定恢复后操作,如下所示 -

恢复方案管理器访问

步骤 5 - 指定恢复后操作后,应命名恢复场景并将其添加到测试中,以便可以激活它。

恢复方案管理器访问

步骤 6 - 恢复场景创建已完成,需要通过选中“将场景添加到当前测试”选项来映射到当前测试,然后单击“完成”。

恢复方案管理器访问

步骤 7 - 添加的恢复方案将如下所示,然后单击“关闭”按钮继续。

恢复方案管理器访问

步骤 8 - 单击“关闭”按钮后,QTP 将提示用户保存创建的恢复场景。它将以扩展名 .qrs 保存,并且向导将关闭。

恢复方案管理器访问

确认

创建的恢复场景现在应该是测试的一部分,可以通过导航到“文件”→“设置”→“恢复”选项卡进行验证。

恢复方案管理器访问

QTP-环境变量

QTP环境变量是特殊类型的变量,所有操作、函数库和恢复场景都可以访问它们。Windows 有内置的环境变量,可供在该特定系统上运行的所有应用程序使用,但 QTP 环境变量仅在运行时可供该特定测试脚本使用。

环境变量的类型

内置环境变量- 提供一系列环境参数,可以提供测试名称、操作名称、测试路径、本地主机名、操作系统名称、类型及其版本等信息。可以通过导航到“文件”→“测试设置”→“环境”选项卡来访问环境变量名称。

内置环境变量

用户定义的内部- 用户定义的变量可以通过在环境选项卡窗口中选择“用户定义”来保存。单击“+”按钮输入参数名称和值,如下所示 -

用户定义的内部环境变量

用户定义的外部- 用户定义的变量可以作为 .xml 文件存储在外部文件中,并且可以加载到测试中,如下图所示。它也可以在运行时动态加载,如下面的示例之一所述。

用户定义的内部环境变量

环境变量 – 支持的方法

1.ExternalFileName 属性- 返回在“测试设置”对话框的“环境”选项卡中指定的已加载外部环境变量文件的名称。如果没有加载外部环境变量文件,则此属性返回空字符串。

x = Environment.ExternalFileName 
print x

用户定义的内部环境变量

2. LoadFromFile 方法- 在运行时动态加载指定的环境变量文件 (.xml)。使用此方法时,无需手动将环境变量添加到环境选项卡中。

Environment.LoadFromFile "D:\config.xml"
b = Environment.Value("Browser")
print b

用户定义的内部环境变量

3. Value 属性- 检索环境变量的值。我们还可以使用此属性设置用户定义的内部环境变量的值。

' Get the Value of the InBuilt Environment Variables
a = Environment.Value("OS")
print a
b = Environment.Value("ActionName")
print b
  
'Loaded from External File
Environment.LoadFromFile "D:\config.xml"
c = Environment.Value("Browser")
print c
用户定义的内部环境变量

QTP - 库文件

为了使脚本模块化,在QTP脚本中添加了库文件。它包含变量声明、函数、类等。它们实现了可在测试脚本之间共享的可重用性。它们以扩展名 .vbs 或 .qfl 保存

可以通过导航到“文件”>>“函数库”来创建新的库文件。

关联函数库

方法 1 - 使用“文件”>“设置”> 资源> 关联函数库选项。单击“+”按钮添加函数库文件并使用实际路径或相对路径添加,如下所示 -

关联库文件

方法 2 - 使用 ExecuteFile 方法。

'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs" 
ExecuteFile "C:\lib2.vbs" 

方法 3 - 使用 LoadFunctionLibrary 方法。

'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs" 
LoadFunctionLibrary "C:\lib2.vbs" 

方法 4 - 自动化对象模型(AOM) - 这是一种机制,使用它,我们可以控制 QTP 之外的各种 QTP 操作。使用AOM,我们可以启动QTP,打开测试,关联函数库等。以下VbScript应以扩展名.vbs保存,执行后,QTP将启动,测试将开始执行。AOM 将在后面的章节中详细讨论。

'Launch QTP
Set objQTP = CreateObject("QuickTest.Application")
objQTP.Launch
objQTP.Visible = True
  
'Open the test
objQTP.Open "D:\GUITest2", False, False
Set objLib = objQTP.Test.Settings.Resources.Libraries
  
'Associate Function Library if NOT associated already.
If objLib.Find("C:\lib1.vbs") = -1 Then 
  objLib.Add "C:\lib1.vbs", 1 
End

QTP - 自动化测试结果

检测结果

测试结果窗口为我们提供了足够的信息来显示通过、失败的步骤等。结果窗口在测试执行后自动打开(根据默认设置)。显示以下信息 -

  • 已通过的步骤
  • 步骤失败
  • 环境参数
  • 图形统计
检测结果

测试结果中执行的操作

将结果转换为 HTML

在结果查看器窗口中,导航至“文件”→“导出到文件”。导出运行结果对话框打开,如下所示 -

检测结果

我们可以选择要导出的报告类型。它可以是简短的结果,可以是详细的结果,甚至可以选择节点。选择文件名并导出后,文件将另存为 .HTML 文件

过滤结果

可以根据状态、节点类型和迭代来过滤结果。可以通过使用“测试结果窗口”中的“过滤器”按钮来访问它。

检测结果

提出缺陷

可以通过访问“工具”→“添加缺陷”直接从测试结果窗口窗格将缺陷记录到 QC 中,这将打开与 ALM 的连接,如下所示 -

检测结果

检测结果

自动测试结果窗口可以在“工具”→“选项”→“运行会话”选项卡下配置。如果需要,我们可以将其关闭,并且还可以打开“会话结束时自动导出结果”。

检测结果

根据设置可以录制屏幕截图或视频。可以在“工具”→“选项”→“屏幕捕获”选项卡下进行相同的配置。我们可以根据以下三个条件保存屏幕截图或电影 -

  • 对于错误
  • 总是
  • 对于错误和警告
检测结果

QTP - 使用 GUI 对象

在脚本执行期间,QTP 会与各种 GUI 对象进行交互。因此,了解关键 GUI 对象的基本方法非常重要,我们可以使用它来有效地处理它。

使用文本框

以下是我们在运行时访问文本框的方法 -

  • 设置- 帮助测试人员将值设置到文本框中

  • 单击- 单击文本框

  • SetSecure - 用于安全地设置密码框中的文本

  • WaitProperty - 等待直到属性值变为 true

  • Exist - 检查文本框是否存在

  • GetROProperty("text") - 获取文本框的值

  • GetROProperty("Visible") - 如果可见则返回布尔值

例子

Browser("Math Calculator").Sync
Set Obj = Browser("Math Calculator").Page("SQR Calc").WebEdit("n")

'Clicks on the Text Box
Obj.Click

'Verify if the Object Exist - Returns Boolean value
a = obj.Exist
print a

'Set the value
obj.Set "10000" : wait(2)

'Get the Runtime Object Property - Value of the Text Box
val = obj.GetROProperty("value")
print val

'Get the Run Time Object Property - Visiblility - Returns Boolean Value
x = Obj.GetROProperty("visible")
print x

使用复选框

以下是使用复选框的一些关键方法 -

  • 设置- 帮助测试人员将复选框值设置为“ON”或“OFF”

  • 单击- 单击复选框。即使检查开或关,但用户无法确定状态

  • WaitProperty - 等待直到属性值变为 true

  • Exist - 检查复选框是否存在

  • GetROProperty("name") - 获取复选框的名称

  • GetROProperty("Visible") - 如果可见则返回布尔值

例子

'To Check the Check Box
Set Obj = Browser("Calculator").Page("Gmail").WebCheckBox("PersistentCookie")
Obj.Set "ON"

'To UnCheck the Check Box
Obj.Set "OFF"

'Verifies the Existance of the Check box and returns Boolean Value
val = Obj.Exist
print val

'Fetches the Name of the CheckBox
a = Obj.GetROProperty("name")
print a

'Verifies the visible property and returns the boolean value.
x = Obj.GetROProperty("visible")
print x

使用单选按钮

以下是使用单选按钮的一些关键方法 -

  • Select(RadioButtonName) - 帮助测试人员将单选框设置为“ON”

  • 单击- 单击单选按钮。即使单选按钮打开或关闭,但测试仪无法获取状态

  • WaitProperty - 等待直到属性值变为 true

  • Exist - 检查单选按钮是否存在

  • GetROProperty("name") - 获取单选按钮的名称

  • GetROProperty("Visible") - 如果可见则返回布尔值

例子

'Select the Radio Button by name "YES"
Set Obj = Browser("Calculator").Page("Forms").WebRadioGroup("group1")
Obj.Select("Yes")

'Verifies the Existance of the Radio Button and returns Boolean Value
val = Obj.Exist
print val

'Returns the Outerhtml of the Radio Button
txt = Obj.GetROProperty("outerhtml")
print text

'Returns the boolean value if Radio button is Visible.
vis = Obj.GetROProperty("visible")
print vis

使用组合框

以下是使用组合框的一些关键方法 -

  • Select(Value) - 帮助测试人员从组合框中选择值

  • 单击- 单击对象

  • WaitProperty - 等待直到属性值变为 true

  • Exist - 检查组合框是否存在

  • GetROProperty("Text") - 获取组合框的选定值

  • GetROProperty("all items") - 返回组合框中的所有项目

  • GetROProperty("items count") - 返回组合框中的项目数

例子

'Get the List of all the Items from the ComboBox
Set ObjList = Browser("Math Calculator").Page("Statistics").WebList("class")
x = ObjList.GetROProperty("all items")
print x

'Get the Number of Items from the Combo Box
y = ObjList.GetROProperty("items count")
print y

'Get the text value of the Selected Item
z = ObjList.GetROProperty("text")
print z

使用按钮

以下是使用按钮的一些关键方法 -

  • 单击- 单击按钮

  • WaitProperty - 等待直到属性值变为 true

  • Exist - 检查按钮是否存在

  • GetROProperty("Name") - 获取按钮的名称

  • GetROProperty("Disabled") - 如果启用/禁用,则返回布尔值

例子

'To Perform a Click on the Button
Set obj_Button = Browser("Math Calculator").Page("SQR").WebButton("Calc")
obj_Button.Click

'To Perform a Middle Click on the Button
obj_Button.MiddleClick

'To check if the button is enabled or disabled.Returns Boolean Value
x = obj_Button.GetROProperty("disabled")
print x

'To fetch the Name of the Button
y = obj_Button.GetROProperty("name")
print y

使用 webTables

在当今基于 Web 的应用程序中,webTable 已变得非常常见,测试人员需要了解 WebTable 的工作原理以及如何在 webTable 上执行操作。本主题将帮助您有效地使用 webTables。

先生。 声明及说明
1

if 语句

if语句由一个布尔表达式后跟一个或多个语句组成。

2

if...else 语句

if else语句由一个布尔表达式后跟一个或多个语句组成。如果条件为真。执行if语句下的语句。如果条件为假。脚本的其他部分被执行

3

if..elseif...else 语句

if 语句后跟一个或多个Elseif语句,该语句由布尔表达式组成,后跟一个可选的else 语句,当所有条件都变为 false 时执行。

4

嵌套 if 语句

另一个 if 或elseif语句内的ifelseif语句。

5

switch语句

switch语句允许测试变量是否与值列表相同。

  • html id - 如果表有 id 标签,那么最好使用此属性。

  • innerText - 表的标题。

  • sourceIndex - 获取表的源索引

  • ChildItemCount - 获取指定行中存在的子项目数

  • RowCount - 获取表中的行数

  • ColumnCount - 获取表中的列数

  • GetcellData - 根据列和行索引获取单元格的值

例子

Browser("Tutorials Point").Sync
' WebTable 
Obj = Browser("Tutorials Point").Page("VBScript Decisions").WebTable("Statement")
' Fetch RowCount
x = Obj.RowCount
print x

' Fetch ColumnCount
y = Obj.ColumnCount(1)
print y

' Print the Cell Data of the Table
For i = 1 To x Step 1
   
   For j = 1 To y Step 1
      z = Obj.GetCellData(i,j)
      print "Row ID : " & i & " Column ID : " & j & " Value : " & z
   Next
Next

'Fetch the Child Item count of Type Link in a particular Cell
z = Obj.ChildItemCount(2,1,"Link")
print z

QTP-虚拟对象

什么是虚拟对象?

有时,