软件自动化测试入门攻略_自动化测试

 

自荐

"《软件自动化测试入门攻略》一书是作者花费了近两年时间完成的一本大作,专门为入 门、入行人员编写,无论你是初学者,还是想转型、转专业学习软件自动化测试,本书 都适合你。书中充分考虑到新手入门自动化测试的特点,从工具学习入手,包括Unittest、 Pytest、Requests、Selenium、Postman、Appium、JMeter,对于入行者来说,掌握这几 种工具,是从事相关工具的前题,然后以一个真实的项目为例分别介绍了各种工具在单元测试、代码包测试、接口测试、Web UI测试、移动端测试、性能测试中的应用,各测试范例均依照“需求分析→用例设计→脚本开发→测试执行→结果分析”的自动化测试流程,详细介绍方法论、关键知识与核心技能,这样安排的好处是,学以致用,有的放矢,学完之后,即可直接上手公司项目,本书的最后还介绍了测试项目的容器化部署,这也是目前在测试项目中广泛使用的技术。《软件自动化测试入门攻略》结构新颖,内容丰富,与实际工作紧张结合,看得懂,学得会,用得上,是本书的一大特色,相信所有想入手自动测试的读者,本书都能让你受益匪浅。"

简介

《软件自动化测试入门攻略》以软件自动化测试工具在项目实践中的应用为主线,依照“需求分析→用例设计→脚本开发→测试执行→结果分析”的自动化测试流程,详细介绍软件自动化测试的方法论、必备知识与核心技能。全书共15章,第1章至第8章主要介绍当前企业使用率**的unittest、pytest、Requests、Postman、Selenium、Appium和JMeter 7款自动化测试工具,第9章至第14章分别以Leadshop开源商城系统中的部分模块为实战对象,运用前述章节的工具依次实现单元测试、代码包测试、接口测试、Web UI测试、移动端测试和性能测试演练,完成基础工具的单个知识点学习到项目的综合运用,第15章介绍Docker容器技术及其在Jenkins中实现测试项目的任务部署,完成分布式节点挂载和定时执行。

《软件自动化测试入门攻略》来自一线资深测试工程师多年从业经验的总结,内容详实,贴近实际工作需要,既可帮助对自动化测试感兴趣的新手快速入门和入行,又可对有一定测试基础的读者实现自我能力的提升和突破。

作者

杨定佳,一线资深软件测试工程师,博客园优秀博主,蓝桥云课入驻作者,51Testing测试圈讲堂 特邀讲师,长期从事自动化测试设计、框架搭建和开发工作,对各类软件测试工具及相 关技术驾轻就熟。出版《Python Web自动化测试入门与实战》一书,编写的《菜鸟轻松 拿Offer:软件测试工程师面试秘笈》一书荣获2021年度“51CTO.最受读者喜爱有IT图书 ”奖。

前    言

自动化测试是软件测试重要的组成部分,于项目而言是一种提高软件测试效率和准确性的方法,能提高生产力和效率,于测试人员而言是一种能力的展示,更是一种价值的肯定。本书以软件自动化测试工具在项目实践中的应用为主线,依照“需求分析→用例设计→脚本开发→测试执行→结果分析”的自动化测试流程,详细介绍了软件自动化测试的方法论、必备知识与核心技能。

笔者工作在一线测试岗位7年有余,在测试领域积累了丰富的实践经验,因此,本书所涉及的技术在当今测试领域都在广泛应用,尽可能使用通俗易懂的语言进行描述,确保读者看得懂、学得会、用到上。如果你是测试岗位的新人或想转行进入测试行业,本书可帮助你快速入门、入行;如果你是具有一定基础的测试人员,书中讲述的项目实战,可帮助你实现自我能力的提高和突破,甚至可以帮助你带领团队完成自动化测试项目。

核心内容

本书的每一章节都融进了笔者的经验和思考,并得到许多经验丰富的测试同行的支持和良好建议,全书共15章,说明如下:

第1章作为本书引子,介绍自动化测试的重要概念、常用工具和如何入门自动化测试,点出自动化测试的本质是将以人为驱动的测试行为转化为机器执行的一种过程。

第2章~第8章,依次介绍当前企业使用率最高的unittest、pytest、Requests、Postman、Selenium、Appium和JMeter 7款自动化测试工具,其中unittest和pytest是Python语言的单元测试框架,大部分以Python语言为基础的自动化测试项目都会使用unittest或pytest组织测试用例;Requests和Postman是两个接口测试工具,Requests是Python语言的一个库,使用Python编程语言实现接口测试项目几乎都是借助Requests完成的。Postman是一个独立接口测试工具,测试人员在不需要编写代码的情况下便可轻松完成项目接口测试用例的编写,实现自动化测试;Selenium和Appium均是Python语言实现UI自动化测试的第三方库,Selenium完成的是Web UI自动化测试,Appium完成的是移动端程序的UI自动化测试;JMeter是一款开源的接口测试工具,也可用来完成产品的性能测试。

上述各章都以概念+示例的方式编写,读者在学习时需要先理解其概念,对知识点有一个正确认识,再跟随示例实践,发现基础薄弱的地方,加强测试和调试的能力,做到概念清晰,手到拈来。

掌握自动化测试工具是入门自动化测试的必备技能,有助于提高对自动化测试的认知,同时,从工具开始学习,边学边练,也有成就感,是一个不错的入门路径。

第9章~第14章,分别以开源项目“Leadshop开源商城系统”中的部分模块为例,运用前述章节的测试工具依次实现单元测试、代码包测试、接口测试、Web UI测试、移动端测试和性能测试演练,完成测试工具的单个知识点学习到项目的综合应用。每一章实战均以“需求分析→用例设计→脚本开发→测试执行→结果分析”的自动化测试流程为顺序展开,需求分析阶段会澄清测试对象、测试范围以及最终结果等内容;用例设计阶段会先介绍用例设计方法,再结合被测对象设计出最少的用例覆盖最全的使用场景;脚本开发阶段是结合被测对象和测试类型,设计出结构清晰的自动化测试框架,开发出复用性强的基础代码,并在此基础上实现自动化测试用例;测试执行阶段是编写执行脚本实现自动化测试用例的执行;结果分析阶段有两个目标:一是对测试结果分析,成功和失败用例的总结;二是对自动化测试项目的思考,当下的实现逻辑是否有弊端,对测试结果有何影响。当明确了测试项目的每一个阶段后,你已经可以参与企业项目的测试工作了。

这一部分内容是在Leadshop开源商城系统环境下,将基础知识综合运用的一个过程,不但涉及很多基础知识,而且需要考虑全局的应用搭配。另外,通过项目实践,读者要注意不断总结思考、发现规律,逐步形成一套自己的测试体系,为未来带领测试团队体积累经验。

第15章介绍了容器化部署与自动化测试,容器化部署是一种流行的技术,引入自动化测试中极大地简化了各种测试项目的部署,提高了工作效率。本章以Docker技术为基础部署持续集成工具Jenkins,在Jenkins工具中实现测试项目的任务部署,完成分布式节点挂载和定时执行。

 

配书资源

本书所有脚本均以Python语言实现,读者可扫描下述二维码免费下载。

软件自动化测试入门攻略_UI_02

本书各章还提供了思考题,各题的答案请扫描下述二维码下载。

软件自动化测试入门攻略_接口测试_03

读者对象

本书适合对自动测试感兴趣的各层次读者,比如,初入职场的测试新人、转型测试岗位的非计算机专业的职场人士和学生等,也适合作为自动化测试培训机构或大中专院校计算机专业测试课程的教学用书,本书提供的真实测试项目实践,也可以帮助有一定测试基础的测试人员作为实施自动化测试项目的指南。

致  谢

本书能够得以成功出版离不开开源项目“Leadshop开源商城系统”和笔者身边亲朋好友的大力支持,在此对他们表示衷心的感谢。

感谢Leadshop开源项目的开发者,使本书的实践篇章有了真实的实战对象。

感谢杨瑞、李先丽、范申、马敬宾、杨亚理、林静芬、张露、冶心怡、抄帅、李亚萍、胡列、陆怡颐、周燕、丁扬健等为本书做了大量审稿工作,你们的真知灼见,使本书更臻完善。

感谢清华大学出版社的各位编辑,尤其是王金柱老师两年来的鼎力支持,让这本书能够高质量地与广大读者见面。

感谢每一位测试人,书中借鉴了他们很多的经验与智慧,他们对软件测试行业的热爱、持续耕耘和深度实践,使笔者受益良多。

因能力所限,书中难免存在疏漏,如果读者存在求职困惑或对本书的改进有更好的建议,请发送邮件联系笔者共同探讨。

最后,希望本书能成为各位读者自动化测试之路上的向导和伴侣。

 

杨定佳   

2023年11月12日   

 

目录

第1章 自动化测试概述 ·················· 1
1.1 什么是软件自动化测试 ················ 1
1.1.1 定义 ······························· 1
1.1.2 应用条件 ························· 1
1.1.3 对比手工测试 ··················· 2
1.1.4 分类 ······························· 3
1.1.5 价值 ······························· 4
1.2 自动化测试的概念 ······················ 6
1.2.1 流程 ······························· 6
1.2.2 原则 ······························· 7
1.2.3 测试模型 ························· 8
1.2.4 度量模型 ························ 10
1.3 自动化测试常用工具 ·················· 12
1.3.1 单元测试工具 ·················· 12
1.3.2 代码包测试工具 ··············· 13
1.3.3 接口测试工具 ·················· 13
1.3.4 Web UI测试工具 ·············· 14
1.3.5 App测试工具 ·················· 15
1.3.6 性能测试工具 ·················· 16
1.4 如何入门自动化测试 ·················· 17
1.4.1 入门是基础 ····················· 17
1.4.2 入行是起点 ····················· 18
1.4.3 入职是挑战 ····················· 18
1.5 思考题 ···································· 18
第2章 unittest ···························· 19
2.1 简介 ······································· 19
2.2 测试用例 ································· 20
2.3 测试脚手架 ······························ 21
2.4 测试套件 ································· 23
2.4.1 TestSuite类构建 ··············· 23
2.4.2 TestLoader类构建 ············ 25
2.4.3 其他方法构建 ·················· 26
2.5 测试运行器 ······························ 27
2.6 命令行接口 ······························ 28
2.7 用例执行顺序 ··························· 30
2.8 测试断言 ································· 31
2.9 skip装饰器 ······························ 33
2.10 模拟对象mock ························ 36
2.11 ddt实现参数化 ························ 38
2.12 多线程运行 ···························· 42
2.13 定时运行 ······························· 44
2.14 生成测试报告 ························· 46
2.15 发送测试结果通知 ··················· 48
2.16 思考题 ·································· 54
第3章 pytest····························· 55
3.1 简介 ······································· 55
3.2 第一个示例 ······························ 55
3.3 测试用例 ································· 57
3.4 命令行参数 ······························ 59
3.5 跳过 ······································· 61
3.6 标记 ······································· 62
3.6.1 内置标记 ························ 63
3.6.2 自定义标记 ····················· 64
3.7 夹具 ······································· 66
3.7.1 fixture参数 ····················· 66
3.7.2 夹具的使用 ····················· 67
3.7.3 夹具作用域 ····················· 68
3.7.4 共享夹具 ························ 70
3.8 参数化 ···································· 72
3.8.1 标记方式实现 ·················· 72
3.8.2 夹具方式实现 ·················· 73
3.9 配置文件 ································· 74
3.10 插件 ······································ 76
3.11 分布式执行 ····························· 77
3.12 Allure测试报告 ······················· 79
3.12.1 Allure安装 ···················· 79
3.12.2 生成测试报告 ················· 80
3.12.3 Allure特性与应用示例 ····· 82
3.13 思考题 ··································· 87
第4章 Requests ························· 88
4.1 简介 ······································· 88
4.2 主要方法 ································· 89
4.2.1 请求示例 ························ 89
4.2.2 查询参数 ························ 90
4.2.3 响应对象 ························ 91
4.3 发送GET请求 ·························· 92
4.3.1 params参数 ···················· 92
4.3.2 自定义请求头 ·················· 93
4.4 发送POST请求 ························ 94
4.4.1 data参数 ························ 95
4.4.2 json参数 ························ 96
4.5 发送其他类型的请求 ·················· 97
4.5.1 发送HEAD请求 ·············· 98
4.5.2 发送PUT请求 ················· 98
4.5.3 发送PATCH请求 ············ 98
4.5.4 发送DELETE请求 ··········· 99
4.6 文件上传 ································· 99
4.7 文件下载 ································ 100
4.8 Cookies参数 ··························· 101
4.9 Session对象 ···························· 103
4.10 重定向 ································· 104
4.11 添加代理 ······························ 105
4.12 超时设置 ······························ 106
4.13 异常处理 ······························ 106
4.14 证书验证 ······························ 107
4.15 身份认证 ······························ 107
4.16 生成测试用例脚本 ·················· 108
4.17 思考题 ································· 110
第5章 Postman························· 111
5.1 安装 ······································ 111
5.2 界面介绍 ································ 113
5.3 HTTP请求 ······························ 115
5.3.1 请求界面介绍 ················· 116
5.3.2 GET请求 ······················ 117
5.3.3 POST请求 ···················· 118
5.3.4 其他类型请求 ················ 121
5.3.5 文件上传 ······················ 122
5.3.6 文件下载 ······················ 123
5.3.7 授权 ···························· 124
5.3.8 前置脚本 ······················ 126
5.3.9 后置脚本 ······················ 128
5.3.10 请求设置 ····················· 131
5.3.11 其他 ··························· 132
5.4 环境和变量 ···························· 132
5.5 Cookies管理 ··························· 135
5.6 代理设置 ······························· 136
5.7 证书管理 ······························· 138
5.8 集合管理 ······························· 140
5.8.1 执行集合 ······················ 141
5.8.2 参数化 ························· 142
5.8.3 分支和循环 ··················· 144
5.9 模拟服务器 ···························· 145
5.10 监视器 ································· 148
5.11 命令行执行集合 ····················· 152
5.12 思考题 ································· 157
第6章 Selenium ······················· 158
6.1 简介 ····································· 158
6.1.1 版本演进 ······················ 158
6.1.2 特点 ···························· 159
6.1.3 WebDriver的工作原理 ····· 159
6.2 环境准备 ······························· 160
6.2.1 安装Selenium ················· 160
6.2.2 安装浏览器驱动 ·············· 161
6.2.3 第一个示例 ···················· 162
6.3 浏览器操作 ····························· 163
6.4 页面元素定位 ·························· 169
6.4.1 页面查找元素 ················· 170
6.4.2 id定位 ·························· 171
6.4.3 name定位 ····················· 171
6.4.4 class定位 ······················ 172
6.4.5 tag定位 ························ 172
6.4.6 link定位 ······················· 173
6.4.7 partial link定位 ··············· 173
6.4.8 css定位 ························ 173
6.4.9 xpath定位 ····················· 174
6.4.10 相对定位 ····················· 178
6.4.11 定位一组元素 ··············· 179
6.5 获取页面内容 ·························· 180
6.6 获取元素属性 ·························· 181
6.7 页面元素操作 ·························· 183
6.7.1 单击 ····························· 183
6.7.2 输入文本 ······················· 184
6.7.3 清除文本 ······················· 184
6.7.4 提交表单 ······················· 185
6.7.5 单选框操作 ···················· 186
6.7.6 复选框操作 ···················· 187
6.7.7 下拉框操作 ···················· 187
6.7.8 Frame结构操作 ·············· 189
6.8 文件操作 ································ 191
6.8.1 文件上传 ······················· 191
6.8.2. 文件下载 ······················· 192
6.9 模拟鼠标操作 ························· 194
6.10 模拟键盘操作 ························ 197
6.11 延时等待 ······························ 198
6.12 浏览器配置 ··························· 201
6.13 其他操作 ······························ 203
6.13.1 调用JavaScript ············· 203
6.13.2 Cookie操作 ················· 204
6.13.3 屏幕截图 ····················· 205
6.13.4 获取环境信息 ··············· 205
6.13.5 执行CDP命令 ············· 206
6.13.6 设置超时时间 ··············· 207
6.14 Webdriver Manager ·················· 207
6.15 Selenium Grid ························ 208
6.16 生成测试用例脚本 ·················· 212
6.17 思考题 ································· 218
第7章 Appium ························· 219
7.1 简介 ····································· 219
7.2 Android模拟器 ························ 220
7.3 ADB工具 ······························ 221
7.3.1 ADB的工作原理 ············ 221
7.3.2 ADB工具安装 ··············· 222
7.3.3 ADB常用命令 ··············· 224
7.3.4 自动化测试中常用的ADB 命令 ···························· 225
7.4 Appium环境准备 ····················· 228
7.4.1 安装Appium Desktop ······· 228
7.4.2 安装Appium Inspector ······ 229
7.4.3 Appium简单使用 ············ 230
7.4.4 Inspector功能 ················· 233
7.4.5 脚本录制 ······················· 233
7.4.6 查看元素属性 ················· 236
7.5 Appium Server ·························· 236
7.6 Appium Client ·························· 238
7.7 UI Automator Viewer ················· 240
7.8 元素定位 ································ 241
7.9 元素操作 ································ 243
7.10 获取元素属性 ························ 244
7.11 触控事件 ······························ 246
7.11.1 TouchAction ················· 246
7.11.2 输入源行为 ·················· 248
7.11.3 单点触控 ····················· 249
7.11.4 多点触控 ····················· 250
7.11.5 其他触控操作 ··············· 252
7.12 设备交互 ······························ 254
7.13 Android Toast识别 ·················· 258
7.14 其他操作 ······························ 259
7.15 不同应用的测试 ····················· 262
7.15.1 App应用程序的分类 ······ 262
7.15.2 案例一: 原生应用的测试 ············· 263
7.15.3 案例二: Web应用测试 ················ 271
7.15.4 案例三: 混合应用测试 ················ 275
7.15.5 案例四: 微信小程序测试 ············· 277
7.16 稳定性测试 ··························· 279
7.16.1 Monkey简介 ················ 279
7.16.2 Monkey常用参数 ·········· 280
7.16.3 Monkey日志分析 ·········· 282
7.17 思考题 ································· 285
第8章 JMeter ·························· 286
8.1 简介 ····································· 286
8.2 安装 ····································· 287
8.3 配置文件 ······························· 288
8.4 界面介绍 ······························· 291
8.5 脚本录制 ······························· 293
8.6 基本组件 ······························· 297
8.7 测试计划 ······························· 298
8.8 线程组 ·································· 301
8.8.1 普通线程组 ··················· 302
8.8.2 开放模型线程组 ············· 304
8.9 取样器 ·································· 305
8.9.1 HTTP请求 ···················· 306
8.9.2 调试取样器 ··················· 311
8.9.3 BeanShell 取样器 ··········· 312
8.9.4 FTP请求 ······················ 314
8.9.5 JDBC请求 ···················· 316
8.9.6 SMTP取样器 ················· 316
8.10 配置元件 ······························ 320
8.10.1 CSV数据文件设置 ········ 321
8.10.2 HTTP信息头管理器 ······ 323
8.10.3 HTTP Cookie管理器 ······ 324
8.10.4 HTTP请求默认值 ········· 326
8.10.5 JDBC连接配置器 ·········· 327
8.10.6 随机变量 ····················· 330
8.11 前置处理器 ··························· 332
8.11.1 用户参数 ····················· 333
8.11.2 取样器超时 ·················· 334
8.12 后置处理器 ··························· 334
8.12.1 CSS/Query提取器 ·········· 335
8.12.2 JSON提取器 ················ 337
8.12.3 正则表达式提取器 ········· 338
8.12.4 XPath提取器 ················ 339
8.13 断言 ···································· 341
8.13.1 响应断言 ····················· 342
8.13.2 JSON断言 ··················· 343
8.13.3 XPath断言 ··················· 345
8.14 定时器 ································· 346
8.14.1 固定定时器 ·················· 347
8.14.2 统一随机定时器 ············ 347
8.14.3 同步定时器 ·················· 347
8.14.4 高斯随机定时器 ············ 348
8.15 监听器 ································· 348
8.15.1 查看结果树 ·················· 349
8.15.2 聚合报告 ····················· 350
8.15.3 响应时间图 ·················· 351
8.15.4 断言结果 ····················· 351
8.16 逻辑控制器 ··························· 352
8.16.1 IF控制器 ····················· 353
8.16.2 循环控制器 ·················· 354
8.16.3 ForEach控制器 ············· 355
8.16.4 仅一次控制器 ··············· 356
8.17 作用域和执行顺序 ·················· 357
8.18 插件 ···································· 357
8.19 函数 ···································· 360
8.20 分布式部署 ··························· 362
8.21 可视化监控平台的搭建与使用 ··· 364
8.21.1 安装和部署InfluxDB 1.7 ·· 365
8.21.2 安装和部署Grafana ······· 365
8.21.3 Grafana中添加 JMeter模板 ·················· 366
8.21.4 创建和运行JMeter脚本 ··· 367
8.22 思考题 ································· 368
第9章 实现单元测试 ················· 370
9.1 被测产品介绍 ························· 370
9.1.1 项目介绍 ······················ 370
9.1.2 产品搭建 ······················ 371
9.2 单元测试简介 ························· 374
9.2.1 概念 ···························· 374
9.2.2 分类 ···························· 375
9.2.3 对测试人员的要求 ·········· 375
9.3 用例设计方法 ························· 376
9.3.1 路径覆盖 ······················ 377
9.3.2 语句覆盖 ······················ 377
9.3.3 条件覆盖 ······················ 378
9.3.4 判定覆盖 ······················ 379
9.3.5 判定和条件覆盖 ············· 380
9.3.6 条件组合覆盖 ················ 381
9.4 实战对象 ······························· 381
9.5 设计测试用例 ························· 383
9.6 编写测试脚本 ·························· 384
9.7 统计代码覆盖率 ······················· 385
9.8 思考题 ··································· 387
第10章 实现代码包测试 ·············· 389
10.1 什么是代码包 ························ 389
10.2 用例设计方法 ························ 389
10.3 实践对象 ······························ 390
10.4 设计测试用例 ························ 392
10.5 编写测试脚本 ························ 393
10.6 测试运行 ······························ 397
10.7 思考题 ································· 398
第11章 实现接口测试 ················· 399
11.1 接口测试简介 ························ 399
11.1.1 概念 ··························· 399
11.1.2 常见接口协议 ··············· 400
11.2 用例设计方法 ························ 401
11.3 实战对象 ······························ 403
11.4 构建项目结构 ························ 404
11.5 设计测试用例 ························ 406
11.6 编写项目脚本 ························ 407
11.6.1 设计测试用例文件 ········· 407
11.6.2 添加基础配置数据 ········· 413
11.6.3 读取配置文件内容 ········· 414
11.6.4 获取测试用例数据 ········· 415
11.6.5 封装接口请求函数 ········· 418
11.6.6 设置共享夹具 ··············· 419
11.6.7 封装断言函数 ··············· 419
11.6.8 添加测试用例函数 ········· 422
11.7 执行测试项目 ························ 425
11.8 思考题 ································· 427
第12章 实现Web UI测试 ·········· 428
12.1 Web UI测试简介 ···················· 428
12.2 用例设计方法 ························ 429
12.3 Page Object模型 ····················· 430
12.4 实战对象 ······························ 432
12.5 设计测试用例 ························ 433
12.6 项目结构搭建 ························ 434
12.7 编写测试脚本 ························ 436
12.7.1 封装元素定位 ··············· 436
12.7.2 添加测试数据 ··············· 438
12.7.3 页面功能函数封装 ········· 439
12.7.4 实现测试用例 ··············· 446
12.8 执行测试项目 ························ 452
12.9 思考题 ································· 453
第13章 实现移动端测试 ············· 454
13.1 App测试简介 ························ 454
13.2 项目实战对象 ························ 455
13.3 项目结构搭建 ························ 456
13.4 编写测试脚本 ························ 457
13.4.1 封装元素定位 ··············· 457
13.4.2 添加测试数据 ··············· 458
13.4.3 页面功能函数封装 ········· 459
13.4.4 实现测试用例 ··············· 465
13.5 执行测试项目 ························ 466
13.6 思考题 ································· 467
第14章 实现性能测试 ················· 468
14.1 性能测试简介 ························ 468
14.1.1 测试流程 ····················· 469
14.1.2 常见性能指标 ··············· 469
14.1.3 流量回放技术 ··············· 470
14.2 性能需求分析 ························ 471
14.3 制订测试计划 ························ 472
14.4 确定测试方案 ························ 475
14.5 搭建测试环境 ························ 478
14.6 准备测试数据 ························ 479
14.7 开发压测脚本 ························ 479
14.7.1 添加请求 ····················· 479
14.7.2 运行调试 ····················· 485
14.7.3 设置断言 ····················· 487
14.7.4 增加压力 ····················· 490
14.8 测试执行及监控 ····················· 492
14.9 结果分析 ······························ 493
14.10 性能调优 ····························· 497
14.11 编写测试报告 ······················· 498
14.12 思考题 ································ 498
第15章 容器化部署与自动化测试 ··· 499
15.1 什么是容器化部署 ·················· 499
15.2 Docker安装 ··························· 500
15.3 Docker核心概念 ····················· 502
15.4 Docker使用 ··························· 503
15.4.1 仓库操作 ····················· 503
15.4.2 镜像操作 ····················· 504
15.4.3 容器操作 ····················· 506
15.5 Dockerfile ····························· 510
15.6 Docker部署Jenkins ················· 513
15.6.1 Jenkins安装 ················· 513
15.6.2 Jenkins在自动化测试中的 应用 ···························· 515
15.7 持续集成与自动化测试 ············ 522
15.7.1 什么是持续集成 ············ 523
15.7.2 持续集成常用工具 ········· 523
15.7.3 部署测试项目 ··············· 524
15.8 思考题 ································· 524
参考文献 ····································· 525