从零到一:基于MercuryTours的QTP自动化测试脚本实战演练

📅 2026/7/7 23:12:44 👁️ 阅读次数 📝 编程学习
从零到一:基于MercuryTours的QTP自动化测试脚本实战演练

1. 环境准备:搭建QTP测试舞台

第一次接触QTP自动化测试时,我花了整整两天时间折腾环境配置。后来才发现,只要把几个关键组件装对顺序,半小时就能搞定。以MercuryTours这个经典的机票预订网站为例,我们需要先准备好以下"舞台道具":

必备软件清单

  • QuickTest Professional 11.0(建议用这个经典版本,兼容性最好)
  • IE浏览器(必须是IE8-IE11,QTP对Chrome支持较差)
  • Java运行时环境(MercuryTours是Java开发的)
  • QTP的Web插件(安装时会提示勾选)

安装时有个坑特别容易踩:一定要先装IE再装QTP。我有次偷懒先装了QTP,结果录制时死活识别不了网页元素,最后只能卸载重装。装完记得打上最新的补丁包,官网的补丁包命名通常像"QTP_00xx"这样,按数字顺序打就行。

验证环境是否就绪有个小技巧:打开QTP后按F7调出对象探测器,鼠标悬停在IE的输入框上,如果能正确识别为WebEdit对象,说明环境配置成功了。如果遇到识别异常,试试以管理员身份运行QTP,这个操作解决了我们团队80%的环境问题。

2. 录制第一个测试脚本:登录到订票

录制脚本就像教机器人学做菜,得把每个步骤拆解得特别细。我们先从最简单的"用户登录→查询航班→订票"流程开始:

  1. 在QTP新建一个Test,类型选"Web"
  2. 点击红色录制按钮,在弹出的对话框里输入MercuryTours的网址
  3. 在打开的网页中输入用户名"mercury"和密码"mercury"(这是Demo账号)
  4. 依次选择航班类型、出发地、目的地(建议选固定值比如纽约到伦敦)
  5. 点击"Continue"进入下一页,选择航班日期和航班号
  6. 最后填写乘客信息并点击"Secure Purchase"

录制时有个细节要注意:鼠标点击动作之间最好加个Wait(2)的等待,因为网页加载需要时间。我早期录制的脚本经常因为页面没加载完就执行下一步导致失败。QTP默认的录制模式是"Analog"模式,对于网页操作建议切换到"Web"模式,这样生成的代码更简洁。

Browser("Mercury Tours").Page("Mercury Tours").WebEdit("userName").Set "mercury" Browser("Mercury Tours").Page("Mercury Tours").WebEdit("password").SetSecure "mercury" Browser("Mercury Tours").Page("Mercury Tours").Image("Sign-In").Click 35,12

3. 增强脚本的可靠性

刚录制的脚本就像刚拿到驾照的新手,得给它加几个"安全措施"。以下是几个必做的优化点:

对象库管理: 在对象库(Object Repository)里给每个控件改个有意义的别名,比如把"WebEdit1"改成"txtUsername"。这样三个月后回来看脚本还能明白每个控件的作用。我习惯按页面结构给对象分组,比如"LoginPage"组下放用户名、密码输入框和登录按钮。

检查点(Checkpoint): 在关键步骤插入检查点验证结果。比如登录后可以检查是否出现"Flight Finder"文字:

If Not Browser("Mercury Tours").Page("Flight Finder").Exist Then Reporter.ReportEvent micFail, "登录验证", "未跳转到航班查询页" End If

参数化: 把固定值改成参数,比如出发地、目的地。这样可以用同一脚本测试不同航线:

DataTable("Departure", dtGlobalSheet) = "London" DataTable("Arrival", dtGlobalSheet) = "Paris"

4. 调试与回放技巧

第一次回放脚本大概率会遇到各种报错,别慌,这是正常现象。分享几个实用的调试技巧:

问题排查三板斧

  1. 看报错行号:QTP的错误提示会精确到代码行
  2. 检查对象属性:用对象探测器对比录制时和回放时的控件属性
  3. 分步执行:按F10逐行执行,观察哪一步出问题

常见错误及解决方案:

  • 对象无法识别:可能是页面加载慢,在操作前加Wait;或者控件属性变了,更新对象库
  • 验证失败:检查预期结果是否合理,比如航班价格可能每天变动
  • 脚本超时:调大Settings.Web.Timeout的值

我习惯在调试时开着两个窗口:一边是QTP的调试器,另一边是对象库。遇到问题先用Print语句输出变量值,这个笨办法往往最快定位问题。记得每次修改脚本后立即保存,QTP偶尔会意外崩溃,别问我怎么知道的...

5. 实际项目中的经验之谈

在真实项目中用QTP测试MercuryTours这类系统时,有几个教科书上不会写的实战经验:

测试数据准备: 建一个专门的Excel管理测试数据,用QTP的DataTable导入。比如:

  • 有效/无效用户名密码组合
  • 不同的出发地-目的地组合
  • 特殊字符的乘客姓名(测试边界情况)

异常处理: 用On Error Resume Next处理预期内的异常,比如:

On Error Resume Next Browser("Mercury Tours").Page("Flight Finder").WebButton("Continue").Click If Err.Number <> 0 Then Reporter.ReportEvent micWarning, "按钮点击", "Continue按钮未找到" ExitAction End If

脚本维护

  • 每周末花半小时整理对象库,删除无用对象
  • Description对象实现动态对象识别,提高脚本适应性
  • 重要的脚本加上版本注释,记录修改人和修改内容

有次我们系统升级导致所有脚本失效,就是因为过度依赖固定属性识别对象。后来改用动态识别方案,类似这样:

Set desc = Description.Create() desc("html tag").Value = "INPUT" desc("name").Value = ".*userName.*" ' 支持正则表达式 Browser("Mercury Tours").Page("Mercury Tours").WebEdit(desc).Set "mercury"

6. 从Demo到实战的跨越

当你能稳定运行MercuryTours的测试脚本后,可以尝试这些进阶操作:

批量执行: 用QTP的Test Batch Runner工具批量运行多个测试脚本,适合夜间执行回归测试。记得在脚本开头加上环境检查代码:

If Not Environment("QTPVersion") = "11.0" Then MsgBox "请在QTP11.0环境中运行此脚本" ExitTest End If

自动化调度: 通过Windows任务计划定时执行测试,配合自动邮件发送结果。需要封装一个vbs启动脚本:

Set qtApp = CreateObject("QuickTest.Application") qtApp.Launch qtApp.Open "C:\Tests\MercuryTourTest" qtApp.Test.Run

结果分析: 用QTP的Test Report导出XML报告,再用Excel做数据分析。重点关注:

  • 失败用例的截图(设置Reporter.ReportEvent时保存截图)
  • 执行时长突变的用例
  • 对象识别稳定性统计

我带的几个新人常犯的错误是只关注脚本能不能跑通,却忽略了测试覆盖率。建议用QTP的Step Generator工具检查是否覆盖了所有关键路径,特别是异常流程比如:

  • 用户名错误时的提示
  • 航班已满时的处理
  • 信用卡无效的校验

最后提醒一点:QTP脚本不是一劳永逸的,随着系统迭代需要持续维护。我们团队有个好习惯——每次版本更新后,用MercuryTours的测试脚本做冒烟测试,确保自动化测试基础功能正常。这个习惯帮我们避免了很多次环境配置错误导致的全套脚本失效问题。