测试工程师全栈技术进阶与实践
作 者:茹炳晟 著
定 价:79
出 版 社:人民邮电出版社
出版日期:2019年08月01日
页 数:335
装 帧:简装
ISBN:9787115513281
朱少民、周震漪、周枫,以及百度、阿里、腾讯、字节跳动、eBay、网易、美团、ThoughtWorks、京东、谷歌、华为等公司测试专家推荐
极客时间"软件测试52讲-从小工到专家的实战心法"专栏增补版图书
一本适合新时代的合格测试架构师和优秀测试工程师推荐阅读的全栈图书,通过阅读本书,你能够有以下收获。
·深入理解GUI自动化测试的核心原理,能够独立完成GUI自动化测试策略设计,并能够将高效率、低维护成本的测试用例设计思路应用到实际工作中。
·掌握API测试工具的基本原理和测试方法,能够在微服务项目中应用契约测试方法。
·掌握移动应用的测试技术与方法,能够将传统的软件测试方法熟练应用到移动应用的测试中,同时掌握移动应用的专项测试方法。
·全面掌握人工动态、人工静态、自动动态和自动静态这4种代码级测试方法,并且能够从测试架构师的视角完成实际单元测试工作。
·能够按照书中介绍的null
本书全面讲解了软件测试人员必知必会的测试知识、技术和工具。
全书分为12章。第1章和第2章用“用户登录”测试实例,讲解了软件测试基础知识,让读者快速学习关键的基础知识;第3章讲解了GUI测试框架设计、框架在大型电商网站的具体实践,梳理了影响GUI自动化测试稳定性的关键因素,并给出了切实可行的解决方案;第4章介绍了3类移动应用的测试方法与技术,以及如何在移动测试中应用Appium来帮助测试人员更好地实现自动化测试;第5章以循序渐进的方式,讲解了API测试的关键技术、微服务架构下的API测试挑战等;第6章讲解了代码级测试的基础知识、静态测试方法、动态测试方法、静态扫描工具Sonar、单元测试框架TestNG、代码覆盖率工具等内容;第7章和第8章系统地对性能测试的方法以及应用领域进行阐述,并基于LoadRunner讲解大型企业性能测试的规划、设计、实现的具体实例,还介绍了大型互联网产品的全链路null
茹炳晟 硕士,现任Dell EMC资深架构师,负责VxRail产品线的全面质量保障工作。历任eBay中国研发中心测试基础架构技术主管,HP中国研发中心资深测试架构师、性能测试专家,Alcatel-Lucent高级测试主管,Cisco中国研发中心资深测试工程师等职位,具有超过15年的软件测试开发以及管理经验,具有丰富的测试框架设计与自动化测试经验。曾负责建立全球大型电商网站的测试基础架构和和自动化测试方案,主持搭建DevOps持续集成测试生态体系,并负责主导无线路由产品的整体自动化测试方案、金融平台产品SDK测试框架设计、系统开发平台的白盒测试方案、DSP平台自动化测试方案、轨道交通安全软件平台测试、大规模产品链的自动化部署和多个大型电子商务网站的自动化功能测试,API测试与性能测试。作者曾在国际和国内技术期刊发表多篇技术和管理类论文,同时受邀在国际(美国, 俄罗斯, 日本)与国内很好技术大null
无
目 录
第 1章 软件测试基础知识精要(上) 1
1.1 从“用户登录”测试谈起 2
1.1.1 功能测试用例 2
1.1.2 更多的测试用例 3
1.1.3 功能性需求与非功能性需求 3
1.1.4 测试的不可穷尽性 5
1.2 设计“好的”测试用例 5
1.2.1 “好的”测试用例的定义 6
1.2.2 “好的”测试用例具备的特征 6
1.2.3 常用测试用例的设计方法 6
1.2.4 “好的”测试用例的设计方法 8
1.2.5 测试用例设计的其他经验 10
1.3 单元测试的基础知识 10
1.3.1 单元测试的定义 10
1.3.2 单元测试的很好实践 11
1.3.3 单元测试用例详解 12
1.3.4 单元测试在实际项目中的很好实践 14
1.4 自动化测试的原始驱动力和使用场景 15
1.4.1 自动化测试的基本概念 15
1.4.2 自动化测试的优势与劣势 16
1.4.3 自动化测试的使用场景 17
1.5 软件开发各阶段的自动化测试技术 18
1.5.1 单元测试的自动化技术 19
1.5.2 代码级集成测试的自动化技术 21
1.5.3 Web Service测试的自动化技术 21
1.5.4 GUI测试的自动化技术 24
1.6 测试覆盖率 25
1.6.1 需求覆盖率 25
1.6.2 代码覆盖率 25
1.6.3 代码覆盖率的价值 26
1.6.4 代码覆盖率的局限性 27
1.6.5 关于代码覆盖率的报告 27
1.6.6 代码覆盖率工具的实现技术 29
第 2章 软件测试基础知识精要(下) 31
2.1 高效撰写软件缺陷报告 32
2.1.1 缺陷标题 32
2.1.2 缺陷概述 33
2.1.3 缺陷影响 33
2.1.4 环境配置 33
2.1.5 前置条件 34
2.1.6 缺陷重现步骤 34
2.1.7 期望结果和实际结果 34
2.1.8 优先级和严重程度 34
2.1.9 变通方案 35
2.1.10 根原因分析 35
2.1.11 附件 35
2.2 以终为始,做好测试计划 36
2.2.1 没有测试计划会怎么样 36
2.2.2 测试范围 37
2.2.3 测试策略 37
2.2.4 测试资源 38
2.2.5 测试进度 39
2.2.6 测试风险预估 40
2.3 软件测试工程师的核心竞争力 40
2.3.1 两个实际面试案例 40
2.3.2 传统测试工程师的核心竞争力 41
2.3.3 测试开发工程师的核心竞争力 43
2.4 软件测试工程师需要掌握的非测试知识 44
2.4.1 迷你版的系统架构师 44
2.4.2 网站架构的核心知识 44
2.4.3 容器技术 45
2.4.4 云计算技术 46
2.4.5 DevOps思维 46
2.4.6 前端开发技术 47
2.5 互联网产品的测试策略设计 47
2.5.1 研发流程的不同决定了测试策略的不同 47
2.5.2 传统软件产品的测试策略——金字塔模型 48
2.5.3 互联网产品的测试策略——菱形模型 49
第3章 GUI自动化测试精要 52
3.1 从0到1:GUI自动化测试初探 53
3.1.1 示例:构建一个Selenium自动化测试用例 53
3.1.2 Selenium的实现原理 55
3.2 效率为王:测试脚本和测试数据的解耦 58
3.2.1 测试脚本和测试数据的解耦 59
3.2.2 数据驱动测试 59
3.3 效率为王:页面对象模型 60
3.3.1 早期GUI测试脚本的结构 60
3.3.2 基于模块化思想实现GUI测试用例 61
3.3.3 基于页面对象模型实现GUI测试用例 63
3.4 更接近业务的抽象:让自动化测试脚本更好地描述业务 63
3.4.1 操作函数的粒度把控 63
3.4.2 衔接两个操作函数之间的页面 64
3.4.3 业务流程抽象 64
3.5 过不了的坎:GUI自动化过程中的测试数据 66
3.5.1 基于API调用创建测试数据 67
3.5.2 基于数据库操作创建测试数据 68
3.5.3 综合运用API调用和数据库操作创建测试数据 68
3.5.4 实时创建测试数据 69
3.5.5 事先创建测试数据 69
3.5.6 实时创建测试数据和事先创建测试数据的互补 70
3.6 GUI测试还能这么“玩” 70
3.6.1 自动生成页面对象 70
3.6.2 自动生成GUI测试数据 71
3.6.3 无头浏览器简介 72
3.6.4 Headless Chrome与Puppeteer的使用 73
3.7 精益求精:提高GUI测试稳定性的关键技术 74
3.7.1 非预计的弹出对话框 75
3.7.2 页面控件属性的细微变化 76
3.7.3 被测系统的A/B测试 76
3.7.4 随机的页面延迟造成控件识别失败 77
3.7.5 测试数据问题 77
3.8 眼前一亮:带你玩转GUI自动化的测试报告 77
3.8.1 早期基于视频的GUI测试报告 78
3.8.2 开源GUI测试框架的测试报告实现思路 78
3.8.3 全球化GUI测试报告的创新设计 80
3.9 真实的战场:大型全球化项目中GUI自动化测试策略的设计 82
3.9.1 大型全球化电商网站的前端模块划分 82
3.9.2 大型全球化电商网站的GUI自动化测试策略设计 82
3.9.3 大型全球化电商网站的GUI自动化测试脚本管理 85
第4章 移动应用测试技术 87
4.1 移动应用的种类和特点 88
4.1.1 Web应用 88
4.1.2 原生应用 89
4.1.3 混合应用 89
4.2 移动应用测试方法概论 89
4.2.1 Web应用的测试 90
4.2.2 原生应用的测试 90
4.2.3 混合应用的测试 90
4.2.4 移动应用的测试难点 91
4.3 移动应用的专项测试 92
4.3.1 安装测试 92
4.3.2 卸载测试 94
4.3.3 特殊操作测试 95
4.3.4 交互测试 96
4.3.5 通知测试 96
4.3.6 交叉事件测试 96
4.3.7 兼容性测试 97
4.3.8 流量测试 98
4.3.9 耗电量测试 98
4.3.10 弱网络测试 99
4.3.11 边界测试 99
4.4 移动应用测试工具:Appium使用入门 100
4.4.1 移动应用的自动化测试需求 100
4.4.2 iOS开发环境的搭建 101
4.4.3 Android开发环境的搭建 102
4.4.4 Appium测试环境的搭建 103
4.4.5 Appium Inspector的使用 105
4.5 Appium实战(iOS篇) 107
4.5.1 基于iOS开发第 一个原生应用的测试用例 107
4.5.2 基于iOS开发第 一个Web应用的测试用例 110
4.5.3 在iOS真机上执行Web应用测试 111
4.5.4 在iOS真机上执行原生应用测试 114
4.6 Appium实战(Android平台) 114
4.6.1 基于Android模拟器的Web应用测试 114
4.6.2 基于Android真机的Web应用测试 115
4.6.3 Web应用的测试:温故而知新 115
4.6.4 底层自动化驱动引擎 116
4.6.5 基于Android模拟器的原生应用测试 116
4.6.6 基于Android真机的原生应用测试 118
4.6.7 原生应用的测试:温故而知新 119
4.7 Appium的实现原理 120
4.7.1 Appium服务器 120
4.7.2 Appium客户端 121
4.8 企业级移动应用测试框架的设计思路与实践 121
4.8.1 移动应用测试框架的设计思路 121
4.8.2 移动应用测试框架的实现与实践 122
4.9 搭建企业级移动测试私有云的实践 123
4.9.1 基于Selenium Grid的移动测试私有云 124
4.9.2 基于Open STF的移动测试私有云 126
4.10 移动应用云测试服务简介 128
4.10.1 Sauce Labs 128
4.10.2 Testin 129
4.10.3 MTC 131
第5章 API自动化测试技术 132
5.1 从0到1:API测试初探 133
5.1.1 API测试的基本步骤 133
5.1.2 基于Spring Boot构建被测API 133
5.1.3 使用cURL 135
5.1.4 使用Postman 137
5.2 复杂场景的API测试 140
5.2.1 被测业务操作由多个API调用协作完成 141
5.2.2 API测试过程中的第三方依赖 141
5.2.3 异步API的测试 141
5.3 API自动化测试框架的技术演进与创新 142
5.3.1 早期基于Postman的API测试 142
5.3.2 基于Postman和Newman的API测试 142
5.3.3 基于代码的API测试 142
5.3.4 自动生成API测试代码 144
5.3.5 当响应结果发生变化时的自动识别 145
5.4 微服务模式下的API测试 146
5.4.1 单体架构 146
5.4.2 微服务架构 147
5.4.3 微服务架构下的测试挑战 148
5.4.4 基于消费者契约的API测试 150
5.4.5 微服务测试的依赖解耦和模拟服务 151
5.4.6 代码实例 152
第6章 代码级软件测试技术基础与进阶 153
6.1 代码级测试的基本理念与方法 154
6.1.1 常见的代码错误类型 154
6.1.2 代码级测试常用方法 156
6.2 静态测试方法 158
6.2.1 人工静态方法 158
6.2.2 自动静态方法 159
6.2.3 使用自动静态方法的实例 160
6.3 动态测试方法 161
6.3.1 人工动态方法 161
6.3.2 自动动态方法 166
6.4 代码静态扫描工具Sonar的使用 167
6.4.1 基于Sonar的实例 167
6.4.2 SonarLint的使用 170
6.5 单元测试框架TestNG的使用 171
6.5.1 TestNG的基本用法 172
6.5.2 TestNG的高级用法 175
6.6 代码覆盖率工具JaCoCo的使用 177
6.6.1 JaCoCo简介 177
6.6.2 JaCoCo的使用 178
第7章 性能测试基础 180
7.1 不同视角下的软件性能与性能指标 181
7.1.1 终端用户眼中的软件性能 181
7.1.2 系统运维人员眼中的软件性能 182
7.1.3 软件设计开发人员眼中的软件性能 182
7.1.4 性能测试人员眼中的软件性能 184
7.1.5 并发用户数 184
7.1.6 响应时间 185
7.1.7 系统吞吐量 186
7.1.8 并发用户数、响应时间、系统吞吐量之间的关系 187
7.2 常用的性能测试与应用领域 188
7.2.1 常用的7种性能测试 189
7.2.2 性能测试的四大应用领域 192
7.3 后端性能测试工具原理与行业常用工具简介 193
7.3.1 后端性能测试和后端性能测试工具之间的关系 193
7.3.2 后端性能测试工具和GUI自动化测试工具的区别 194
7.3.3 后端性能测试工具的原理 194
7.3.4 后端性能测试场景设计和具体内容 196
7.3.5 业内主流的后端性能测试工具 197
7.4 前端性能测试工具原理 197
7.4.1 Performance TimingAPI 198
7.4.2 Profile工具 200
7.4.3 页面埋点计时 200
7.4.4 资源加载时序图 201
第8章 性能测试实战 202
8.1 前端性能测试工具WebPagetest 203
8.1.1 WebPagetest功能简介 203
8.1.2 使用WebPagetest测试某网站的首页 203
8.1.3 前端性能评估结果评分分析 204
8.1.4 其他前端性能指标解读 210
8.1.5 WebPagetest实际使用中需要解决的问题 212
8.2 后端性能测试主流商业工具LoadRunner 215
8.2.1 LoadRunner的基本原理 216
8.2.2 LoadRunner的主要模块 217
8.2.3 基于LoadRunner的性能测试实战 218
8.3 后端性能测试主流开源工具JMeter 226
8.3.1 JMeter简介 227
8.3.2 JMeter的主要概念 228
8.3.3 JMeter的使用 228
8.4 企业级实际性能测试案例与经验 238
8.4.1 性能基准测试 238
8.4.2 稳定性测试 239
8.4.3 并发测试 240
8.4.4 容量规划测试 240
8.5 大型互联网产品的全链路压测 241
8.5.1 全链路压测的定义 241
8.5.2 单系统的独立压测 242
8.5.3 海量并发请求的发起 242
8.5.4 全链路压测流量和数据的隔离 243
8.5.5 实际业务负载的模拟 244
8.5.6 真实交易和支付的撤销以及数据清理 244
第9章 准备测试数据 245
9.1 准备测试数据的基本方法 246
9.1.1 基于GUI操作生成测试数据 246
9.1.2 通过API调用生成测试数据 247
9.1.3 通过数据库操作生成测试数据 248
9.1.4 综合运用API和数据库生成测试数据 248
9.2 创建测试数据的方法 249
9.2.1 实时创建方法 250
9.2.2 事先创建方法 251
9.2.3 综合运用实时创建方法和事先创建方法 252
9.3 测试数据的“银弹”——统一测试数据平台 252
9.3.1 测试数据准备的1.0时代 253
9.3.2 测试数据准备的2.0时代 256
9.3.3 测试数据准备的3.0时代 258
9.3.4 测试数据准备的4.0时代 260
9.3.5 大数据技术在测试数据准备中的应用 261
第 10章 自动化测试基础架构的建设与实践 262
10.1 从小作坊到工厂:Selenium Grid简介 263
10.1.1 测试基础架构的基本概念 263
10.1.2 早期测试执行环境的问题 263
10.1.3 Selenium Grid简介 264
10.1.4 传统Selenium Grid的搭建方法 265
10.1.5 基于Docker的SeleniumGrid的搭建方法 268
10.2 从小工到专家:测试执行环境架构设计基础 268
10.2.1 测试执行环境概述 269
10.2.2 测试基础架构的设计 270
10.2.3 早期的测试基础架构 270
10.2.4 经典的测试基础架构 271
10.3 从小工到专家:测试执行环境架构设计进阶 272
10.3.1 基于Docker实现的Selenium Grid测试基础架构 272
10.3.2 引入统一测试执行平台的测试基础架构 274
10.3.3 基于Jenkins集群的测试基础架构 275
10.3.4 测试负载自适应的测试基础架构 276
10.3.5 测试基础架构的选择 277
10.4 实战案例:大型全球化电商网站的测试基础架构设计 277
10.4.1 统一测试执行服务 278
10.4.2 统一测试数据服务 279
10.4.3 测试执行环境准备服务 279
10.4.4 被测系统部署服务 279
10.4.5 测试报告服务 280
10.4.6 全局测试配置服务 280
10.4.7 大型全球化电商网站测试基础架构的使用示例 282
第 11章 软件测试新技术 284
11.1 发挥人的潜能——探索式测试 285
11.1.1 软件测试与招聘面试的类比 285
11.1.2 探索式测试的定义 285
11.1.3 探索式测试与即兴测试的区别和联系 287
11.1.4 探索性测试的开展 287
11.2 测试先行——TDD 288
11.2.1 TDD的核心理念 288
11.2.2 TDD的优势 289
11.2.3 TDD的实施过程 290
11.2.4 TDD进阶 294
11.3 打蛇打七寸——精准测试 294
11.3.1 传统软件测试的主要短板 295
11.3.2 精准测试的核心思想 296
11.3.3 精准测试的具体方法 297
11.4 安全第 一——渗透测试 299
11.4.1 渗透测试的定义 299
11.4.2 渗透测试的常用方法 300
11.4.3 执行渗透测试的步骤 301
11.4.4 渗透测试的常用工具 302
11.4.5 渗透测试的收益 303
11.5 用机器设计测试用例——基于模型的测试 303
11.5.1 MBT的基本原理 304
11.5.2 常用模型简介 305
11.5.3 常用MBT工具 305
11.5.4 MBT的优势 306
11.5.5 MBT的劣势 307
11.6 人工智能在测试领域的应用 308
11.6.1 人工智能概述 308
11.6.2 人工智能在软件测试领域的应用 309
11.6.3 基于人工智能的测试工具 310
第 12章 测试人员的互联网架构核心知识 312
12.1 测试工程师掌握大型网站架构知识的必要性 313
12.1.1 基于消息队列的分布式系统测试设计 313
12.1.2 缓存的示例 314
12.1.3 架构知识的学习方法 314
12.2 大型网站架构介绍 315
12.2.1 最简单的网站架构 315
12.2.2 应用和数据分离的网站架构 316
12.2.3 引入本地缓存和分布式缓存的网站架构 316
12.2.4 引入应用服务器集群的网站架构 317
12.2.5 引入主从分离的数据库 317
12.2.6 引入CDN服务器和反向代理服务器的网站架构 318
12.2.7 引入分布式文件系统和分布式数据库系统的网站架构 319
12.2.8 基于业务拆分和消息队列的网站架构 319
12.2.9 基于分布式服务的网站架构 321
12.2.10 微服务架构 321
12.2.11 下一代微服务架构——服务网格 322
12.3 网站高性能架构设计 322
12.3.1 前端的高性能架构 323
12.3.2 后端服务器的高性能架构 323
12.4 网站高可用架构设计 325
12.4.1 造成网站不可用的主要原因 326
12.4.2 网站高可用架构设计 327
12.5 网站可伸缩性架构设计 328
12.5.1 可伸缩性和可扩展性的区别 329
12.5.2 分层的可伸缩性架构 329
12.5.3 应用服务器的可伸缩性设计 330
12.5.4 缓存集群的可伸缩性设计 331
12.5.5 数据库的可伸缩性设计 332
12.6 网站可扩展性架构设计 333
12.6.1 网站可扩展性架构设计的案例 333
12.6.2 事件驱动架构与消息队列 334
12.6.3 引入消息队列后的测试关注点 335