掌握自动化测试:QuickTest Pro 8.2完全教程

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:QTP(现称UFT)由HP开发,是功能自动化测试工具,尤其在回归测试和数据驱动测试方面表现出色。本教程深入解析QTP 8.2的功能,教授智能识别技术、脚本编写与调试、参数化测试、检查点设置等自动化测试的关键知识点。 QuickTest Pro

1. QTP/UFT基础概念介绍

在现代软件开发流程中,自动化测试已成为确保软件质量和可靠性不可或缺的一部分。 QTP/UFT ,即Quick Test Professional/Unified Functional Testing,是由Micro Focus开发的一款自动化测试工具,它广泛用于测试Web应用程序、Windows应用程序以及移动应用。QTP/UFT支持关键字驱动测试(Keyword Driven Testing)方法,这种测试方法对于非技术测试人员尤其友好,因为它允许使用预定义的关键字来构建测试脚本,从而减少了对复杂编程技术的依赖。

在本章中,我们将深入了解QTP/UFT的基础概念,包括其核心功能、运行环境以及与其它测试工具的比较。之后,我们将介绍QTP/UFT的界面布局和工作流程,帮助读者在最短的时间内对工具有一个整体的认识,并能够开始着手进行简单的自动化测试工作。随着后续章节的展开,我们将逐步探讨从基本的录制与回放到更高级的应用程序对象管理,直至实现参数化与数据驱动测试等关键技能。

2. 录制与回放测试脚本技巧

2.1 自动化测试的基本原理

2.1.1 认识自动化测试

自动化测试是一种软件测试方法,通过使用特殊的测试工具或脚本,计算机可以自动执行预先编写的测试用例而无需人工干预。其核心目的是提高测试效率、确保测试的一致性、覆盖更广泛的测试场景,并且能够在软件开发的生命周期中频繁执行,以便及早发现问题。

自动化测试与手动测试相比,能够大大减少重复劳动,使测试人员将更多精力放在测试用例的设计和测试流程的管理上。它也支持回归测试,保证软件在更新和维护后仍然保持原有的功能和性能。

2.1.2 QTP/UFT在自动化测试中的角色

QTP (Quick Test Professional) 和 UFT (Unified Functional Testing) 是HP开发的一系列自动化测试工具,广泛应用于功能测试、回归测试、负载测试、GUI测试等领域。QTP/UFT 提供了强大的脚本编辑环境和对象识别机制,使得测试脚本的编写更加容易和高效。

QTP/UFT 支持VBScript脚本语言,允许测试人员通过录制和编写的方式创建测试脚本,并提供测试报告功能来记录和分析测试结果。由于其强大的功能,QTP/UFT 成为了许多大型企业的首选自动化测试工具之一。

2.2 录制测试脚本的步骤与要点

2.2.1 选择正确的录制模式

录制测试脚本是自动化测试中的一项基础工作,它允许测试人员通过执行应用程序的操作来生成测试脚本。在开始录制之前,需要选择合适的录制模式,以保证录制的脚本能够正确无误地反映测试的操作和逻辑。

QTP/UFT 提供了多种录制模式,包括“活动录制”、“低级录制”和“虚拟对象录制”等。活动录制主要适用于一般的应用程序操作,能够捕捉大部分用户操作;低级录制则适合录制那些活动录制无法捕捉的复杂操作;虚拟对象录制允许在没有访问实际对象属性的情况下进行录制。

2.2.2 录制过程中的常见问题与解决方案

在录制测试脚本的过程中,我们可能会遇到一些问题,比如对象识别失败、无法录制预期操作等。针对这些问题,我们可以采取以下几种策略:

  • 确保测试应用程序已正确安装,并且所有的运行库都已更新。
  • 在录制前,清理不必要的应用程序窗口和对象,以减少脚本复杂度。
  • 使用高级录制模式来录制不易捕捉的操作。
  • 如果对象识别失败,检查对象库,确保正确的对象映射,并适时更新对象属性。

2.3 回放测试脚本的技巧与优化

2.3.1 验证回放过程中的元素识别

回放测试脚本时,验证元素识别是一个重要的环节。脚本的每一步操作都依赖于正确识别应用程序中的对象。如果元素识别失败,测试将无法执行或得到错误的结果。

在验证回放过程中,我们应该:

  • 观察脚本的每一步操作是否都能够在应用程序中准确找到对应的元素。
  • 如果识别到错误的对象,检查对象库中的对象属性是否正确。
  • 使用工具提供的“同步”功能,帮助同步脚本与当前应用程序状态。

2.3.2 脚本回放失败的排查与优化策略

脚本在回放时可能会失败,排查和解决问题是优化脚本性能的关键。可能的原因包括但不限于:

  • 网络延迟或不稳定,导致操作超时。
  • 应用程序界面发生了变化,导致之前识别的对象属性不再匹配。
  • 脚本中存在逻辑错误或同步问题。

对于这些问题,优化策略可能包括:

  • 为测试脚本添加适当的延时,以应对网络延迟。
  • 更新对象库,修正或增加对象属性来匹配当前应用程序的界面。
  • 分析脚本逻辑,调整操作顺序和增加错误处理机制。

接下来将深入探讨应用程序对象识别与对象库管理的相关知识。

3. 应用程序对象识别与对象库管理

3.1 应用程序对象的识别机制

3.1.1 对象识别属性与优先级

在自动化测试工具如QTP/UFT中,对象识别是实现测试脚本有效性的核心。为了能够精确地定位和操作界面元素,测试工具需要借助于各种对象识别属性,例如名称、类型、位置坐标等。对象识别属性的优先级决定了在查找界面元素时,测试工具会根据哪些属性进行识别。

graph TD;
A[对象识别属性] -->|名称| B(高优先级);
A -->|类型| C(中优先级);
A -->|位置| D(低优先级);

识别属性的优先级从高到低依次是名称、类型、位置。当一个对象的名称被定义时,测试工具首先通过名称来识别对象。如果名称未被定义,则会尝试通过类型进行识别。如果类型也无法确定对象,那么会依赖位置信息来识别对象。

3.1.2 对象识别过程中可能遇到的挑战

在对象识别过程中,开发者和测试人员可能会面临多种挑战。例如,对象的动态ID变化、在不同的环境或版本中对象属性不一致、对象位置的动态变化等。这些因素都可能导致测试脚本中的对象识别失败。

为了应对这些挑战,测试人员需要采用合适的识别策略,比如使用稳定的属性组合,或者实现对象的动态识别。同时,合理的对象命名规则和管理机制也是确保对象识别成功率的关键。

3.2 对象库的创建与维护

3.2.1 对象库的作用与重要性

对象库是QTP/UFT中用来存储和管理应用程序对象信息的地方。通过对象库,可以对测试脚本中使用到的对象进行集中管理。这不仅使得脚本更加模块化和易于维护,还可以实现对象信息的复用,提高测试脚本的执行效率。

对象库可以包含对象的属性、描述、图片快照、测试检查点等多种信息,能够支持更复杂的测试场景和需求。

3.2.2 对象库的管理技巧与最佳实践

对象库的管理是一项细致的工作,涉及到创建、编辑、更新和删除对象等多个操作。为了有效地维护对象库,测试人员应该遵循一些最佳实践,比如定期更新对象属性,避免使用过于具体的属性值,使用对象的逻辑名称而不是物理名称,以及设置对象超时时间等。

维护对象库时,一个良好的习惯是在对象名称中包含其业务逻辑或功能用途,这样可以帮助测试人员更好地理解测试脚本的业务上下文。

3.3 对象的高级操作

3.3.1 对象关系的理解与运用

对象与对象之间存在各种关系,例如包含关系、父子关系等。在自动化测试中,正确理解和运用这些对象关系,可以帮助测试人员更加精确地定位和操作界面元素。例如,在Web测试中,一个下拉菜单可能包含多个菜单项,了解这种父子关系可以帮助测试人员准确地选择特定菜单项进行测试。

3.3.2 对象的动态识别方法

动态识别是指在对象属性经常变动的情况下,依然能够准确识别对象的方法。这通常涉及到编写脚本来检查多个属性的组合,当一个属性失效时,脚本会尝试使用下一个属性进行识别。动态识别需要测试人员对测试工具的脚本语言有较深的理解和实践经验。

一个动态识别方法的常见实现是编写函数来封装对象识别逻辑,当对象无法通过常规属性找到时,函数会尝试使用其他属性组合进行识别。

Function FindObjectByMultipleProperties(itemName, properties)
    For Each propertyPair In properties
        Set obj = Browser("title:=.*").Page("title:=.*").WebList(itemName).ChildItem(propertyPair.Name, propertyPair.Value)
        If Not obj Is Nothing Then
            Return obj
        End If
    Next
    Return Nothing
End Function

以上代码片段展示了如何使用VBScript在QTP/UFT中通过多个属性组合来动态识别对象。这里定义了一个名为 FindobjectByMultipleProperties 的函数,它接受一个项目名称和属性列表作为参数,遍历每个属性对,寻找匹配的对象。这种方法可以提高测试脚本的鲁棒性。

在对象识别与对象库管理这一章节中,我们详细探讨了对象识别的基本机制,对象库的创建与维护方法,以及对象的高级操作技巧。这些知识点对于自动化测试脚本的维护和测试过程的优化具有重要的指导意义,能够帮助测试人员更好地应对复杂和多变的应用程序界面,确保测试脚本的可靠性和效率。

4. 脚本编辑与调试方法

4.1 脚本的基本结构与元素

4.1.1 认识Action与Keyword View

在QTP/UFT中,Action是测试脚本的基本组织单元,它允许用户将测试步骤划分为多个独立的、可重复使用的部分。每个Action可以包含测试用例的一系列操作,使得脚本结构更加清晰。Action的使用不仅可以提高脚本的可维护性,还可以在多个测试场景中复用相同的步骤集合。Keyword View是QTP/UFT提供的一个界面,允许测试人员以关键字的形式查看和编辑测试步骤。每一个测试步骤都对应着一个关键字,这些关键字是从对象库中选取的对象与在测试流程中使用的动作的组合。

为了更好地理解Action和Keyword View的作用,我们来看一个具体的例子:

假设我们有一个Web应用程序的登录流程,我们希望验证不同用户身份信息的输入对登录操作的影响。我们可以创建一个名为 LoginTest 的Action来包含所有与登录相关的测试步骤。

Action 1 ' LoginTest
    WebButton("Login").Click
    If Browser("LoginWindow").Page("HomePage").WebEdit("UserName").Exists Then
        Browser("LoginWindow").Page("HomePage").WebEdit("UserName").Set "ValidUser"
        Browser("LoginWindow").Page("HomePage").WebEdit("Password").SetSecure "ValidPassword"
        WebButton("Login").Click
        Reporter.ReportEvent micPass, "Login Test", "Valid credentials provided and user was logged in."
    End If
End Action

在Keyword View中,这将展示为一系列的步骤,例如点击按钮、验证对象是否存在以及设置编辑框的值等。

4.1.2 脚本语言元素的应用与理解

在QTP/UFT中,脚本语言元素允许用户编写更复杂、更灵活的自动化测试脚本。这些元素包括变量、函数、循环和条件语句等,它们是提高脚本灵活性的关键。理解这些元素的应用,可以帮助测试人员编写可维护性高、功能强大的测试脚本。

例如,使用循环语句可以遍历一个数据表中的每一行,针对每一行数据执行相同的测试操作:

For Each Row In Sheet1
    Browser("LoginWindow").Page("HomePage").WebEdit("UserName").Set Row("Username")
    Browser("LoginWindow").Page("HomePage").WebEdit("Password").SetSecure Row("Password")
    Browser("LoginWindow").Page("HomePage").WebButton("Login").Click
    If Browser("LoginWindow").Page("HomePage").WebElement("Message").GetROProperty("innerText") = "Welcome" Then
        Reporter.ReportEvent micPass, "Login Test", "User " & Row("Username") & " logged in successfully."
    Else
        Reporter.ReportEvent micFail, "Login Test", "User " & Row("Username") & " failed to log in."
    End If
Next

上述代码中使用了 For Each 循环来遍历数据表 Sheet1 ,其中每一行代表一组用户名和密码。通过变量 Row 访问每一行的数据,实现对登录功能的批量测试。

理解脚本语言元素的应用,意味着能够根据不同测试场景的需求,灵活地调整和优化测试脚本。这样不仅能提高测试效率,还可以保证测试质量。

4.2 脚本编辑的高级技巧

4.2.1 利用脚本增强测试的灵活性

脚本语言提供了各种方式来增强测试的灵活性和可维护性。测试人员可以通过编写自定义函数来封装常用的操作,使得脚本更加模块化和易于管理。此外,利用参数传递可以编写通用的测试函数,根据不同的输入参数执行不同的测试逻辑。

考虑如下示例,我们创建了一个名为 Login 的函数,它接受用户名和密码作为参数,这样就可以在测试脚本的不同部分复用这个函数:

Function Login(userName, userPassword)
    Browser("LoginWindow").Page("HomePage").WebEdit("UserName").Set userName
    Browser("LoginWindow").Page("HomePage").WebEdit("Password").SetSecure userPassword
    WebButton("Login").Click
    If Browser("LoginWindow").Page("HomePage").WebElement("Message").GetROProperty("innerText") = "Welcome" Then
        Reporter.ReportEvent micPass, "Login Test", "Login successful with credentials provided."
    Else
        Reporter.ReportEvent micFail, "Login Test", "Login failed with provided credentials."
    End If
End Function

这个函数现在可以用于不同测试场景中,甚至可以在多个Action之间共享。

4.2.2 脚本中的条件控制与循环结构

条件控制和循环结构是任何编程语言中不可或缺的部分,它们允许测试脚本根据实际测试需求做出决策。QTP/UFT使用VBScript作为脚本语言,这使得脚本能够执行复杂的逻辑判断和重复执行某些测试步骤,直到满足特定条件为止。

以下示例展示了条件控制语句 If 和循环结构 For 的使用:

Dim counter
counter = 1
Do While counter <= 5
    ' 在这里执行测试步骤
    ' ...
    ' 如果测试失败,则退出循环
    If Not TestWasSuccessful Then
        Exit Do
    End If
    counter = counter + 1
Loop

这段代码使用了 Do While 循环来重复执行一个测试步骤,直到测试成功或者循环了五次为止。 If 语句则用于检查测试是否成功,并根据结果决定是否退出循环。

4.3 脚本调试的策略与方法

4.3.1 掌握调试工具的使用

调试是测试过程中的一个重要环节,它帮助测试人员找到脚本中可能存在的问题并修正它们。QTP/UFT提供了多种调试工具,包括断点、监视窗口、步进执行等。使用这些工具,测试人员可以逐步执行脚本,观察变量的变化,检查是否按照预期执行。

以下是一个简单的调试步骤:

  1. 打开脚本编辑器,定位到需要调试的脚本部分。
  2. 在脚本中设置断点,通过双击行号旁边的区域来添加。
  3. 打开“监视窗口”,可以添加需要观察的变量或表达式。
  4. 运行脚本,在达到断点后,脚本执行会暂停。
  5. 使用步进按钮,逐步执行脚本中的每一条语句,并观察变量的变化和执行流程。
  6. 一旦发现问题,可以在脚本编辑器中直接修改,并继续调试。

4.3.2 调试过程中的问题分析与解决

调试过程中,测试人员需要对出现的问题进行分析,并找出解决问题的方法。这可能包括检查对象属性值、验证逻辑是否正确、检查循环和条件语句是否有误,等等。一旦找到问题所在,就需要相应地调整代码或测试流程。

这里提供一个具体问题的分析与解决示例:

问题:在执行登录测试时,脚本总是报告登录失败。

解决步骤:

  1. 打开监视窗口,添加需要观察的变量如用户名、密码和登录后的消息提示。
  2. 在登录动作前设置断点,运行脚本直到断点处。
  3. 步进执行登录动作中的每条语句,观察变量值。
  4. 发现用户名和密码在执行前与期望值不符,检查之前的数据表读取逻辑是否正确。
  5. 修改读取数据表的代码,确保在登录前正确设置用户名和密码变量值。
  6. 继续执行脚本,并观察是否登录成功。

通过以上方法,测试人员可以逐步诊断和解决问题,直到脚本能够按照预期正确执行。有效的调试可以帮助减少测试过程中出现的错误,提高测试质量和效率。

5. 参数化与数据驱动测试实施

5.1 参数化测试的基本概念

5.1.1 了解参数化测试的重要性

参数化测试是一种自动化测试方法,其中测试数据从外部源(如Excel文件、数据库或文本文件)输入,而不是硬编码在测试脚本中。通过参数化测试,可以对同一测试用例使用不同的输入数据,从而提高测试的覆盖率和可靠性。它使得测试团队能够轻松应对应用程序输入和配置的多样性,同时极大地减少了测试脚本的维护成本。

使用参数化测试的好处在于可以重复使用测试脚本,并且在数据源发生变化时,无需修改脚本即可适应新的输入数据。这特别适用于那些需要处理大量输入和预期输出组合的测试场景,例如登录功能的测试,其中可能需要验证不同的用户名和密码组合。

5.1.2 参数化与数据驱动测试的区别与联系

虽然“参数化测试”和“数据驱动测试”这两个术语经常交替使用,但在严格意义上,它们有着细微的差别。

参数化测试更偏向于单个测试用例级别的数据管理,它关注于将数据从测试脚本中分离出来,以便可以针对不同的输入和预期输出来运行相同的测试逻辑。

数据驱动测试则是一个更广泛的术语,它包括参数化测试,并且关注于将数据输入和输出处理作为一个整体来管理。数据驱动测试往往涉及多个测试用例,使用统一的数据集来推动一系列的测试流程,非常适合于执行大规模的回归测试。

数据驱动测试可以看作是参数化测试的一种扩展,它通常使用外部数据源来驱动整个测试过程,涵盖了从数据的准备、管理到测试执行和结果分析的完整生命周期。

5.2 参数化测试的实施步骤

5.2.1 参数化数据的准备与输入

在开始参数化测试之前,我们需要准备测试数据并将其输入到一个外部数据源中。以下是实施参数化测试的基本步骤:

  1. 识别测试数据 : 确定哪些测试用例需要参数化,并识别出这些测试用例中的输入和输出数据。
  2. 选择数据源 : 决定数据存储的格式,常用的格式包括CSV、Excel或数据库等。
  3. 创建数据文件 : 使用选定的格式创建数据文件,并填充相应的输入和预期输出数据。
  4. 数据文件结构设计 : 设计数据文件的结构,确保每条数据记录对应一个测试数据集合,这通常需要一个列(或字段)来标识数据记录。

5.2.2 参数化在测试脚本中的应用实例

参数化测试的一个常见应用是在Web自动化测试中处理用户登录的场景。假设有一个测试脚本需要验证多个用户能否成功登录系统。以下是参数化过程中的代码示例:

假设我们有一个Excel文件( login_credentials.xlsx )作为数据源,它有两列分别为 username password ,每行代表一组测试数据。

Dim objExcel, objWorkbook, objSheet
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Path\To\login_credentials.xlsx")
Set objSheet = objWorkbook.Sheets(1)

' 读取Excel数据源
For iRow = 2 To objSheet.UsedRange.Rows.Count
    strUsername = objSheet.Cells(iRow, 1).Value
    strPassword = objSheet.Cells(iRow, 2).Value
    ' 应用读取的参数化数据
    Browser("Login Page").Page("Login").WebEdit("username").Set strUsername
    Browser("Login Page").Page("Login").WebEdit("password").Set strPassword
    ' 执行登录操作
    Browser("Login Page").Page("Login").WebButton("login_button").Click
    ' 验证登录是否成功
    If Browser("Login Page").Page("Home").WebSpan("welcome_message").Exist(3) Then
        Reporter.ReportEvent micPass, "Login", "User " & strUsername & " logged in successfully."
    Else
        Reporter.ReportEvent micFail, "Login", "User " & strUsername & " failed to login."
    End If
Next

' 清理资源
objWorkbook.Close
objExcel.Quit
Set objSheet = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing

在这个例子中,通过遍历Excel中的每一行数据,我们能够使用不同的用户名和密码组合来测试登录功能。该脚本会验证登录是否成功并记录结果。

5.3 数据驱动测试的高级应用

5.3.1 使用外部数据源进行数据驱动测试

数据驱动测试比参数化测试更为复杂,它通常涉及更广泛的数据管理策略和更复杂的测试场景。通过使用外部数据源,数据驱动测试可以实现以下目的:

  • 提高测试的可扩展性 :当测试场景非常复杂或需要运行成千上万个测试用例时,数据驱动方法可以有效地扩展测试范围,而不需要创建更多的测试脚本。
  • 优化数据管理 :由于所有的测试数据都存储在外部文件中,因此可以方便地添加、更新或删除测试数据,而不影响测试脚本。
  • 支持复杂的测试逻辑 :外部数据源使得测试脚本可以执行复杂的测试逻辑,如数据验证、错误处理和条件判断等。

5.3.2 数据驱动测试的场景与案例分析

让我们考虑一个高级的测试场景,比如电子商务网站的购物车功能测试。数据驱动测试可以帮助测试团队验证各种商品组合的加入购物车、价格计算以及库存检查功能。

在这个案例中,测试数据可以包括商品名称、价格、库存数量以及用户的选择等。通过将这些数据存储在外部数据源中,并在测试脚本中循环处理每一种组合,我们就可以确保网站处理各种情况的正确性。

例如,如果一个网站提供优惠活动,在一定数量商品购买后可以打折,我们可以编写测试脚本来验证此功能的正确实现:

import unittest
from selenium import webdriver
import os
import pandas as pd

class TestECommerceCart(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://www.example.com")

    def test_shopping_cart(self):
        excel_file = os.path.join(os.path.dirname(__file__), "cart_data.xlsx")
        cart_data = pd.read_excel(excel_file)

        for index, row in cart_data.iterrows():
            product_name = row["Product Name"]
            quantity = row["Quantity"]
            expected_price = row["Expected Price"]
            # Add product to cart
            self.add_product_to_cart(product_name, quantity)
            # Verify cart contents
            self.verify_cart_contents(quantity, expected_price)
            # Apply discount if applicable
            if quantity >= 10:
                self.apply_discount()
            # Final check
            self.final_check()

    def add_product_to_cart(self, product_name, quantity):
        # Code to add product to cart
        pass

    def verify_cart_contents(self, quantity, expected_price):
        # Code to verify cart contents
        pass

    def apply_discount(self):
        # Code to apply discount
        pass

    def final_check(self):
        # Code for final check
        pass

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

在这个测试框架中,测试用例会读取 cart_data.xlsx 文件中的每条记录,并为每一种情况执行完整的测试流程。这确保了测试覆盖了所有可能的组合,并且通过数据驱动的方式极大提升了测试的可维护性和可重用性。

6. 检查点与验证点配置

6.1 检查点与验证点的作用

6.1.1 认识检查点与验证点

在自动化测试的过程中,检查点和验证点是两个核心概念。它们是确保应用程序按照预期工作的关键步骤。检查点用于验证特定时刻应用程序的状态,而验证点则用于检查特定条件下的应用程序行为。检查点通常用于验证应用程序的用户界面元素,而验证点则更多地关注于数据验证或业务逻辑的准确性。

在QTP/UFT中,检查点和验证点被广泛用于提高测试脚本的健壮性和有效性。这些点的配置能够帮助测试人员捕获测试过程中的细节,并在测试执行完毕后提供全面的测试结果分析。

6.1.2 检查点在测试中的重要性

检查点和验证点对于确保软件质量至关重要。通过在测试脚本中合理配置检查点和验证点,可以有效地监控测试过程中可能出现的任何偏差或错误。当测试运行时,这些点会被触发,系统会自动比对实际结果与预期结果。如果检测到任何不一致,测试将报告为失败,并提供相应的详细信息供分析。

检查点的运用也提升了测试的可重用性。一个测试用例可以包含多个检查点,它们可以跨越多个不同的测试场景和数据集。此外,检查点的配置对于提升测试脚本的维护性和可读性也有积极的作用。

6.2 检查点与验证点的配置方法

6.2.1 步骤与工具的使用

在QTP/UFT中配置检查点和验证点是相对直观的。下面是一些关键步骤,帮助您在测试脚本中正确配置这些点:

  1. 打开测试视图 :在QTP/UFT中,首先打开您想要配置检查点的测试脚本。
  2. 定位到动作区域 :在测试的Action视图中,找到您想要添加检查点的位置。
  3. 使用检查点向导 :点击工具栏上的“插入检查点”按钮,选择合适的检查点类型(如标准检查点、图像检查点、表格检查点等)。
  4. 选择检查元素 :根据所选检查点类型,选择或指定被检查的对象。例如,在标准检查点中,选择一个界面上的按钮或链接。
  5. 配置检查标准 :设置检查的属性和预期值。例如,检查文本内容、属性值或对象存在性等。
  6. 保存并添加到脚本 :完成配置后,保存设置并将检查点添加到测试脚本中。

6.2.2 配置中的常见问题及解决方案

问题1:对象无法识别

  • 解决方案 :确保被检查的对象在测试运行时是可见且未被其他对象遮挡的。可以使用对象的唯一标识(如ID、名称或类名)来精确定位对象。

问题2:检查点设置错误

  • 解决方案 :仔细核对检查标准和预期值,使用正确的属性和比较方法。对于动态内容,可使用相对检查点来适应变化。

问题3:检查点导致性能下降

  • 解决方案 :合理安排检查点的位置,避免在性能密集型操作中加入检查点。在不影响测试准确性的情况下,可以适当减少检查点的使用。

6.3 检查点与验证点的高级应用

6.3.1 自定义检查点与验证逻辑

在某些情况下,预定义的检查点无法满足特定的测试需求。这时,可以利用QTP/UFT提供的脚本语言(如VBScript)来实现自定义的检查点和验证逻辑。例如,可以编写一段代码来验证两个字符串是否相似,或者比较两个文件的内容。

代码示例

Function CheckSimilarStrings(str1, str2, similarityThreshold)
    ' 自定义一个函数来计算两个字符串的相似度
    ' 返回相似度是否高于设定的阈值
    ' 这里可以使用一些现成的算法,如Levenshtein距离
    ' 相似度计算代码省略...
    ' 假设算法返回相似度值
    Dim similarity As Integer
    similarity = CalculateSimilarity(str1, str2)
    Return similarity > similarityThreshold
End Function

在这个例子中, CheckSimilarStrings 函数用于检查两个字符串是否相似。其中 similarityThreshold 是一个参数,表示可接受的最小相似度。实现这一函数需要根据实际需求编写具体的相似度计算逻辑。

6.3.2 结合脚本编程实现复杂验证

在自动化测试中,有时候需要进行复杂的验证,这可能涉及到多个条件的组合和数据处理。这时,可以通过脚本编程来实现这些复杂的验证逻辑。

代码示例

' 示例:验证订单的总价是否正确
Dim orderTotal, expectedTotal, discountAmount, taxAmount, shippingCost
orderTotal = ActiveBrowser("title:=Order Summary").Page("title:=Order Summary").WebEdit("name:=orderTotal").GetROProperty("value")
expectedTotal = CalculateTotal(items, prices, discounts)
discountAmount = CalculateDiscount(prices, discounts)
taxAmount = CalculateTax(prices, discountAmount)
shippingCost = GetShippingCost(items, destinations)

' 计算期望总价
expectedTotal = prices + discountAmount + taxAmount + shippingCost

' 验证
If orderTotal = expectedTotal Then
    Reporter.ReportEvent micPass, "Total Price Validation", "Total Price is correct."
Else
    Reporter.ReportEvent micFail, "Total Price Validation", "Total Price is incorrect. Expected: " & expectedTotal & "; Actual: " & orderTotal
End If

' 辅助函数的定义省略...

在上面的代码中,通过使用QTP/UFT提供的Reporter对象,脚本能够在测试结果中生成详细的信息,说明总价是否正确。函数 CalculateTotal CalculateDiscount CalculateTax GetShippingCost 用于辅助计算期望的总价。

通过这种方式,可以实现任何复杂度的业务规则验证,并在自动化测试脚本中执行它们。结合脚本编程来实现复杂验证能够大幅提高测试的灵活性和覆盖度。

7. 智能识别技术与对象重新识别

7.1 智能识别技术概述

在自动化测试中,智能识别技术扮演着至关重要的角色。它不仅提高了测试脚本的稳定性和可维护性,还能够在应用程序频繁更改时,快速适应新的测试环境。

7.1.1 智能识别技术的工作原理

智能识别技术依赖于一定的算法和机制,通过分析应用程序中的对象属性来识别和定位测试对象。这些属性可能包括对象名称、类型、位置或其他特定的识别符。智能识别技术能够处理对象的属性冲突,通过设置权重和优先级来确定最佳匹配项。

例如,QTP/UFT使用的是一种称为"Smart Identification"的技术,它可以在对象的正常属性发生变化时,通过一系列预定义的规则来定位对象。这些规则包括对象属性的权重设置、对象间的关系、以及智能筛选等。

7.1.2 智能识别技术的优势与局限

智能识别技术的主要优势在于它能够处理对象属性的动态变化,减少因对象属性改变而导致的测试脚本失败。然而,它也有局限性,比如在对象属性高度重复或缺乏明确区分的情况下,智能识别可能无法准确地定位对象。此外,过度依赖智能识别可能会降低测试脚本的可读性和维护性。

7.2 对象重新识别的策略与实践

在自动化测试过程中,对象重新识别是一个重要的环节,它确保了测试脚本能够在应用程序更新后依然能够准确地执行。

7.2.1 识别过程中可能出现的问题

随着应用程序的更新,一些对象的属性可能会发生变化,这会直接影响到测试脚本的稳定性。例如,一个按钮的文本内容发生了变化,或者某个控件的ID被重新命名,这些都可能导致原本有效的测试脚本出现问题。

7.2.2 优化对象识别的技巧与方法

为了应对对象识别中可能出现的问题,测试人员可以采取以下几种优化策略:

  • 调整智能识别设置 :在QTP/UFT中,可以调整智能识别的权重和优先级设置,以适应新的测试环境。
  • 使用对象库 :将常用或关键的对象及其属性存储在对象库中,以便在对象属性发生变化时能够快速更新。
  • 编写自定义代码 :利用脚本语言的灵活性,编写自定义函数或方法来处理特定的识别需求。

7.3 智能识别技术在测试中的应用案例

下面我们将通过两个应用案例来具体了解智能识别技术是如何在实际的测试工作中发挥作用的。

7.3.1 案例分析:复杂界面的智能识别

在处理复杂界面时,对象的属性可能会非常相似,这就要求智能识别技术能够准确区分它们。例如,在一个具有多个表格的网页中,每个表格都有相同类型的数据行,但每行数据都具有唯一性。

在本案例中,我们可以调整智能识别中的 Description 对象属性,赋予唯一标识符更高的权重,如ID或名称。这样即使在面对大量重复对象时,测试工具也能够正确地识别出每一个独立的表格行。

7.3.2 案例分析:动态内容的测试应对策略

动态内容在现代Web应用中十分常见,如不断更新的新闻头条或股票信息。在自动化测试中,动态内容可能会导致测试脚本无法稳定地找到测试目标。

针对这种情况,我们可以采取以下策略:

  • 监控属性变化 :记录动态内容对象的属性变化,并在测试脚本中设置条件判断,确保只有当特定属性符合预期时才进行测试。
  • 定期更新对象库 :通过定期的人工检查更新对象库中的对象信息,确保识别规则与应用程序的最新状态保持一致。

通过这些案例,我们可以看到智能识别技术在解决实际问题中的强大能力。在实现自动化测试的过程中,合理运用智能识别技术,不仅可以提高测试效率,还可以提升测试脚本的健壮性和可靠性。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:QTP(现称UFT)由HP开发,是功能自动化测试工具,尤其在回归测试和数据驱动测试方面表现出色。本教程深入解析QTP 8.2的功能,教授智能识别技术、脚本编写与调试、参数化测试、检查点设置等自动化测试的关键知识点。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值