描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121278532
第1 章 自动化测试基础 . 1
1.1 软件测试分类
1
1.2 分层的自动化测试
6
1.3 什么样的项目适合自动化测试
9
1.4 自动化测试及工具简述
10
1.5 Selenium 工具介绍
11
1.6 前端技术介绍
14
1.7 前端工具介绍
16
1.8 开发语言的选择
19
第2 章 测试环境搭建 . 21
2.1 Windows 下的环境搭建
21
2.1.1 安装Python 22
2.1.2 安装setuptools 与pip 24
2.1.3 安装Selenium 26
2.1.4 ActivePython 26
2.2 Ubuntu 下的环境搭建
. 28
2.3 使用IDLE 编写Python . 29
2.4 编写个自动化脚本
32
2.5 安装浏览器驱动
34
2.6 不同编程语言下使用WebDriver 35
第3 章 Python 基础 37
3.1 Python 哲学
37
3.2 输出与输入
39
3.2.1 print 打印
40
3.2.2 input 输入
. 41
3.2.3 引号与注释
41
3.3 分支与循环
43
3.3.1 if 语句
. 43
3.3.2 for 语句
45
3.4 数组与字典
47
3.4.1 数组
47
3.4.2 字典
47
3.5 函数、类和方法
49
3.5.1 函数
49
3.5.2 类和方法
50
3.6 模组
52
3.6.1 引用模块
52
3.6.2 模块调用
55
3.6.3 跨目录模块调用
56
3.6.4 进一步讨论跨目录模块调用
56
3.7 异常
60
3.7.1 认识异常
60
3.7.2 更多异常用法
64
3.7.3 抛出异常
66
本章小结 . 66
第4 章 WebDriver API . 68
4.1 从定位元素开始
68
4.1.1 id 定位
72
4.1.2 name 定位
73
4.1.3 class 定位
. 73
4.1.4 tag 定位
73
4.1.5 link 定位
. 73
4.1.6 partial link
定位 74
4.1.7 XPath 定位
. 75
4.1.8 CSS 定位
78
4.1.9 用By 定位元素 82
4.2 控制浏览器
83
4.2.1 控制浏览器窗口大小
83
4.2.2 控制浏览器后退、前进
84
4.2.3 模拟浏览器刷新
85
4.3 简单元素操作
86
4.3.1 126 邮箱登录
. 86
4.3.2 WebElement 接口常用方法
. 87
4.4 鼠标事件
89
4.5 键盘事件
92
4.6 获得验证信息
93
4.7 设置元素等待
95
4.7.1 显式等待
95
4.7.2 隐式等待
98
4.7.3 sleep 休眠方法
. 99
4.8 定位一组元素
100
4.9 多表单切换
104
4.10 多窗口切换
106
4.11 警告框处理
108
4.12 上传文件
110
4.12.1 send_keys 实现上传
.
110
4.12.2 AutoIt 实现上传
. 111
4.13 下载文件
116
4.14 操作Cookie 117
4.15 调用JavaScript .
120
4.16 处理HTML5 的视频播放 . 123
4.17 窗口截图
124
4.18 关闭窗口
125
4.19 验证码的处理
125
4.20 WebDriver 原理
128
本章小结 . 130
第5 章 自动化测试模型 . 132
5.1 自动化测试模型介绍
133
5.1.1 线性测试
133
5.1.2 模块化驱动测试
134
5.1.3 数据驱动测试
134
5.1.4 关键字驱动测试
136
5.2 模块化驱动测试实例
138
5.3 数据驱动测试实例
140
5.3.1 参数化邮箱登录
141
5.3.2 参数化搜索关键字
142
5.3.3 读取txt 文件 143
5.3.4 读取csv 文件 . 144
5.3.5 读取xml 文件 146
本章小结 . 150
第6 章 Selenium IDE . 151
6.1 Selenium IDE 安装
. 151
6.1.1 在线安装
151
6.1.2 下载插件安装
153
6.2 Selenium IDE 界面介绍
. 154
6.3 创建测试用例
155
6.3.1 录制脚本
155
6.3.2 编辑脚本
156
6.4 Selenium IDE 命令
. 159
6.5 断言与验证
162
6.5.1 断言
164
6.5.2 验证
165
6.6 等待与变量
167
6.6.1 等待
167
6.6.2 变量
167
本章小结 . 169
第7 章 unittest 单元测试框架 . 170
7.1 认识unittest 171
7.1.1 认识单元测试
171
7.1.2 重要的概念
174
7.1.3 断言方法
176
7.1.4 组织单元测试用例
181
7.1.5 discover 更多测试用例
184
7.2 关于unittest 还需要知道的 . 187
7.2.1 用例执行的顺序
188
7.2.2 执行多级目录的用例
190
7.2.3 跳过测试和预期失败
191
7.2.4 fixtures 193
7.3 带unittest 的脚本分析 . 195
7.4 编写Web 测试用例 . 200
本章小结 . 203
第8 章 自动化测试高级应用 . 204
8.1 HTML 测试报告
204
8.1.1 修改HTMLTestRunner 205
8.1.2 生成HTML 测试报告 . 206
8.1.3 更易读的测试报告
208
8.1.4 测试报告文件名
209
8.1.5 项目集成测试报告
212
8.2 自动发邮件功能
213
8.2.1 发送HTML 格式的邮件 . 216
8.2.2 发送带附件的邮件
217
8.2.3 查找的测试报告
218
8.2.4 整合自动发邮件功能
219
8.3 Page Object 设计模式
. 221
8.3.1 认识Page Object 221
8.3.2 Paget Object
实例 . 223
本章小结 . 228
第9 章 Selenium Grid2 . 229
9.1 Selenium
Server 环境配置 . 229
9.2 Selenium Grid 工作原理
233
9.3 Remote 应用
. 236
9.3.1 WebDriver 驱动分析
237
9.3.2 Remote 实例
. 243
9.3.3 参数化平台及浏览器
243
9.4 WebDriver 驱动
246
9.4.1 Edge 浏览器
. 249
9.4.2 Opera 浏览器
.
250
9.4.3 Safari 浏览器
251
9.4.4 HtmlUnit 模式
251
9.4.5 PhantomJS 模式
. 252
本章小结 . 254
第10 章 Python 多线程 . 255
10.1 单线程的时代
256
10.2 多线程技术
258
10.2.1 threading 模块
258
10.2.2 优化线程的创建
260
10.2.3 创建线程类
262
10.3 多进程技术
263
10.3.1
multiprocessing 模块 263
10.3.2 Pipe 和Queue . 266
10.4 应用于自动化测试
268
10.4.1 多线程执行测试用例
269
10.4.2 多线程分布式执行测试用例
270
本章小结 . 272
第11 章 自动化测试项目实战 . 273
11.1 自动化测试用例设计
. 273
11.1.1 手工测试用例与自动化测试用例
. 273
11.1.2 测试类型
275
11.1.3 自动化测试用例编写原则
276
11.2 BBS 社区项目实战
277
11.2.1 准备工作
277
11.2.2 项目结构介绍
278
11.2.3 编写公共模块
281
11.2.4 编写Page Object 283
11.2.5 编写测试用例
286
11.2.6 执行测试用例
289
本章小结 . 291
第12 章 BDD 框架之Lettuce 入门 292
12.1 什么是BDD . 292
12.2 安装Lettuce . 294
12.3 阶乘的例子
295
12.3.1 什么是阶乘
295
12.3.2 编写BDD 实现 296
12.3.3 添加测试场景
300
12.3.4 Lettuce 目录结构与执行过程
. 303
12.4
Lettuce_webdriver 自动化测试 .
303
本章小结 .308
记得很久之前接触自动化的时候看了一本关于某早期自动化测试工具的书,书名已经 记不得了,内容给我留下了深刻印象。因为那本书根本就是把官方文档有选择性地翻译一 遍,对于实际应用来说其作用几乎是零。因此,从那时起我就一直认为,对工具的介绍不 应该仅仅停留在理论和了解的程度,如果没有实战,那么我们之于工具无非就是叶公好龙, 一直远观,无法赏玩。 很欣慰的是,虫师这本《Selenium 2 自动化测试实战——基于 Python 语言》并没有停 留在夸夸其谈的表面,我仔细研究了书中的代码和示例,显然,很大一部分都是他在日常 工作中勤奋总结而得出的一手范例,对技术书籍来说,这是难能可贵的。
对一本介绍自动化测试的书来说,我们其实不缺理论。国外的很多同行都在不停地传 经布道,他们的结论其实很简单,自动化测试是好东西,对提升软件质量来说,自动化测 试带给我们生产力的解放收益要远远大于成本。结论我们都知道,工具我们也清楚,无非 就是单元测试用 xunit、rspec 之类,BDD 测试用 cucumber,UI 层面的 aut 用 Selenium,等 等。这些工具我们都会用,而且也许用得还不错,不过为什么我们的自动化测试除了耗时 费力,根本就看不出什么效果呢?
答案其实很简单,我们自以为用对了,但实际上也许我们才刚上路,甚至跟**实践 背道而驰。这就像是拿 iPad 当砧板,用宰牛刀杀鸡一样,路子不对,只能越练越野,直到 走火入魔。
这本书其实提到了很多不错的实践,路子正宗,从者自然不会误入歧途,这也是我推 荐它的另外一个理由。
在看本书前面几章的时候,我总是不断地想起当年初出茅庐入行时所遇到的初学者困 局。我很想学一门技术,但是到底应该从哪里开始?
万事开头难,没有师傅领进门,在不停的挫败和各种不同信息的正反面轰炸下,我们 很容易举白旗放弃。 试想一下这样的场景:假如你是一个初学者,你从某种渠道得知 Selenium 是代表未来 测试趋势的测试工具,是提升生产力的重要手段,是提升自己收入水平的一个不错的投资, 于是你下定决心大干一场,准备好好地学习一下这个东西。你开始兴冲冲地去网络上搜索 资料,然后你开始困惑,因为 Selenium 有两个版本:Selenium 1 和 Selenium 2,并且 Selenium 1 到现在都没有完全废弃,是学 Selenium 1 还是学 Selenium 2?Selenium 1 很经典,Selenium 2 很前沿;然后你继续深挖,你发现如果学 Selenium 2,就会遇到 Selenium 1 中一个叫 Webdriver 的东西,那是啥?然而如果要学 Selenium 1,你将一直不停地看到一个叫 Selelnium RC 的字眼,这又是什么?现在的你也许已经有一些动摇了吧,不过噩梦才刚刚 开始。你也许会遇到一些靠谱的人,他们会建议你先学习一门语言,因为如果要用 Selenium, 基本上就意味着你应该学会编程。但是 Selenium 支持太多的编程语言,例如,Ruby、Python、 Java、Javacript、Objective-C、PHP,到底应该从哪一门语言入手,你开始陷入经典的语言 之争的泥沼,你悲哀地发现自己花了很多时间去潜心研究,但*终只是模模糊糊知道了 Selenium 在远方,面前是一堆分岔路口,每种语言看起来都不错,每个分岔路口都可以到 达终点,但你就是不知道该怎样迈出**步。这便是选择的成本,选择是有风险的,选对 了事半功倍,选不对只能半途而废。
对很多初学者来说,上面的困局应该都是存在的。花了很多精力和时间,但*终却发 现一切都是徒劳;做了很多功课,但真正该做的事情却未曾开始。 好在这本书能够很好地解决这个困局。你不需要选择,这本书描述的就是 Selenium 2, 代表了主流,也代表了未来;用的语言是 Python,全世界都在用,它简单、高效、经典、 优雅。很有意思的是,Python 自身的哲学里也认为**只用一种方法来做一件事(你可以 打开 Python 解释器,然后 import this 试试),免去选择的苦恼。你应该把精力放在更有意 义的事情上,比如多写几个自动化测试用例,而不是纠结于各种选择,徘徊不前。
然后便是初学者困局里更加常见的一个问题:如何搭建环境?我遇到过不少人倒在这 里,而且前赴后继,无限循环。如果你有这本书,那这些问题应该都不是问题,跟着虫师 描述的步骤一步步来吧,循序渐进而又节奏轻快。
推荐序 ∣ V
搭建好环境并写好脚本之后,敢问路在何方又是初学者常见的问题。因为 Selenium 没 有官方中文文档,啃英文实在不是一件愉快的事情。也许你好不容易看懂了解释,却发现 官方的示例离自己身处的环境相差太多,官方的例子一直是 Google 搜索,发 Gmail,而你 却悲哀地发现根本就没有 Gmail 这个网站。这本书不仅非常详细地介绍了 Selenium 的 API, 而且给出了非常多可以运行的本土化的示例,这对初学者和其他使用者来说都是福音,有 些例子很棒,你试过就知道。 其实试完 WebDriver 中的各种 API 后,你应该算入门了。入门了之后便是更多的困惑, 比如如何去写测试用例,如何做基于数据的用例设计,如何分布式执行用例,如何多线程 执行用例等,而这些答案都在本书中。 *后便是 BDD 和 CI,如果一本介绍自动化测试的书没有这两项内容,那它一定是不 完整的。如果自动化是彩虹,那么 CI 便是风雨,不经历风雨怎会见彩虹。没有 CI,自动 化其实找不到太多的应用场景;没有自动化,CI 更是无从说起。尽管本书的重点不是 CI, 但本书的终点在 CI,就像是指出了宿命的依归,独具匠心。
还记得上次跟虫师见面时的情景,应该已经有两年多了。时过境迁,曾经我们上班的 地点就在隔壁,如今发现时间逝去,很多东西都已改变。不过难能可贵的是虫师对测试技 术的追求一直不曾更改,也一直笔耕不辍,这本书其实也算是水到渠成的结果。勿忘初心, 坚持自己,*后希望这本书能多帮助一些人,我想这应该也是虫师的初衷吧。
乙醇
VI ∣ Selenium 2 自动化测试实战——基于 Python 语言
前 言
记得在 2013 年,笔者计划要学习一门脚本语言用来辅助测试工作,当时在 Ruby 与 Python 之间犹豫不定。后来开始接手社区项目的测试工作,由于社区项目基于 Python 开发, 所以,就自然选择了 Python。Python 语言的简单易用与丰富的类库给我带来了很大惊喜。 后来考虑到公司的 Web 产品比较适合进行自动化测试,再加上对产品的开发进度有很 好的节奏把控,于是就有了充足的时间尝试开展自动化测试。在此之前,我对 QTP 和 Selenium 两个自动化测试工具都有过接触,考虑在这两者之间选择其一。一方面是我个人 更偏向于使用开源工具,另一个重要原因是 Selenium 支持多种编程语言,包括 Python。于 是,就选择了 Python 与 Selenium 这样的组合进行产品自动化测试的尝试。 初期的学习遇到了不少问题。首先,Selenium 本身并不是一个单独的工具,它包含 IDE、 Gird 和 WebDriver 等几个部分;其次,Selenium 与编程语言的关系,以及它在编程语言中 所扮演的角色;*后,如何开发一个完整的自动化测试项目。初学者都会有这样的疑问。 当时,基于 Python 语言的 Selenium 自动化测试资料并不太多,大多资料都是基于 Java 语言的,所以学习过程也颇费周折。不过,在此过程中也得到了许多朋友的帮助,其中, 乙醇的文档和 MarkRabbit 的细心指导对我的帮助很大,在此表示感谢。
从事软件测试工作不久后,我便养成了写博客的习惯,把平时的学习与积累用简单易 懂的方式整理成博文,自然也会把这个技术以一个系列整理分享。后来,为了方便读者阅 读,把这个系列的十几篇博文整理成了 PDF 格式,并命名为 Selenium WebDriver (python), 这应该可以看作本书的原型。再后来,不断地更新与扩充这份文档的内容,技术不再局限 于 WebDriver API 的操作,于是更名为《Selenium 2 Python 自动化测试实战》,基本知识体 系已经确定。与此同时,与乙醇合作的自动化相关课程也在同步开展中,使本文档中的内 容具有很强的实战性,以解决具体的问题为出发点,用大量的实例来说明自动化实施的思 想与概念。
前 言 ∣ VII
本书的写作目的并不是为了简单地告诉读者如何使用一个自动化测试工具,这并非我 的初衷,我希望读者在学习本书的内容后能提高综合的技术高度与宽度,从而摆脱简单的 手工测试,向高级测试工程师的道路迈进。为此,我用了一定的章节来介绍 Python 的基础 与应用、BDD 行为驱动、GitHub 的使用,以及持续集成工具的使用等。
本书能够出版首先需要感谢编辑安娜,她为本书的出版提供了许多意见与帮助。其次, 需要感谢以往各期的学生,在传授你们技术的过程中我同样也收获颇多。另外,还要感谢 王成成、符志辉、张超、刘玉凤、吴宇、许晶晶、李娜、李朋程等学生,是你们帮助我校 对了这本书中的内容。
虫师
记得很久之前接触自动化的时候看了一本关于某早期自动化测试工具的书,书名已经 记不得了,内容给我留下了深刻印象。因为那本书根本就是把官方文档有选择性地翻译一 遍,对于实际应用来说其作用几乎是零。因此,从那时起我就一直认为,对工具的介绍不 应该不仅仅停留在理论和了解的程度,如果没有实战,那么我们之于工具无非就是叶公好 龙,一直远观,无法赏玩。 很欣慰的是,虫师这本《Selenium 2 自动化测试实战——基于 Python 语言》并没有停 留在夸夸其谈的表面,我仔细研究了书中的代码和示例,显然,很大一部分都是他在日常 工作中勤奋总结而得出的一手范例,对技术书籍来说,这是难能可贵的。
对一本介绍自动化测试的书来说,我们其实不缺理论。国外的很多同行都在不停地传 经布道,他们的结论其实很简单,自动化测试是好东西,对提升软件质量来说,自动化测 试带给我们生产力的解放收益要远远大于成本。结论我们都知道,工具我们也清楚,无非 就是单元测试用 xunit、rspec 之类,BDD 测试用 cucumber,UI 层面的 aut 用 Selenium,等 等。这些工具我们都会用,而且也许用得还不错,不过为什么我们的自动化测试除了耗时 费力,根本就看不出什么效果呢?
答案其实很简单,我们自以为用对了,但实际上也许我们才刚上路,甚至跟**实践 背道而驰。这就像是拿 iPad 当砧板,用宰牛刀杀鸡一样,路子不对,只能越练越野,直到 走火入魔。
这本书其实提到了很多不错的实践,路子正宗,从者自然不会误入歧途,这也是我推 荐它的另外一个理由。
在看本书前面几章的时候,我总是不断地想起当年初出茅庐入行时所遇到的初学者困 局。我很想学一门技术,但是到底应该从哪里开始?
万事开头难,没有师傅领进门,在不停的挫败和各种不同信息的正反面轰炸下,我们 很容易举白旗放弃。 试想一下这样的场景:假如你是一个初学者,你从某种渠道得知 Selenium 是代表未来 测试趋势的测试工具,是提升生产力的重要手段,是提升自己收入水平的一个不错的投 资,于是你下定决心大干一场,准备好好地学习一下这个东西。你开始兴冲冲地去网络 上搜索资料,然后你开始困惑,因为 Selenium 有两个版本:Selenium 1 和 Selenium 2,并 且 Selenium 1 到现在都没有完全废弃,是学 Selenium 1 还是学 Selenium 2?Selenium 1 很经 典,Selenium 2 很前沿;然后你继续深挖,你发现如果学 Selenium 2,就会遇到 Selenium 1 中一个叫 Webdriver 的东西,那是啥?然而如果要学 Selenium 1,你将一直不停地看到一个 叫 Selelnium RC 的字眼,这又是什么?现在的你也许已经有一些动摇了吧,不过噩梦才刚 刚开始。你也许会遇到一些靠谱的人,他们会建议你先学习一门语言,因为如果要用 Selenium,基本上就意味着你应该学会编程。但是 Selenium 支持太多的编程语言,例如, Ruby、Python、Java、Javacript、Objective-C、PHP,到底应该从哪一门语言入手,你开始 陷入经典的语言之争的泥沼,你悲哀地发现自己花了很多时间去潜心研究,但*终只是模 模糊糊知道了 Selenium 在远方,面前是一堆分岔路口,每种语言看起来都不错,每个分岔 路口都可以到达终点,但你就是不知道该怎样迈出**步。这便是选择的成本,选择是有 风险的,选对了事半功倍,选不对只能半途而废。
对很多初学者来说,上面的困局应该都是存在的。花了很多精力和时间,但*终却发 现一切都是徒劳;做了很多功课,但真正该做的事情却未曾开始。 好在这本书能够很好地解决这个困局。你不需要选择,这本书描述的就是 Selenium 2, 代表了主流,也代表了未来;用的语言是 Python,全世界都在用,它简单、高效、经典、 优雅。很有意思的是,Python 自身的哲学里也认为**只用一种方法来做一件事(你可以 打开 Python 解释器,然后 import this 试试),免去选择的苦恼。你应该把精力放在更有意 义的事情上,比如多写几个自动化测试用例,而不是纠结于各种选择,徘徊不前。
然后便是初学者困局里更加常见的一个问题:如何搭建环境?我遇到过不少人倒在这 里,而且前赴后继,无限循环。如果你有这本书,那这些问题应该都不是问题,跟着虫师 描述的步骤一步步来吧,循序渐进而又节奏轻快。
搭建好环境并写好脚本之后,敢问路在何方又是初学者常见的问题。因为 Selenium 没 有官方中文文档,啃英文实在不是一件愉快的事情。也许你好不容易看懂了解释,却发现 官方的示例离自己身处的环境相差太多,官方的例子一直是 Google 搜索,发 Gmail,而你 却悲哀地发现根本就没有 Gmail 这个网站。这本书不仅非常详细地介绍了 Selenium 的 API, 而且给出了非常多可以运行的本土化的示例,这对初学者和其他使用者来说都是福音,有 些例子很棒,你试过就知道。 其实试完 WebDriver 中的各种 API 后,你应该算入门了。入门了之后便是更多的困惑, 比如如何去写测试用例,如何做基于数据的用例设计,如何分布式执行用例,如何多线程 执行用例等,而这些答案都在本书中。 *后便是 BDD 和 CI,如果一本介绍自动化测试的书没有这两项内容,那它一定是不 完整的。如果自动化是彩虹,那么 CI 便是风雨,不经历风雨怎会见彩虹。没有 CI,自动 化其实找不到太多的应用场景;没有自动化,CI 更是无从说起。尽管本书的重点不是 CI, 但本书的终点在 CI,就像是指出了宿命的依归,独具匠心。
还记得上次跟虫师见面时的情景,应该已经有两年多了。时过境迁,曾经我们上班的 地点就在隔壁,如今发现时间逝去,很多东西都已改变。不过难能可贵的是虫师对测试技 术的追求一直不曾更改,也一直笔耕不辍,这本书其实也算是水到渠成的结果。勿忘初心, 坚持自己,*后希望这本书能多帮助一些人,我想这应该也是虫师的初衷吧。
乙醇
评论
还没有评论。