第一篇 在实践中熟悉自动化测试过程 1
第1章 自动化测试基础 1
1.1什么是软件功能测试自动化 2
1.2增量式测试 3
1.3订票系统做了什么 3
1.3.1测试用例 3
1.3.2页面流 4
1.4测试 4
第2章 搭建基础性测试脚本 5
2.1自动化测试相关概念 6
2.1.1对象 6
2.1.2关键字 7
2.2根据案例录制脚本 7
2.2.1创建不同的Action 8
2.2.2修改IE浏览器配置 9
2.2.3录制脚本 9
2.2.4让脚本跑起来 12
2.3QTP录制的技巧 12
2.3.1QTP支持的浏览器版本 12
2.3.2QTP Event的设置 13
2.3.3Java应用录制设置过程 15
2.4总结 16
第3章 完善登录模块测试脚本 17
3.1数据池 18
3.2参数化用户名和密码数据 18
3.2.1参数化Login Action的用户名和密码 19
3.2.2参数化技巧 21
3.2.3参数化Relogin Action的用户名和密码 22
3.3页面流程控制 23
3.3.1判别单击登录按钮页面流转 23
3.3.2如何控制脚本调用流程 24
3.3.3如何在页面参数校验 27
3.4我们做了什么 29
第4章 完善订票模块测试脚本 30
4.1往返城市的动态选择 31
4.1.1QTP关于动态控件判别函数 32
4.1.2随机获取往返城市 33
4.2找出脚本原因 34
4.3如何修正脚本 35
4.3.1脚本修正思路 35
4.3.2编写技巧 36
4.3.3脚本实现分析 36
第5章 完善删票模块测试脚本 38
5.1删除模块运行出错的原因 39
5.2如何随机删除一张或者多张机票 39
5.2.1对象信息分析 39
5.2.2如何获取页面票号并随机选择 40
5.2.3如何动态生成票号对象 42
5.2.4删除随机选择的票号 42
5.3我们做了什么 43
第6章 让测试脚本灵活起来 44
6.1工作流程的维护 45
6.1.1工作流程的变化 45
6.1.2工作流程的设置方法 46
6.2测试数据维护的便捷性 47
6.2.1测试数据维护分析 47
6.2.2测试数据输入编写技巧 48
6.3错误处理机制 50
6.3.1错误处理的约定 50
6.3.2错误处理程序实践 51
6.4我们做了什么 55
第二篇 QTP功能详解 57
第7章 QTP安装、运行及常见错误处理 57
7.1QTP安装中常见问题解决策略 58
7.1.1安装提示InstallShield 1607错误 58
7.1.2重复安装QTP不同的版本导致QTP安装出错 59
7.1.3QTP安装时提示Command错误 60
7.2QTP运行常见问题 60
7.2.1QTP无法正常识别对象 60
7.2.2无法启动IE浏览器进行录制 62
7.2.3QTP在连续运行长时间后出现内存耗尽解决策略 63
7.2.4解决QTP 9.X不支持IE8浏览器兼容性的问题 64
7.3小结 64
第8章 QTP的工作流程与录制及运行模式 65
8.1QTP结构整体介绍 66
8.1.1QTP视窗 66
8.1.2QTP的工作流程 67
8.2QTP录制过程 68
8.2.1QTP三种录制模式 68
8.2.2三种录制策略 71
8.2.3影响QTP录制和脚本更改的属性 73
8.3运行设置 76
8.3.1三种运行模式 76
8.3.2运行并更新属性 77
8.4脚本调试 78
8.4.1设置/取消断点的方法 78
8.4.2调试的三种模式 78
8.4.3调试信息跟踪 79
8.5小结 80
第9章 脚本的参数化处理过程 81
9.1输入参数 82
9.1.1图形化参数化设置 82
9.1.2参数输入来源 84
9.2输出参数过程 86
9.2.1图形化参数输出过程 87
9.2.2GetRoProperty与GetToProperty函数 88
9.3Action参数传递 89
9.3.1通过Parameter函数进行参数传递 89
9.3.2采取Environment函数进行参数传递 91
9.3.3采取DataTable进行参数传递 91
9.3.4三种模式参数传递的异同 92
9.4数据驱动运行模式 92
9.4.1图形化运行控制设置 93
9.4.2动态控制运行模式 94
9.5小结 95
第10章 数据池技术(DataTable) 96
10.1DataTable整体结构图 97
10.2DataTable Sheet的管理 97
10.2.1两种类型的DataTable Sheet 97
10.2.2创建Sheet 98
10.2.3删除Sheet 99
10.2.4获取Sheet对象 100
10.3DataSheet Parameter管理 100
10.3.1图形化参数管理 101
10.3.2AddParameter函数 101
10.3.3DeleteParameter函数 102
10.3.4GetParameter函数 103
10.4DataSheet行号控制与获取及设置参数值 103
10.4.1设置、获取当前行 103
10.4.2设置上移与下移行号 104
10.4.3获取或者设置参数值 106
10.5小结 109
第11章 QTP过程校验 110
11.1QTP提供的检查点类型与对不同的环境的支持力度 111
11.2数据校验 112
11.2.1标准检查点 112
11.2.2文本检查点 114
11.2.3文本区域检查点 115
11.2.4XML检查点 116
11.3图片校验 118
11.3.1图片检查点设置方法 119
11.3.2图片检查结果校验 120
11.4数据库校验 121
11.4.1数据检查点案例分析 121
11.4.2设置数据库检查点 121
11.4.3结果校验 124
11.5手工校验模式 124
11.5.1校验控件是否存在(Exist) 124
11.5.2CheckProperty函数 125
11.6小结 127
第12章 QTP对象采集、回放与管理过程 128
12.1QTP对象采集 129
12.1.1对象属性采集设置流程 129
12.1.2对象属性设置方法 129
12.1.3Order Identifier功能详解 131
12.1.4Smart Identifier(智能标识)操作流程 133
12.2脚本运行过程中对象识别过程 135
12.2.1QTP对象识别的流程图 135
12.2.2影响运行过程中对象识别能力的设置 136
12.3对象信息管理 138
12.3.1两种类型的对象库(Local、Share)异同 139
12.3.2混合对象库的对象存储流程 140
12.3.3更新共享库中的对象信息 142
12.3.4比较与合并对象 144
12.4小结 147
第13章 QTP自定义模式 148
13.1QTP控件函数自定义扩展策略 149
13.1.1RegisterUserFunc函数介绍与图形化的操作 149
13.1.2扩展QTP控件中提供的默认函数功能 151
13.1.3添加新的方法到指定的控件 152
13.2QTP自定义编程策略 152
13.2.1调用控件内部方法 153
13.2.2描述性编程 154
13.2.3DotNetFactory接口 157
13.3QTP自定义错误处理 159
13.3.1QTP错误处理循环控制四种策略 159
13.3.2Recovery策略 160
13.3.3自定义错误处理程序 164
13.4小结 165
第14章 QTP自动化测试对象模型介绍 166
14.1自动化测试对象控制模型(AOM)介绍 167
14.1.1自动化测试对象控制模型(AOM)接口的分类 167
14.1.2AOM接口调用所支持的开发语言 168
14.1.3C#与VBScript调用AOM接口的方法 168
14.2对QTP脚本进行各类自定义设置操作 171
14.2.1通过程序来设置插件属性 171
14.2.2通过程序动态设置脚本资源文件 174
14.2.3通过程序动态设置对象标识属性 175
14.3通过程序控制脚本的运行与Datatable设置 178
14.3.1通过程序来控制QTP脚本运行 178
14.3.2通过程序进行管理DataTable操作 181
14.4通过程序进行控制脚本参数的传输 182
14.4.1手工设置脚本参数 182
14.4.2通过AOM使得外部程序与QTP进行数据交互 184
14.5在C#中调用AOM关注事项 187
14.5.1在C#中启动QTP注意事项 187
14.5.2在C#中无法直接调用AOM对象的一些方法 187
14.6小结 188
第三篇 QTP实战技术应用 189
第15章 QTP与Ajax测试 189
15.1Ajax技术简介 190
15.2案例讲解—Ajax应用分析 190
15.2.1应用框架介绍 190
15.2.2应用的元素分析 191
15.2.3采用第三方工具捕获隐藏对象 192
15.2.4编写脚本思路与脚本实现 193
15.3Ajax自动化测试分析 197
第16章 QTP与PDF文件测试 198
16.1PDF文件测试技术简介 199
16.2案例讲解:如何获取PDF文件的页数 199
16.3Adobe COM接口介绍 200
16.3.1注册表信息 200
16.3.2Adobe OLE Automation DOM结构图 201
16.3.3Acrobat对象详解 201
16.4案例讲解:PDF格式文件文本检查以及按钮状态检查 202
16.4.1封装Adobe调用接口 202
16.4.2QTP脚本调用 203
16.5测试结果分析 204
第17章 QTP与DOS命令行程序的测试 206
17.1DOS命令行操作简介 207
17.2通过SystemUtil对象模拟DOS操作 208
17.2.1SystemUtil对象介绍 208
17.2.2QTP对象属性分析 208
17.2.3键盘模拟操作特殊键值 209
17.3输出的捕获与校验 210
17.3.1GetVisibleText函数介绍 210
17.3.2结果输出与校验 210
17.3.3GetVisibleText函数的局限性 211
17.4利用WSH对象进行DOS结果校验 212
17.4.1WshScriptExec对象 212
17.4.2环境变量的设置 213
17.4.3WSH方法的结果输出与校验 213
17.5案例讲解:测试WorkingSetDOS程序 214
17.5.1Working Set程序介绍 214
17.5.2程序测试用例 215
17.5.3自动化测试程序实现 215
17.6DOS测试思路分析 216
第18章 QTP与Win 32 API测试 217
18.1Win 32 API测试简介 218
18.2QTP调用Win 32 API的方法 218
18.2.1Win32 API函数声明格式 218
18.2.2QTP中调用Win 32 API函数介绍 219
18.2.3案例讲解:调用FindWindow函数 219
18.2.4Win 32 API参数类型的转化 219
18.2.5自动生成QTP调用函数工具介绍 221
18.2.6案例讲解:QTP脚本回放时控件状态自动校验并高亮显示控件 221
18.3自定义动态链接库并发布接口在QTP中调用 223
18.3.1动态链接库技术简介 223
18.3.2在Visual C++中如何编写动态链接库 223
18.3.3如何校验动态链接库发布出来的接口 225
18.3.4QTP调用自定义动态链接库 226
18.4QTP调用第三方链接库思路分析 227
第19章 Telnet和SSH远程操作自动化测试 228
19.1远程操作技术简介 229
19.2SecureCrt ActiveX介绍 229
19.2.1ActiveX接口结构图 229
19.2.2接口对象介绍 230
19.2.3SecureCrt支持的语言及调用方法 230
19.2.4脚本运行方法 230
19.2.5SecureCrt错误处理方法 232
19.3SecureCrt关键对象详解 232
19.3.1Session对象 232
19.3.2Connect函数的语法 233
19.3.3Screen对象 234
19.3.4多样的检查点 235
19.3.5获取指定位置的字符 237
19.3.6请求的发送 238
19.4案例讲解:远程登录UNIX服务器自动化测试 239
19.4.1测试案例 239
19.4.2脚本实现 240
19.5远程服务自动测试思路分析 241
第20章 Windows脚本宿主(WSH)应用 242
20.1WSH技术简介 243
20.1.1WSH引擎定义 243
20.1.2WSH的主要用途 243
20.2WSH对象详解 244
20.2.1WSH对象结构图 244
20.2.2WSH内嵌对象说明 245
20.2.3CreateObject与GetObject 245
20.3什么是WMI 246
20.4在QTP中不支持的WScript的属性和方法 247
20.5WSH常用对象介绍 248
20.5.1Wshell对象 248
20.5.2Wshell主要功能 249
20.5.3Wshell常用的方法与属性 249
20.5.4案例讲解:结合QTP来获取系统中相关的环境变量值 251
20.5.5案例讲解:判别某一程序是否被激活 252
20.5.6案例讲解:获取、写操作系统日志 253
20.5.7案例讲解:定时弹出窗口 254
20.5.8案例讲解:注册表操作 255
20.5.9案例讲解:模拟键盘发送快捷方法 258
20.6WSH其他相关对象 262
20.6.1网络映射 262
20.6.2增加快捷栏标识 263
20.7WSH总结 264
第21章 正则表达式应用 265
21.1正则表达式技术简介 266
21.1.1结果校验的两种方法 266
21.1.2正则表达式应用无处不在 266
21.2正则表达式使用 267
21.2.1正则表达式的用途 267
21.2.2元字符 267
21.2.3特殊字符 268
21.2.4非打印字符 269
21.2.5普通字符 269
21.2.6字符匹配 270
21.2.7括号表达式 270
21.2.8限定符 272
21.2.9定位符 273
21.2.10选择与编组 275
21.2.11向后引用 276
第22章 QTP实用技巧 279
22.1QTP应用技巧简介 280
22.2巧用QTP中Web脚本回放类型 280
22.2.1QTP中Web两种回放类型 280
22.2.2UI修改回放类型的方法 280
22.2.3程序修改回放类型的方法 280
22.2.4类型设置不当引发的错误 281
22.2.5案例讲解:回放类型适用范围 282
22.2.6回放类型选择的思路分析 284
22.3QTP脚本无法保存 284
22.3.1脚本无法保存的表象 284
22.3.2挖掘问题的原因 284
22.3.3问题的三种解决策略 285
22.4QTP与Java程序测试 285
22.4.1QTP无法录制Java Applet程序解决策略 286
22.4.2在QTP脚本中调用Java程序run time的方法 287
22.4.2.1调用Java控件提供的方法 287
22.4.2.2识别java runtime方法 288
22.4.2.3创建Java新的方法实例 289
22.4.2.4解决QTP无法接收Java runtime返回数组 290
22.4.3隐藏的QTP Java插件调试方法 291
22.4.3.1通过环境变量设定跟踪级别 291
22.4.3.2通过环境变量修改日志输出路径 292
22.4.3.3通过注册表修改日志输出 293
22.5巧用WSC编写VBScript COM组件与QTP保留组件调用 295
22.5.1WSC技术简介 295
22.5.1.1WSC含义 295
22.5.1.2WSC结构 295
22.5.1.3生成GUID的值 297
22.5.2WSC文件生成向导 297
22.5.3添加COM组件实现方法 298
22.5.4注册WSC文件 299
22.5.5使用QTP保留对象调用COM组件 300
22.5.5.1注册表中增加Reserved对象 300
22.5.5.2QTP中调用预先设定的保留关键对象 301
22.6解决QTP对象无法识别的问题 301
22.6.1对象无法识别分析 302
22.6.1.1问题表现与分析 302
22.6.1.2案例讲解:录制属性无法标识对象 302
22.6.1.3解决程序录制时对象属性无法标识的策略 303
22.6.2录制时对象能被识别,但是回放失败(应用程序发生变更) 304
22.6.3无法录制应用自定义对象 304
22.6.3.1自定义对象分析 304
22.6.3.2设定对象映射关系 305
22.6.4无法识别Web页面自定义的事件 306
22.6.4.1问题的表现 306
22.6.4.2问题原因分析 306
22.6.4.3添加预定义Web事件方法 307
22.6.4.4添加未预定的事件方法 307
22.7无法录制自定义控件的执行方法 309
22.7.1自定义控件问题分析 309
22.7.2案例讲解:无法录制自定义TreeView控件的Checkbox操作方法 309
22.7.2.1案例程序实现逻辑 309
22.7.2.2QTP原始脚本与回放存在的问题 310
22.7.2.3脚本问题分析 311
22.7.3自定义控件的测试解决策略 311
22.7.4总结 316
第四篇 自动化测试框架设计与实践 317
第23章 测试自动化框架设计基础 317
23.1测试与自动化测试 318
23.1.1测试 318
23.1.2自动化测试 319
23.2测试自动化特点 319
23.3测试自动化的限制 320
23.3.1测试自动化无法智能化 320
23.3.2测试自动化无法完全替代手工测试 321
23.3.3测试自动化无法提升测试的有效性 321
23.3.4测试自动化将制约了开发的效率 321
23.4测试自动化过程 321
23.4.1测试自动化前期过程 321
23.4.2输入 322
23.4.3执行 322
23.4.4输出 323
23.4.5比较 323
23.4.6缺陷发布与影像回放 323
23.5小结 325
第24章 测试数据自动化管理的设计 326
24.1测试数据自动化管理设计要素 327
24.2测试数据的维度 328
24.3测试数据的分类 329
24.3.1业务数据 329
24.3.2待测的对象 330
24.4测试数据之间的关系 331
24.4.1数据的权重 331
24.4.2数据的内在约束 332
24.4.3数据的惟一性 333
24.5测试字段之间的关联与组合 334
24.5.1字段之间的约束 336
24.5.2字段之间的组合 337
24.6测试数据设计要素 337
24.7数据运行控制 338
24.7.1手工测试数据运行控制模式 338
24.7.2测试数据关系提炼角度 339
24.7.3测试数据运行控制导图 341
24.7.4数据运行控制设计所涉及的问题 342
24.8测试数据自动化设计 343
24.8.1测试数据保存约定 344
24.8.2数据字典 344
24.8.3数据运行控制模型 345
24.8.4数据关系运算模式 347
24.8.5数据关系运算 349
24.9数据处理模型的实现 352
24.9.1数据存储层实现 353
24.9.2数据关系处理实现 360
24.9.3数据格式定义与实例调用 366
24.9.4QTP调用实例 368
24.10C#实现数据管理程序实例 369
24.10.1设计结构简介 370
24.10.2案例管理控制过程 371
24.10.3数据关系设计 371
24.10.4数据组合生成过程 373
24.10.5自动生成用例 375
24.10.6修改用例 375
24.10.7COM数据调用接口简介 376
24.10.8QTP即插即用接口与VBS调用方法 379
24.11小结 380
第25章 案例解析:自动化测试框架设计与实践 381
25.1初识案例解析技术 383
25.1.1案例解析技术产生的原因 383
25.1.1.1传统的自动化测试过程 384
25.1.1.2案例解析技术自动化测试过程 384
25.1.1.3两种自动化测试技术的异同 384
25.1.2案例解析技术的优势 386
25.1.2.1由“被动”变为“主动” 386
25.1.2.2脚本的“原子化” 387
25.1.2.3脚本的高扩展性 387
25.1.3案例解析技术的缺点 388
25.2案例解析技术脚本形成要素 389
25.2.1测试脚本结构分析 389
25.2.2操作三种类型的数据分析 390
25.2.2.1数据的预知 390
25.2.2.2测试数据预知的意义 391
25.2.2.3三类测试数据的内在分析 391
25.3案例解析技术设计蓝图 391
25.3.1案例解析技术所涵盖的模块 392
25.3.2案例解析技术设计结构图 393
25.4自动化测试案例编写规则设计 393
25.4.1自动化测试案例规则提炼 393
25.4.1.1规则设定的意义 393
25.4.1.2原始案例内在特性分析 393
25.4.1.3测试脚本与测试案例 394
25.4.2自动化测试案例的规则映射 394
25.4.2.1直接映射 394
25.4.2.2间接映射 395
25.4.3自动化测试案例编写设计 395
25.4.4自动化案例管理媒介 397
25.4.5自动化测试案例编写的基本模式 397
25.4.6待测对象与案例关系的映射 398
25.5自动化测试对象管理 399
25.5.1获取待测对象属性以及对象之间的模式 400
25.5.1.1最佳的控制模式 400
25.5.1.2递进的控制模式 402
25.5.2对象采集的两种策略 404
25.5.2.1程序采集 404
25.5.2.2二类应用模式的程序采集实例 404
25.5.2.3手工采集模式 416
25.5.3对象的保存模式和读取 418
25.5.3.1对象的保存格式与物理存储方式 418
25.5.3.2XML存储结构 419
25.5.3.3数据库存储格式 421
25.5.3.4对象的读取 422
25.6错误处理与缺陷发送 423
25.6.1传统的错误处理模式 423
25.6.1.1传统的错误处理模式的不足 424
25.6.1.2改进的策略 424
25.6.2错误处理模式三种测试设计技术 424
25.6.2.1图片处理技术 424
25.6.2.2伪视频技术 425
25.6.2.3视频技术 426
25.6.3错误处理程序实例讲解 427
25.6.3.1错误处理程序设计思路 427
25.6.3.2图片处理技术实例 428
25.6.3.3错误处理程序调用方式 431
25.6.3.4如何获取到错误控件的位置 431
25.6.4缺陷发送处理技术 431
25.6.4.1缺陷发送模式 432
25.6.4.2什么是同步模式、异步模式 432
25.6.4.3两种模式的异同 432
25.6.4.4异步模式两种操作方式 433
25.6.4.5缺陷发送接口的实例 433
25.7自动化测试运行调度 438
25.7.1作业的调度 438
25.7.1.1作业调度的两种模式 439
25.7.1.2作业调度最容易忽视的问题 439
25.7.1.3作业调度信息交互的过程 440
25.7.2调度的前置任务 440
25.7.2.1什么是前置任务 440
25.7.2.2前置任务的类型 440
25.7.2.3为什么要自动化前置处理 441
25.7.3运行控制 441
25.7.3.1运行控制简介 441
25.7.3.2自动化测试运行控制过程 441
25.7.3.3运行控制内容 442
25.7.3.4循环控制部分设计 443
25.7.3.5运行控制代码实例 444
25.7.3.6传递请求、获取返回值以及日志系统 445
25.7.3.7日志控制信息 446
25.7.4调度的后置任务 447
25.7.4.1后置任务的分类 447
25.7.4.2后置任务的意义 447
25.8小结 448