行动于 QTP/UFT 与例子
⚡ 智能摘要
行动于 UFT/QTP 将测试脚本拆分成逻辑清晰、可重用的单元,以便测试人员能够更快地构建、维护和共享自动化测试。本页将介绍三种操作类型、如何拆分和调用它们,以及如何在操作之间传递数据。
什么是行动? 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 脚本 使用操作时,请注意全局迭代和局部迭代,因为它们都会影响操作实际运行的次数。您可以通过打开以下设置来更改已调用操作的重复频率: 操作调用属性 > 运行 在该选项卡中设置迭代模式。
⚠ 常见陷阱: 如果被调用的操作设置为在每次本地迭代中运行,但触发该操作的父级只运行一次,则该操作仍会执行一次。在假设被调用的操作会重复执行之前,请同时确认父级的全局迭代次数和子级的操作调用属性。

