QTP自动化测试实战:机票订购系统脚本开发指南

张开发
2026/4/20 21:21:02 15 分钟阅读

分享文章

QTP自动化测试实战:机票订购系统脚本开发指南
1. QTP自动化测试入门从零开始搭建机票订购系统测试环境第一次接触QTP自动化测试工具时我也被它的功能震撼到了。这个强大的工具能模拟用户操作自动完成重复性测试任务。就拿机票订购系统来说手动测试需要反复输入出发地、目的地、日期等信息而QTP可以把这个过程完全自动化。我们先来搭建测试环境。QTP安装包通常包含一个演示用的机票订购系统flight4a.exe这个系统虽然简单但包含了完整的机票预订流程非常适合练手。安装完QTP后建议先创建一个专门的项目文件夹把flight4a.exe复制进去。我习惯在D盘新建QTP_Projects文件夹这样所有测试项目都能集中管理。启动QTP后第一件事是配置录制设置。点击Automation→Record And Run Settings选择Windows Applications选项卡。这里有个小技巧点击加号添加应用程序时建议直接浏览选择flight4a.exe的完整路径而不是简单地输入程序名。这样可以避免后续运行时找不到程序的尴尬。测试系统的默认账号密码都是mercury这个信息要记好。我第一次测试时就因为输错密码导致脚本录制失败。配置完成后点击确定保存设置就可以开始录制第一个测试脚本了。2. 机票订购系统测试脚本录制实战录制测试脚本就像教机器人如何操作软件。我们先从最简单的机票预订流程开始。点击录制按钮后QTP会立即启动flight4a.exe程序。这时你会发现鼠标旁边多了个红色圆圈表示正在录制。我建议按照这个顺序操作在登录界面输入用户名mercury和密码mercury选择出发地(From)和目的地(To)设置出发日期(Departing)点击Flights按钮查看航班列表选择任意一个航班输入乘客姓名和票数点击insert order生成订单录制完成后别急着停止。我建议多操作几个场景比如新建多个不同目的地的订单查询已生成的订单删除某个订单这些操作都会被QTP记录下来形成完整的测试脚本。停止录制后你会看到QTP自动生成了两种视图关键字视图(Keyword View)和专家视图(Expert View)。这两个视图各有所长我们后面会详细讲解。3. 关键字视图编辑技巧让测试脚本更清晰易读关键字视图是QTP最人性化的功能之一它以表格形式展示测试步骤即使不懂编程也能看懂。不过原始录制的脚本往往比较杂乱需要适当编辑优化。我通常会做这些优化删除无效步骤录制时难免会有多余操作比如输错密码又重试的步骤添加注释在Operation列右键选择Insert Comment用自然语言说明这个步骤的目的重命名对象默认的对象名可能不够直观可以改成更有意义的名称举个例子机票预订流程中的Flights按钮默认可能被识别为WinButton(Button2)。我们可以右键选择Object Properties在Name属性中改为FlightsButton这样后续维护时就一目了然了。另一个实用技巧是添加测试信息输出。右键某个步骤选择Report可以设置测试报告中要显示的信息。比如在订单生成步骤后可以添加订单号输出方便后续验证。设置方法很简单右键目标步骤选择Report在Report窗口中设置Status(通常选Passed)在Name栏输入订单号在Value栏选择实际订单号对象4. 专家视图深度编辑释放QTP的全部潜力如果说关键字视图适合新手那么专家视图就是给进阶用户准备的利器。在这里你可以直接编辑VBScript代码实现更复杂的测试逻辑。打开专家视图你会看到类似这样的代码Dialog(Login).WinEdit(Agent Name:).Set mercury Dialog(Login).WinEdit(Password:).SetSecure mercury Dialog(Login).WinButton(OK).Click这段代码对应登录操作。专家视图的强大之处在于可以添加条件判断、循环等控制结构。比如我们可以改进登录代码增加错误处理On Error Resume Next Dialog(Login).WinEdit(Agent Name:).Set mercury Dialog(Login).WinEdit(Password:).SetSecure mercury Dialog(Login).WinButton(OK).Click If Dialog(Login).Exist Then Reporter.ReportEvent micFail, 登录失败, 用户名或密码错误 Else Reporter.ReportEvent micPass, 登录成功, 成功进入系统 End If在机票预订场景中专家视图特别适合处理动态数据。比如航班列表可能每次都不一样我们可以用循环选择第一个可用航班Window(Flight Reservation).WinButton(Flights).Click Window(Flight Reservation).Dialog(Flights Table).WinList(From).Select London Window(Flight Reservation).Dialog(Flights Table).WinList(To).Select New York Window(Flight Reservation).Dialog(Flights Table).WinButton(OK).Click 选择第一个可用航班 Window(Flight Reservation).WinRadioButton(Flight).Set5. 检查点设置确保系统行为符合预期检查点是自动化测试的核心它能验证系统是否按预期运行。在机票订购系统中我们可以设置多种检查点。最常见的文本检查点右键关键步骤选择Insert Standard Checkpoint选择要检查的对象比如订单号显示区域设置检查属性通常选择Text属性设置预期值可以是固定值或参数化值我特别喜欢用正则表达式检查点来处理动态内容。比如订单号通常是变化的我们可以设置正则表达式检查点验证其格式 检查订单号格式是否为6位数字 If Not RegExpTest(^\d{6}$, Window(Flight Reservation).WinEdit(OrderNo).GetROProperty(text)) Then Reporter.ReportEvent micFail, 订单号格式错误, 订单号应为6位数字 End If页面检查点也很实用可以验证整个页面的关键元素是否都存在。在订单确认页面我们可以检查这些元素乘客姓名显示区域航班信息显示区域订单号显示区域确认按钮设置方法右键页面上的任意对象选择Insert Standard Checkpoint在对象选择窗口中勾选所有需要检查的对象设置每个对象的检查属性6. 参数化测试让脚本适应多种场景原始录制的脚本只能测试固定数据而实际测试需要覆盖多种情况。QTP的参数化功能可以解决这个问题。以登录功能为例我们可以测试多组用户名密码在关键字视图中右键密码输入步骤选择Value Configuration Options选择Parameter然后选择Data Table在Data Table中添加多组测试数据更高级的参数化可以通过专家视图实现。比如测试不同出发地-目的地的组合Dim departures(3), destinations(3) departures(0) London departures(1) Paris departures(2) Tokyo destinations(0) New York destinations(1) Sydney destinations(2) Beijing For i 0 To 2 Window(Flight Reservation).WinRadioButton(Flight).Set Window(Flight Reservation).WinComboBox(Fly From:).Select departures(i) Window(Flight Reservation).WinComboBox(Fly To:).Select destinations(i) 执行剩余预订步骤... Next参数化测试时我强烈建议配合检查点使用。比如验证不同出发地组合下系统返回的航班列表是否合理 检查航班列表是否包含预期航班 If InStr(Window(Flight Reservation).Dialog(Flights Table).WinList(Flights).GetROProperty(all items), ExpectedFlight) 0 Then Reporter.ReportEvent micFail, 航班验证失败, 未找到预期航班 End If7. 调试技巧与常见问题解决即使是最简单的机票订购系统测试也会遇到各种问题。这里分享几个我踩过的坑和解决方法。第一个常见问题是对象识别失败。QTP有时无法识别flight4a.exe中的某些控件。解决方法确保QTP的插件管理器中勾选了ActiveX和Windows插件使用对象探测器(Object Spy)确认对象属性必要时在对象仓库(Object Repository)中手动添加对象第二个问题是脚本运行速度太快导致操作失败。可以添加适当的等待时间 等待登录窗口出现最多等5秒 Window(Flight Reservation).WinObject(Login).WaitProperty visible, True, 5000第三个常见问题是动态对象处理。比如订单号每次都不一样我们可以用描述性编程解决 使用描述性编程获取订单号 Set desc Description.Create() desc(micclass).Value WinEdit desc(attached text).Value Order No: Set orderNoEdit Window(Flight Reservation).ChildObjects(desc)(0) Reporter.ReportEvent micPass, 订单号, orderNoEdit.GetROProperty(text)调试脚本时我习惯使用断点和单步执行。在专家视图中在代码行左侧点击设置断点按F5运行到断点按F11单步执行在Watch窗口添加监控变量最后提醒一点测试完成后记得在专家视图中添加清理代码关闭所有打开的窗口 关闭所有窗口 On Error Resume Next Window(Flight Reservation).Close Dialog(Flights Table).Close Dialog(Login).Close

更多文章