标题：精通QTP—自动化测试技术领航
图书信息
【书名】精通QTP-自动化测试技术领航  【作者】余杰 赵旭斌 编著
【丛书名】测试实践丛书
【出版社】人民邮电出版社
【ISBN】978-7-115-26983-6
【上架时间】2011-12-27
【定价】69.00元
内容简介
本书没有所谓的“篇”的概念，但是假设要划分为“篇”，作者会分为三个篇章。将第1、第2章归为一篇；将第3、第4章归为一篇；最后将第5、第6章归为一篇。下面大致介绍下这三个“假设性篇章”的功能：
“第一篇”能让读者超级系统化地学习QTP最实际的应用。整个第1章就是将不同的所需掌握的知识依次讲解，读者绝对可以放心，顺序都是两位作者精心设计过的。那么基本技能我们有了，我们还需要一些真实项目的经验积淀，那就可以进入第2章的学习了，里面涵盖了大量真实鲜活的模拟项目的例子以及做项目时我们需要的一些其它QTP技术，作者讲解这些例子时也不断地在为读者扩展思路，帮助大家一通万通。一旦这2章学通了，你一定可以独自承担自动化测试的脚本开发工作！一定！别小看它虽基础，地基不打好造出的房子叫豆腐渣！
“第二篇”能让读者深度掌握QTP，里面介绍的技术虽然不一定每次、每天都会使用，但是要使用时如果你不会你就比别人更逊一筹了！而且也只有学会了这些技术，读者才会有更多的底蕴。这2章一旦学通，可以说是“出师”了，也是一个很重要的跨越阶段！
“第三篇”能让读者有一个层次上的上升。这个提升尤其体现在看待自动化测试的角度上。读我们这本书的设计模式和自动化测试框架的内容，千万别照搬学样，我们的初衷不是让读者模仿，而是借鉴！学会借鉴然后去和自己的项目匹配，因为这2章内容是浓缩的精华，就拿“设计模式”说好了，知道吗？这些设计模式都是国外的QTP专家认可的！如果读者照搬，那么得说抱歉了，这2个章节没有那么伟大、那么强大！
另外，本书在第1、2、3、4章节精心设置了习题和讲解，目的很明确，帮助读者巩固已学的内容，也给读者一些练习的素材，做过这些习题后，其实读者以后也就知道如何找素材来练习了。建议读者用心完成以后再参考作者的讲解内容，效果更佳！特别对于QTP初学者，设置习题更让本书的教学质量提升了，作者不会也不想让新人光看不练。
关于本书作者
余杰，网名“yujie6832”，51Testing技术专家，担任51Testing论坛QTP版主。精通QTP的脚本开发与应用，发表过多篇QTP技术文章。曾任职于多家国内外大型企业，具备多年自动化测试工作经验，对自动化测试项目及QTP测试框架有很深的研究。同时也具有多年QTP自动化测试的企业培训经验并深受好评，擅长系统化的自动化测试教学。
赵旭斌，网名“zzxxbb112”，iQuickTest领先技术专栏创始人及51Testing技术专家，担任51Testing论坛QTP版主，发表了40余篇QTP经典系列讲座，深受读者好评。曾在多家大型企业任职，担任过多年大型项目的自动化测试技术研究顾问。对QuickTest Pro有深入研究、擅长自动化测试领域的框架开发、模式设计以及国外最新自动化测试技术。
前言
《QTP自动化测试技术领航》终于如期与广大读者见面了！ 在此，本书的两位作者首先感谢测友们的鼎力支持、期待以及提供给我们的各类宝贵“需求”；同时，我们也非常感谢51Testing软件测试网（上海博为峰软件技术有限公司）一年来的肯定与支持，这次能与51Testing联名合作，是一种缘分和一股巨大的动力！
在这一年的时间里，两位作者肩上的担子真的很重：有时间的压力，它凝聚了我们365天的所有工作之余的业余时间，将这些时间加起来，就是本书的实际编著时间；有精神上的压力，工作任务艰巨，当下班后原本就已疲惫不堪的身躯和灵魂仍然要提起120%的精神坐在电脑前，一字一字地敲击着键盘；有责任感的压力，我们从没有想过以“敷衍、草草了事”的态度来完成本书的创作，因为我们深知这会伤害到花了银子买书的读者以及两位作者的个人声誉！从整本书的框架构思开始到实际在编著内容时我们都时刻警惕自己！多少次熬夜、多少次反复修稿。。。。。。一切的一切就是要为了出一本好书，至少我们很肯定这是一本好书，本书是我们的心血之作、100%用心之作，凝聚了春夏秋冬、四季轮回的酸甜苦辣！
在写这本书前，我们考虑到了2个大难题：
其一，就是如何才能让读者（尤其是QTP初学者）真正地学会实际应用QTP做企业项目，而且还不能学死！光这一点作者就花了相当大的脑力和精力，最后得出了共同的结论：“通俗且幽默”。相信大家都有这样的体会，就是对着一本计算机的技术书或者工具书，对着那些死板的代码和文字，往往会有想睡觉的感觉。在本书中读者时常会看到和QTP没关系的话题，比如“芙蓉姐姐”、“凤姐”等，相信这么做是有很多好处的，因为技术类书籍如果写得太死板、不生动、太官方化、太专业化反而会让读者有睡觉的冲动，而如果使用通俗的文字，读者理解起来就很方便了，再配上一点点的幽默，读者就会有看下去的欲望，至少不会觉得很累！反正这本书不是面向教科委的，没有那么多条条框框的限制；
其二，实例素材的收集。我们知道，市面上现有的QTP书籍无非是采用老套的QTP自带的飞机订票系统，都这么多年了，也该换换口味了！那个系统不光陈旧也不够真实，和现在我们做的项目出入太大！所以经过讨论，两位作者最后达成共识，决定启用“51Testing门户网站”、“51Testing论坛”、“51Testing博客”、“百度”等大型Web网站，它们都是最新、最贴近现实、最鲜活的“现成项目”。这样，读者就等同于在边学QTP边做真实项目，我们提供的模拟项目越真实，读者吸收到的养分就越多，吸收得也越快！当然，就是因为启用了这些免费素材，所以本书没有赠送源代码，不是为了省那几毛钱的CD钱，是实在没有必要了，因为这些网站的对象都是随时变化的，即使我们把源代码拷给读者，对读者来说也没任何意义，因为运行后肯定会失败、报错！不过读者不用担心，在代码解读这方面，作者已经做得很到位了，只要用心，读者就不会存在有理解不了的代码，而且作者还有意的安排了“循环性的重复”，从而不断巩固知识点！所以只要用心研读，最后一定能掌握写QTP代码的技巧并能够实际运用到企业的项目中去，这也不就是我们学QTP的目的吗？拿现成的代码运行一次是肯定学不会QTP的！另外，作者是期盼着我们用过的实例的对象全都发生变化的，这样读者也就不能照着书依样画葫芦了，从而不得不静下心来思考如何去改代码，这不由自主的又变成了脚本维护经验的绝佳的积累机会，相信通过一段时间的积累，读者一定会通悟QTP的！
本书的七大特色
一、“三合一”全能读物：教科书、实战项目指导书、高端技术 / 管理人员参考书
二、采用QTP 10.0版本，保证读者学到的内容不过时
三、本书的理念就是“实用”，故所有不实用、项目中不常用的内容全部剔除
四、本书没有QTP“录制”方面的任何内容，全部是QTP脚本开发的教学与指导
五、不是一本照抄QTP“帮助文档”的书籍
六、实例新颖、趣味、符合实际，市面上目前最真实的模拟项目环境
七、首创的知识巩固练习题配合练习详解帮助读者学以致用
本书针对的读者群
自动化测试初学者——深度知悉自动化测试到底是什么，怎么做
---他们可以在本书中掌握自动化测试的技巧、理念，吸取作者的测试自动化经验。
QTP初学者——学会使用QTP编码技术
---这本书就是一本非常好的“教科书”，两位作者也是从初学者走过来的，最能体会初学者最想要什么、最需要什么！这本书太适合这部分角色的读者了！
QTP项目开发人员——提高自身的编码技巧，拓展QTP知识
---在做项目的时候，如果能在办公桌上备下本书，相信能减少查询百度的动作，因为本书中涵盖了各种QTP实用技术，且这些技巧只针对项目中的实际应用。
QTP技术高手——本书部分高级内容给这部分读者参考、借鉴、补缺
---从第4章开始的所有内容都会帮助到这部分读者。拿设计模式举例，一个技术高手不一定擅长此道，因为如果他擅长了他就不叫高手了，他应该叫QTP架构师（开个玩笑）！
QTP架构师——本书第5、6章内容给这部分读者更多的灵感
---本书的第6章“QTP原创框架设计展示”是作者花了非常多的心血原创的实际框架，并会细致地解析，相信对QTP架构师会是一个很好的参考。当然，对于这部分读者，作者没有太多的想法供参考，只能说是一种交流。
测试经理——你不一定了解自动化测试和QTP自动化实施，但看完本书你就啥都了解了
---本书能帮助测试经理提高QTP功能自动化测试这块的业务水平与贡献。
自动化测试组长——本书的第1~6章都适合这个角色
---同QTP技术高手、QTP架构师、测试经理。
QTP培训师——这本书给这部分角色的读者最大的便利，这么好的现成的教科书拿来就能用
---作者认为本书最能给到力的读者除了初学者就是培训师了，因为本书的一大功能就是教科书功能，作者通过自身丰富的培训经验，完全是以循序渐进的理念来指导每一位读者，最后成为一名QTP自动化测试技术高手。
特别致初学者：

目录
第1章  测试脚本开发从零开始 9
　　1.1  自动化测试从零开始 9
1.1.1  你真的了解自动化测试吗？ 9
1.1.1.1  引言 9
1.1.1.2  自动化测试能做到什么及其优势，你心知肚明吗？ 9
1.1.1.3  自动化测试无法做到的事及其劣势分析 10
1.1.1.4  何时适合引入自动化测试 11
1.1.1.5  何时避免展开自动化测试 12
1.1.1.6  “江湖传言”解读、思考和经验总结 13
1.1.2  严格的自动化测试流程 18
1.1.2.1  影响自动化测试成功与否的关键因素是流程 18
1.1.2.2  自动化测试项目“标配” 25
1.1.3  自动化测试用例设计详解 26
1.1.4  教父级自动化测试工具Quick Test Professional 28
1.1.5  总结 30
知识点巩固和举一反三练习 30
1.2  帮助文档(HELP) - QTP的说明书 31
1.2.1  永远任劳任怨的良师益友“F1” 31
1.2.1.1  “F1”的简单介绍 31
1.2.1.2  如何获取最新的帮助文档 34
1.2.2  妙用F1可事半功倍 35
1.2.2.1  焦点功能引导 35
1.2.2.2  脚本定位跟踪 37
1.2.3  请遗忘脑中的代码，掌握查阅Example实例技巧 39
1.2.3.1  封装方法实例查阅 39
1.2.3.2  VBScript方法函数查阅 41
1.2.4  总结 42
知识点巩固和举一反三练习 43
1.3  录制与回放 – QTP的开关 43
1.3.1  请拒绝“录制”，再开始你的实际项目之旅 43
1.3.1.1  引言 43
1.3.1.2  一些“理论性的社会实际问题”实例 44
1.3.2  录制功能更多的只是新人学习时的利器，仅此而已 45
1.3.2.1  Don’t Waste Time,录制相关功能只需把握几个重点 45
1.3.2.2  为什么说录制是学习利器，有根有据，请听我细细道来 58
1.3.3  录制时需注意模式的切换 60
1.3.3.1  三种录制模式的基本介绍 60
1.3.3.2  Analog Recording和Low Level Recording的区别与规则 61
1.3.4  有必要让你掌握尤其重要的QTP回放机制 62
1.3.5  总结 73
知识点巩固和举一反三练习 73
1.4  认清并请远离QTP的脚本录制模式 74
1.4.1  QTP的两种视图及思维转换 75
1.4.2  总结 78
知识点巩固和举一反三练习 79
1.5  QTP精华 - 对象库（上）之基础攻略篇 80
1.5.1  引言 80
1.5.2  对象库的出现改写了历史 81
1.5.3  一个简单的实例介绍对象库原理、机制及操作流程 81
1.5.3.1  对象模型的老大Object Identification和对象库的暧昧关系 81
1.5.3.2  以一个实例囊括对象库的原理机制与操作流程并揭开整个篇章 91
1.5.4  对象库基本操作 93
1.5.5  Object Spy让对象无处藏身 118
1.5.5.1  结交新朋友 -- 侦探Jack 118
1.5.5.2  捕获对象时的模式切换 124
1.5.6  对象库的最高指挥官(Object Repository Manager) 127
1.5.6.1  使用公共对象库更有利于项目管理 127
1.5.6.2  对象库的对比与合并 129
1.5.7  总结 139
知识点巩固和举一反三练习 139
1.6  对象库（下）之进阶编程篇 139
1.6.1  引言 139
1.6.2  基于Expert View的对象库编程必备知识 140
1.6.2.1  手写代码的三种方式 140
1.6.2.2  其它补充知识点 152
1.6.3  封装对象模型 - Test Objects VS Run-time Objects 159
1.6.3.1  解密测试对象与运行时对象 159
1.6.3.2  三兄弟GETRO、GETTO、SETTO各显神通 159
1.6.3.3  对象封装属性的真正源头 166
1.6.4  梳理运行时对象的封装与自身接口的属性区别 170
1.6.4.1  解读对象的自身接口 170
1.6.4.2  教你如何成为一名黑客 171
1.6.5  几种常见对象无法识别或识别错误的原因 175
1.6.6  总结 176
知识点巩固和举一反三练习 177
1.7  描述性编程(Descriptive Programming) 178
1.7.1  一点都不神秘和高深的描述性编程技术 179
1.7.2  掌握描述性编程的两种写法 180
1.7.3  Object Identification与Spy结合DP的妙用 184
1.7.4  描述性编程的妙用以及与对象库编程的混搭 188
1.7.5  终极对决 - 对象库编程(OP) VS 描述性编程(DP) 193
1.7.6  总结 194
知识点巩固和举一反三练习 194
1.8 数据池（Data Table）的应用 194
1.8.1  引言 195
1.8.2  学会使用DataTable进行参数化 195
1.8.2.1  为什么要进行参数化？ 195
1.8.2.2  如何具体操作？ 198
1.8.2.3  Global Sheet  VS  Local Sheet 201
1.8.3  Test DataTable  VS  Run-time DataTable 206
1.8.4  用好DataTable对象使脚本更加灵活 209
1.8.5  总结 213
知识点巩固和举一反三练习 214
1.9 操作模块（Actions） 214
1.9.1  使用Actions来控制好业务流 214
1.9.2  Call Action的三种方式 220
1.9.3  Action的切分 225
1.9.4  总结 227
知识点巩固和举一反三练习 227
1.10  QTP的验证点与测试报告 227
1.10.1  自动化测试的有效性取决于验证点的质量（引言） 227
1.10.2  侦探Jack再度登场 228
1.10.3  抛弃工具的使用，请使用QTP验证点函数！ 230
1.10.3.1  请抛弃QTP自带的验证点功能！ 230
1.10.3.2  使用QTP“原装”验证点函数进行一切检查工作！ 231
1.10.4  灵活的自定义验证点 234
1.10.5  走进QTP Report – Test Report正式登场！ 236
1.10.6  自定义验证点 – HTML模式 239
1.10.7  总结 242
知识点巩固和举一反三练习 243
第2章  轻松驾驭实际项目 243
　　2.1  VBScript在项目中的应用 243
2.1.1  请你培养代码规范的好习惯（引言） 243
2.1.2  VBS基础知识提炼 246
2.1.2.1  VBS的基本语法 246
2.1.2.2  错误处理 248
2.1.3  常用函数解析 249
2.1.4  Function VS Sub 终极角逐 256
2.1.5  获取对象引用GetRef方法 257
2.1.6  类的简单应用 258
2.1.7  VBS中SendKeys与项目结合的妙用 260
2.1.8  总结 263
知识点巩固和举一反三练习 263
2.2  精通项目中10类常用Web控件 263
2.2.1  读前布告（引言） 264
2.2.2  Browser&Page 265
2.2.3  Link 272
2.2.4  WebEdit&WebButton 277
2.2.5  WebElement 283
2.2.6  WebCheckBox 288
2.2.7  WebList&WebRadioGroup 292
2.2.8  WebTable 298
2.2.9  总结 305
知识点巩固和举一反三练习 306
2.3  函数资源库（Library Files） 308
2.3.1  引言 308
2.3.2  资源池静态调用方式 309
2.3.3  强大的动态调用方式 313
2.3.4  函数库功能在QTP 10.0中的增强 314
2.3.5  总结 318
知识点巩固和举一反三练习 319
2.4  环境变量（Environment Variables） 319
2.4.1  引言 319
2.4.2  实用的QTP内置环境变量 319
2.4.3  灵活的自定义环境变量及利用外部XML配置环境变量 325
2.4.4  综合实例 -- 环境变量的动态生成与秘密加载 327
2.4.5  总结 330
知识点巩固和举一反三练习 330
2.5  常用保留对象 (Utility Objects) 330
2.5.1  常用保留对象介绍 331
2.5.2  隐藏保留对象介绍 333
2.5.3  自定义保留对象 335
2.5.4  总结 339
2.6  QuickTest 自动化模型对象 (AOM) 339
2.6.1  不同开发环境下的AOM使用解析 340
2.6.2  QTP自动化模型的引用 341
2.6.3  让QTP舞动起来 344
2.6.4  总结 346
2.7  无人值守测试的守护神 - 场景恢复(Recovery Scenarios) 346
2.7.1  你必须知道的几种场景恢复的误区 346
2.7.2  陌生的Web默认场景恢复 348
2.7.3  无所不能的自定义场景恢复函数 349
2.7.4  总结 353
第3章  项目应用高级扩展实例精讲 353
　　3.1  正则表达式 353
3.1.1  请允许我告诉你何时在脚本中设计正则表达式 354
3.1.2  正则之对象属性参数化应用详解 355
3.1.3  RegExp对象的应用讲解 360
3.1.4  总结 363
知识点巩固和举一反三练习 363
3.2  HTML DOM 363
3.2.1  你了解DOM在QTP中应用的好处吗？ 364
3.2.1.1  什么是DOM 364
3.2.1.2  何时在QTP中使用DOM 366
3.2.2  IE对象模型结合HTML DOM的Web应用 367
3.2.3  DOM在QTP Web测试中的应用 374
3.2.3.1  如何在QTP中使用DOM 374
3.2.3.2  如何在QTP中使用DOM操控各类HTML元素 374
3.2.3.3  利用DOM完成QTP无法完成的任务 378
3.2.3.4  利用DOM提升性能 379
3.2.4  总结 380
知识点巩固和举一反三练习 381
3.3  数据库操作 (ADO) 381
3.3.1  何时使用ADO数据验证 381
3.3.2  构建数据库连接字符串的两种方式 382
3.3.3  数据库查询 388
3.3.4  数据库修改 391
3.3.5  自定义动态数据库验证函数 395
3.3.6  总结 399
知识点巩固和举一反三练习 399
3.4   Excel – 数据驱动必备利器 399
3.4.1   利用EOM自动化EXCEL 400
3.4.1.1  EOM模型简介 400
3.4.1.2  Excel  Automation 400
3.4.2   动态加载并运行宏代码 406
3.4.3   Excel使你可以实现更多 411
3.4.3.1  利用ADO打造Excel数据库 411
3.4.3.2  高效数据字典的实现 413
3.4.4   总结 416
知识点巩固和举一反三练习 417
3.5  WshShell对象常用方法介绍 417
3.5.1  WshShell对象介绍 417
3.5.2  激活窗口AppActivat 418
3.5.3  获取当前路径CurrentDirectory 421
3.5.4  最常用的sendkeys发送 423
3.5.6  轻松完成注册表的读写 425
3.5.6.1  注册表信息增加 425
3.5.6.2  注册表信息读取 427
3.5.6.3  注册表信息删除 428
3.5.7  总结 429
3.6  FSO对象模型 429
3.6.1  利用FSO模型完成各种操作方式 430
3.6.1.1  FSO模型简介 430
3.6.1.2  文件夹操作方式 430
3.6.1.3  文本文件操作方式 434
3.6.2  相对路径的应用 439
3.6.3  轻松利用FSO生成QTP测试日志 442
3.6.4  总结 444
3.7  神器Test Design Studio 445
3.7.1  领略什么才是为QTP量身定做 445
3.7.2  Quick Bundles 飞一样的速度 450
3.7.3  强大的静态代码分析 452
3.7.4  堪比Visual Studio的Intellisense 454
3.7.5  智能XML Comments自动生成 456
3.7.6  独一无二的VBScript文档生成 458
3.7.7  总结 462
知识点巩固和举一反三练习 462
3.8  DotnetFactory对象 462
3.8.1  调用Dot Net标准类库 462
3.8.2  调用自定义编写的Dot Net类库 468
3.8.3  建立GUI数据配置交互的.Net Form 470
3.8.4  总结 474
知识点巩固和举一反三练习 475
3.9  API的应用 475
3.9.1  Extern对象详解 475
3.9.2  VB API 转化 QTP API 477
3.9.3  纯VBS调用API实现简单GUI自动化 480
3.9.4  总结 485
知识点巩固和举一反三练习 485
第4章  QTP领先技术之走向世界 485
　　4.1  QTP深入探索 485
4.1.1  访问对象自身接口的特殊渠道 486
4.1.2  重载页面后Web对象的重用 487
4.1.3  ORM对象库自动化模型 489
4.1.4  重写Reporter对象 493
4.1.5  XML联合XSL输出html报表 496
4.1.6  创建保留对象的会话实例 500
4.1.7  AutoItX技术的应用 502
4.2  QTP深层机密 504
4.2.1  访问.Net控件对象私有属性 504
4.2.2  保留对象Setting的隐藏模式 507
4.2.3  管理动态保留对象的隐藏组件 513
4.2.4  自定义Class类注入测试对象 517
4.2.5  注册异类子控件强制注入开启Hook 518
4.2.6  MFL自动化路径模型对象应用 523
4.2.7 映射无法识别的.Net对象类 526
4.3  寄语（总结） 528
第5章  QTP领先技术之模式设计 529
　　5.1  QTP设计模式 529
5.1.1  初识设计模式 (Design Patterns) 529
5.1.2  单例设计模式 (Singleton) 529
5.1.3  工厂设计模式 (Factory) 533
5.1.4  命令包装模式 (Command) 536
5.1.5  回调设计模式 (CallBack) 538
5.1.6  函数指针模式 (Function Pointer) 541
5.1.7  类的继承模式 (Extends) 543
5.1.8  总结 546
5.2  GUI层面向对象的扩展设计 546
5.2.1  层的概念 546
5.2.2  封装测试对象类 547
5.2.3  调用业务行为 549
5.2.4  对象识别结果分析 549
5.2.5  总结 550
第6章  QTP原创框架设计展示 551
　　6.1  框架设计理念 551
6.1.1  框架核心介绍 551
6.1.1.1  自动化测试框架简介 551
6.1.1.2  用例解析驱动测试介绍 551
6.1.2  框架设计总图 553
6.1.3  框架结构细分 554
6.1.3.1  TestObject Pools 554
6.1.3.2  TestCase Generator 555
6.1.3.3  Test Execution 556
6.1.3.4  Error Handle Control 557
6.1.3.5  Report Engine 558
6.1.4  框架目录结构 559
6.2  框架设计平台 560
6.2.1  认知Excel Macros 561
6.2.2  自动加载自定义工具栏 562
6.2.3  UserForm的使用 567
6.2.4  利用API让UserForm界面焕然一新 568
6.3  公共对象管理 572
6.3.1  测试对象捕获 572
6.3.2  对象文件存储及转化 573
6.3.3  测试对象自动更新 573
6.4  用例设计管理 577
6.4.1  用例创建 577
6.4.2  步骤生成 580
6.4.3  步骤修改 584
6.4.4  重用模块 586
6.5  公共函数工厂 588
6.5.1  公共函数介绍 589
6.5.2  常用行为函数 589
6.5.3  业务行为函数 592
6.5.4  注册行为函数 592
6.6  测试执行管理 593
6.6.1  配置加载 594
6.6.2  语句拼接 595
6.6.3  排序执行 598
6.6.4  分类执行 599
6.6.5  异常监控 599
6.6.6  报告生成 600
6.7  测试报表管理 603
6.7.1  测试执行状态 603
6.7.2  错误定位信息 605
6.7.3  结果分布统计 606
6.7.4  测试报表导出 607
6.8  一点写给读者的话语（总结） 609
附录一：QTP科普问答典藏30例 610
附录二：章节练习详解及参考答案 621