从零到一:基于MercuryTours的QTP自动化测试脚本实战演练
1. 环境准备搭建QTP测试舞台第一次接触QTP自动化测试时我花了整整两天时间折腾环境配置。后来才发现只要把几个关键组件装对顺序半小时就能搞定。以MercuryTours这个经典的机票预订网站为例我们需要先准备好以下舞台道具必备软件清单QuickTest Professional 11.0建议用这个经典版本兼容性最好IE浏览器必须是IE8-IE11QTP对Chrome支持较差Java运行时环境MercuryTours是Java开发的QTP的Web插件安装时会提示勾选安装时有个坑特别容易踩一定要先装IE再装QTP。我有次偷懒先装了QTP结果录制时死活识别不了网页元素最后只能卸载重装。装完记得打上最新的补丁包官网的补丁包命名通常像QTP_00xx这样按数字顺序打就行。验证环境是否就绪有个小技巧打开QTP后按F7调出对象探测器鼠标悬停在IE的输入框上如果能正确识别为WebEdit对象说明环境配置成功了。如果遇到识别异常试试以管理员身份运行QTP这个操作解决了我们团队80%的环境问题。2. 录制第一个测试脚本登录到订票录制脚本就像教机器人学做菜得把每个步骤拆解得特别细。我们先从最简单的用户登录→查询航班→订票流程开始在QTP新建一个Test类型选Web点击红色录制按钮在弹出的对话框里输入MercuryTours的网址在打开的网页中输入用户名mercury和密码mercury这是Demo账号依次选择航班类型、出发地、目的地建议选固定值比如纽约到伦敦点击Continue进入下一页选择航班日期和航班号最后填写乘客信息并点击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,123. 增强脚本的可靠性刚录制的脚本就像刚拿到驾照的新手得给它加几个安全措施。以下是几个必做的优化点对象库管理 在对象库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) Paris4. 调试与回放技巧第一次回放脚本大概率会遇到各种报错别慌这是正常现象。分享几个实用的调试技巧问题排查三板斧看报错行号QTP的错误提示会精确到代码行检查对象属性用对象探测器对比录制时和回放时的控件属性分步执行按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 mercury6. 从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的测试脚本做冒烟测试确保自动化测试基础功能正常。这个习惯帮我们避免了很多次环境配置错误导致的全套脚本失效问题。