当前位置: 首页 > news >正文

从零到一:基于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的测试脚本做冒烟测试,确保自动化测试基础功能正常。这个习惯帮我们避免了很多次环境配置错误导致的全套脚本失效问题。

http://www.jsqmd.com/news/793657/

相关文章:

  • 异步FIFO设计解析:跨时钟域数据安全交换与工程实践
  • Helium MCP:让AI助手掌握区块链查询能力的MCP协议实践
  • DHT11传感器数据读取老出错?Arduino避坑指南与常见故障排查
  • Go语言网络监控工具wiremonitor:轻量级数据包捕获与事件化分析实战
  • 2026年评价高的KTV职业装定制高评分公司推荐 - 品牌宣传支持者
  • 告别抓包!用Python脚本一键下载钉钉直播回放(附源码及详细配置)
  • 给网络工程师的O-RAN入门指南:从传统RAN到开放架构,到底改变了什么?
  • 2026年比较好的盐城网站优化/盐城官网建设/盐城做网站/盐城网站设计服务型公司推荐 - 行业平台推荐
  • 硬件混淆技术:UC方案在芯片安全中的原理与实践
  • 5分钟掌握B站视频下载:免费获取4K大会员高清视频完整指南
  • ESP8266刷机翻车实录:从esptool报错到乐鑫官方工具救场,我的避坑指南全记录
  • CAN总线EMI/ESD保护电路设计与器件选型指南
  • HomeAssistant Docker版安装后必做的5件事:从时区校准到开机自启(附systemd完整配置)
  • 2026年口碑好的包头grg构件/grg定制/酒店grg装饰/grg吊顶定制加工厂家推荐 - 品牌宣传支持者
  • 综合评估国际半导体展哪家好?汇聚主流国际半导体展资源 - 品牌2026
  • SwiftLLM:在Swift应用中原生集成大语言模型的实践指南
  • 基于HC32L136的工业物联网LCD数码屏驱动与低功耗实战解析
  • GM游戏官网哪个好 不花冤枉钱玩BT游戏
  • 别再只用真彩色了!Landsat 8/9 波段组合保姆级指南:从城市扩张到农业监测的实战应用
  • 你的ADC测量结果“跳”得厉害?可能是没用对过采样与均值滤波
  • 企业微信机器人如何接收并解析用户发送的图片消息内容
  • 用Xilinx FPGA的进位链(Carry Chain)实现高精度TDC:从原理到后仿真的保姆级避坑指南
  • Grafana变量查询实战:从零构建动态Dashboard标签筛选
  • AutoCAD字体缺失终极解决方案:FontCenter智能管理插件完整指南
  • 玩客云刷Armbian避坑全记录:TTL刷uboot、修复千兆网卡与EMMC写入的那些事儿
  • 中国半导体展哪家好?2026半导体展深度测评与看点 - 品牌2026
  • 月结实战:AR/AP重分类(Regroup)在SAP中的配置与执行全解析 [OBBU/OBBV/FAGLF101]
  • 开源数据中继openrelay:构建灵活高效的数据管道与集成方案
  • FPGA平台验证与C语言IP开发实践指南
  • 告别抖动与超调:深入剖析STM32直流电机控制中动态滤波与PI调节的协同优化策略