行动于 QTP/UFT 与例子

⚡ 智能摘要

行动于 UFT/QTP 将测试脚本拆分成逻辑清晰、可重用的单元,以便测试人员能够更快地构建、维护和共享自动化测试。本页将介绍三种操作类型、如何拆分和调用它们,以及如何在操作之间传递数据。

  • 🧩 定义: 一个操作将一组测试步骤组合成一个模块化的、可重用的单元,该单元位于一个 UFT/QTP 脚本。
  • 🔁 可重用操作: 在同一测试中或从任何其他测试中多次调用同一操作。
  • 🔒 不可重用的操作: 仅运行一次,且仅在创建它们的测试中运行。
  • 🌐 外部行动: 当不同的测试调用可重用操作时,该操作将变为只读外部操作。
  • ✂️ 拆分: 将一个大的动作分解成独立的同级动作或嵌套的父子动作对。
  • 📞 调用操作: 插入新操作、复制操作或调用现有操作。
  • 📤 参数: 使用 RunAction 语句在操作之间传递输入和输出值。
  • 🗂️ 数据表: 使用“全局”工作表存放测试范围内的数据,使用每个操作的“本地”工作表存放私有数据。

什么是行动? UFT/QTP?

行动 in UFT/QTP 将测试拆分为“逻辑单元”或“业务流程”。每个操作将执行一项可识别任务的步骤组合在一起,例如登录、搜索航班或预订机票。操作有助于创建更模块化、更高效的脚本。

新创建的脚本仅包含一个操作。您可以向 Micro Focus 脚本添加更多操作。 UFT 根据要求编写脚本,并且每个添加的操作都保持其自身的逻辑和本地数据,与测试的其余部分分开。

将冗长的脚本拆分成多个操作,在测试需要更改时非常有利。测试人员可以更新某个操作(例如登录流程),而无需触及其他操作中的搜索或结账逻辑。这种隔离还能将操作转化为可重用的构建模块,其他脚本可以直接调用这些模块,而无需重复编写相同的步骤。

例如,一个典型的航班预订脚本可以清晰地拆分为登录操作、搜索航班操作和预订机票操作。每个操作都有自己的步骤和本地数据,因此只需要验证登录功能的测试人员完全无需记录或维护预订流程。

行动类型 UFT/QTP可重用、不可重用和外部

UFT/QTP 支持三种类型的操作,您选择的类型决定了操作是否可以在脚本之间共享,还是仅在创建它的测试中才有效。

动作类型 哪里可以运行 可在调用测试中编辑
可重复使用 同一项测试,多次测试,或其他任何测试 是的,从拥有它的测试来看。
不可重复使用 仅在创建它的测试中,且仅一次 是
外部可重复使用 由另一个测试调用,作为共享的存储操作 不,它是只读的;只有它的本地数据表副本才能编辑。

可重用操作成为 外部行动 当另一个测试调用它而不是拥有它的测试时,就会出现问题。外部操作在调用测试中保持只读状态,因为一个共享操作可能同时被数十个脚本使用,允许每个调用者编辑步骤会破坏其他脚本。您仍然可以对调用进行参数化,并在本地使用其数据表的副本进行操作。

一般来说,如果一个新操作的逻辑仍然只针对一个测试,那么就应该避免该操作被重用。 Promo一旦第二个脚本需要相同的步骤,就将其设置为可重用,并期望它在第二个脚本实际调用它时表现为外部只读操作。

如何在拆分、复制和调用操作中 UFT

随着行动的推进,保持ping 每一步操作都放在同一个地方,会使脚本更难调试和重用。 UFT 允许你将一个变得难以管理的现有操作拆分成两种方式。

  • 独立(兄弟姐妹)分裂: 选定的操作会分成两个独立的操作,依次执行,每个操作都保持……ping 它自己的本地数据表。
  • 嵌套(父子)拆分: 选定的操作分为父操作和子操作,父操作的最后一步调用子操作,从而保持两者之间的逻辑依赖关系。

一旦行动存在, UFT 提供了三种将动作引入测试的方法 插页 菜单:

  • 插入新行动号召: 在当前测试中创建一个全新的、空白的操作。
  • 插入行动号召副本: 将现有操作完整复制到调用测试中,包括检查点、参数化和数据表选项卡。副本完全独立,因此其编辑不会影响原始操作,也不会受到原始操作的影响。您可以复制可重用操作和不可重用操作。
  • 插入对现有操作的调用: 插入一个只读调用,指向存储在另一个测试中的可重用操作。它只能在创建它的测试中修改,这样可以确保所有调用者保持同步,并使大型测试套件更易于维护。

每次调用最终都会汇总成一个 RunAction 专家观点中的声明:

' Calls Action2, which is stored in Test2, running it for one iteration
RunAction "Action2[Test2]", oneIteration

操作的运行次数取决于其“操作调用属性”的指定次数。例如,如果 Action2 设置为在 Test2 的数据表每次迭代时运行,但 Test1 中的调用 Action1 只运行一次,则 Action2 仍然只执行一次,因为调用本身只触发一次。

💡提示: 当测试包含多个操作时,打开 测试流程 从“视图”菜单中选择窗格,拖动即可重新排列它们。这将改变它们的顺序。 UFT 执行操作时不修改单个操作内的步骤。

以下视频基于之前教程中创建的五步登录脚本。 航班预订 并完整演示了如何创建、拆分和调用操作。这是本系列视频中最长的一个。 UFT/QTP 教程系列所以边看边记笔记会很有帮助。

点击 开始 如果视频无法访问

如何在操作之间传递参数和存储输出值

除了调用操作之外,大多数实际脚本还需要将数据移入其中,并将结果读出。 UFT 为每个动作赋予其自身的输入和输出参数,以及多种持久化其返回值的方法。

向操作传递参数和从操作传递参数

就像 函数或方法 在编程语言中,一个动作可以定义输入和输出。 参数此参数与 测试数据参数化 前面已经介绍过了;这里的参数属于操作本身,而不是数据表列。请从此处配置它们。 编辑 > 操作 > 操作属性或者,也可以在关键字视图中右键单击该操作。使用以下语法在调用中传递值:

' Passes an input value and captures the action's output into myResult
RunAction "Action1", oneIteration, "testuser", myResult

存储操作的输出值

根据脚本其他部分的需要,您可以将操作的返回值保存在以下三个位置之一:

  • 一个变量: RunAction "Action1", oneIteration, "testuser", myResult 将输出直接存储在 myResult.
  • An 环境变量: 在“下”创建一个用户自定义变量 文件 > 设置 > 环境然后写 RunAction "Action1", oneIteration, "testuser", Environment("env_var").
  • 数据表列: RunAction "Action1", oneIteration, "testuser", DataTable("A", dtGlobalSheet) 将结果直接写入全局工作表。

全球和本地数据表

操作通过两种类型的表格读取和写入测试数据。 全球数据表 它是整个测试中独有的;任何操作都可以读取或写入它,并且它始终被命名为“Global”。 本地数据表 每个操作都是唯一的,并且以该操作命名,只有该操作本身才能读取或写入它。

退出操作和控制迭代

当某个步骤需要提前终止某个操作而不是让它完成时, UFT 提供四项声明:

  • ExitAction — 仅停止当前操作。
  • ExitActionIteration — 停止当前操作迭代并进行下一次操作。
  • ExitRun — 立即停止整个测试运行。
  • ExitGlobalIteration — 停止当前的全局测试迭代,并进入下一个迭代。

在执行 UFT/QTP 脚本 使用操作时,请注意全局迭代和局部迭代,因为它们都会影响操作实际运行的次数。您可以通过打开以下设置来更改已调用操作的重复频率: 操作调用属性 > 运行 在该选项卡中设置迭代模式。

⚠ 常见陷阱: 如果被调用的操作设置为在每次本地迭代中运行,但触发该操作的父级只运行一次,则该操作仍会执行一次。在假设被调用的操作会重复执行之前,请同时确认父级的全局迭代次数和子级的操作调用属性。

常见问题

动作是内置的 UFT 该功能拥有自己的对象库和数据表,并且可能可重用,也可能不可重用。 function 它是纯 VBScript 代码,始终可重用,并且既没有对象库也没有数据表。

是的。您可以随时打开操作的属性并切换可重用标志。如果您将先前可重用的操作标记为不可重用,而其他测试仍在调用它,则调用该操作的测试将会失败。 UFT 直到通话记录被移除之前,都会显示警告。

测试操作会以 .mtr/.mts 操作文件夹的形式随测试一起保存,而不是以独立脚本文件的形式保存。相比之下,函数库会保存为单独的 .vbs 或 .qfl 文件,任何测试都可以关联并重用这些文件。

是的。人工智能辅助的测试设计工具可以扫描已录制的流程,并建议一些逻辑断点作为候选操作,例如登录、搜索和结账。测试人员在最终确定方案之前,仍应确认该方案是否符合实际的重用需求。

它很有帮助。自愈对象识别功能会在操作内部重新链接已移动或重命名的控件,而不是直接失败,从而减轻许多脚本共享的可重用和外部操作的维护负担。 Rev在完全信任之前,先观察一下被修复的物品。

总结一下这篇文章: