标题：零成本实现Web自动化测试
图书信息
零成本实现Web自动化测试  温素剑 编著
ISBN 978-7-121-13205-6
2011年5月出版
定价：59.00元
16开
392页
宣传语
Web自动化测试的专业工具书，软件测试工程师的良师益友。
内 容 简 介
本书从目前主流的Web自动化测试工具入手，由浅入深、全面、细致地阐述了如何使用开源测试工具来完成Web自动化测试，便于读者轻松掌握Web自动化测试的原理、方法和实际操作。所以，它不是一本深奥的测试理论书籍，而是一本测试实战类的书籍，作者试图在书中向读者演示如何使用Selenium、WebDriver、Bromine、SauceLabs、MantisBT搭建起一整套稳定、高效、成本为零的自动化测试平台。本书以测试Google GMAIL为具体范例，提供了完整的Web自动化测试解决方案。
本书是一本Web自动化测试的专业工具书，也是软件测试工程师的良师益友，可作为软件测试培训、高等院校软件相关专业的辅助教材，目标读者是初级或者资深软件测试工程师、对提高自动化测试的有效性感到困惑的测试经理，以及有志于从事软件测试工作的应届毕业生。
前  言
我有一个梦想，有一天我的办公桌上不再是一片狼藉，整洁的台面上只有一个大大的红色按钮，每天最重要的工作，就是上班后狠狠地按下红色按钮，然后悠闲地泡上一杯西湖龙井，拿起最新一期的参考消息，看看美联储是不是又在加印该死的“废纸”。在我享受生活的同时，一份份准确严谨的测试报告就会自动发往开发部门，并抄送到各位领导的邮箱中。测试报告包含最新软件版本的缺陷列表，并指出了可接受的缺陷修复时间。剩下的一切都是“傲慢自大”的软件开发人员的事，多么美妙的一天。
不过梦想永远都是梦想，就像马丁·路德·金遇刺身亡42年后的今天，美国仍然不是一个人人平等、没有种族歧视的国家一样。如果我的梦想有一天变为现实，那么我需要面对的可能不是悠闲的生活，而是一份解聘通知书。因为真到那一天，软件测试工作就变成人人都能完成的简单事情，公司完全可以随便请一个人来负责我的工作，而不必付出很高的薪水。这真是一个一点儿也不好笑的笑话，测试人员的终极目标居然是让自己失去饭碗，不过，幸好这一天还远着呢。
现在，让我们从梦想世界回到现实中来，现实是残酷的，笔者所在的测试部门，已经拥有成千上万个QTP自动化测试案例，不过它们仅仅是自动化测试案例而已。梦想离笔者还远着呢，这些案例总是执行失败，失败原因千奇百怪，既有测试环境不稳定导致的失败，也有QTP工具莫名其妙的错误。测试工程师投入了大量的精力去维护这些自动化测试案例，可惜效果并不好，自动化测试的有效率依然很低，很多软件系统的自动化测试有效率常年保持在60%左右，怎么办？如何向领导解释？
要提高自动化测试的有效性，笔者认为有两种办法：
第一，降低自动化测试对象的层次，即采用底层接口自动化测试。一个软件系统的上层界面可能会经常发生变化，但是底层功能模块之间接口和系统之间接口的变化却一定不会很多，除非遇到软件重构。这样做就能在很大程度上避免了用户界面频繁变化对自动化测试的影响，从而降低了维护的工作量。
第二，采取更可靠的基于GUI的自动化测试工具。目前QTP无疑是使用最广泛的自动化测试工具，但是实践中笔者发现它的录制/回放功能很不稳定，经常会发生测试对象无法识别的异常情况，甚至莫名其妙地运行失败。怎么办？放弃基于用户界面的自动化测试？显然不行，因为底层接口的自动化测试，有其自身的局限性，首先你无法通过它来测试用户界面，其次你很难用它来测试软件系统的完整业务流程。唯一可行的办法就是寻找一种更可靠、更有效的工具来代替它，在这里笔者推荐Selenium和WebDriver两种开源的自动化测试工具。从目前的实践来看，它们远比QTP更稳定，测试案例的执行速度也更快，使用成本会更低。
写作背景
最近几年自动化测试已日益深入人心，如果现在有人去面试软件测试工程师岗位，而又完全不了解自动化测试，那么他几乎就不可能得到职位。因此，对测试工程师而言，了解自动化测试原理、掌握几种主流的自动化测试软件，已经变成自动化测试岗位最基本的要求。对有志于从事软件测试行业的大学应届毕业生而言，了解自动化测试就是一块不错的敲门砖。今年笔者所在的测试部门来了两位实习生，由笔者辅导他们完成一些自动化测试任务。实习结束后他们并没有与公司签约，后来与他们沟通才知道，别的公司肯出双倍的薪水聘用他们，看重的正是他们有自动化测试的工作经验。由此，读者朋友们就不难看出业界对自动化测试的重视程度。
“云计算”绝对是2010年最热的IT词汇，甚至沾上一点“云”概念的股票都会一飞冲天。“云”听起来很虚幻，其实就是瘦客户端加网格计算。今后客户端不再会有大量的计算任务，计算和存储都被放在云上。在笔者看来，今后的客户端应该就是一个浏览器，用户所有的操作都是通过浏览器来实现的。Google刚发布的操作系统Chrome OS，就是基于这一理念设计的。B/S和C/S架构的软件系统，应该会慢慢演变为Browser/Cloud模式。如此看来在“云计算”时代，Web自动化测试依然很重要，而且会越来越重要。因此，笔者萌生了写作一本关于Web自动化测试的书籍。
本书内容
本书不是一本讲述深奥测试理论的教科书，而是一本实战性的书籍。笔者想要达到的目标是——读者朋友们在认真读完这本书后，马上就能在生产实践中用上所学的内容。本书首先介绍基础的自动化测试理论，接着介绍Selenium和WebDriver两种测试工具，最重要的是自动化测试实战篇。实战篇中笔者以测试Google Gmail为例，手把手地教读者如何用Selenium、WebDriver、Bromine、SauceLabs、MantisBT搭建起一整套稳定、高效、成本为零的自动化测试平台。
本书分为三篇共14章。第1篇包括第1～9章，第1章介绍自动化测试理论，第2章到第8章介绍Selenium自动化测试工具，第9章介绍WebDriver自动化测试工具。第2篇是自动化测试实战篇，包括第10～13章，第10章以测试Google GMAIL为范例介绍完整的Web自动化测试解决方案，第11章介绍管理测试案例的工具——Bromine，第12章介绍测试云SauceLabs，第13章介绍基于Web的缺陷管理系统——MantisBT。第3篇是Selenium使用帮助篇，是使用Selenium经常需要用到的一些资料。
目标读者
本书的目标读者是初级或者资深软件测试工程师，以及对提高自动化测试的有效性感到困惑的测试经理。本书着重介绍如何使用Selenium和WebDriver两种开源自动化测试工具，来构建你的Web自动化测试体系。
感谢
首先要感谢我的家人，正是由于他们默默的支持，我才能静下心来写作。其次，还要感谢电子工业出版社计算机分社社长郭立和策划编辑袁金敏的热情支持和帮助，以及其他编辑认真细致的工作才能使书稿得以完善和出版。
由于笔者水平有限，书中的错误和不要之处在所难免，敬请读者批评指正。温素剑
2010年12月16日于北京
目录
第1篇  Selenium和WebDriver工具篇
第1章  自动化测试基础 2
1.1  初识自动化测试 2
1.1.1  自动化测试是什么 2
1.1.2  常见的自动化测试架构 5
1.1.3  自动化测试的基本流程 8
1.1.4  走出自动化测试认知的误区 12
1.2  开源Web自动化测试 14
1.2.1  Web自动化测试 14
1.2.2  是否选择开源自动化测试 15
1.2.3  开源自动化测试的优势 15
第2章  Selenium简介和基础 17
2.1  Selenium简介 17
2.2  Selenium基础 21
2.3  小结 25
第3章  Selenium-IDE 26
3.1  简介 26
3.2  IDE操作界面 29
3.3  测试案例和测试案例集 32
3.3.1  创建测试案例 32
3.3.2  运行测试案例 35
3.3.3  调试测试案例 37
3.3.4  测试案例集 39
3.4  IDE功能扩展 40
3.5  常见错误处理 41
第4章  Selenium命令 45
4.1  验证页面元素 45
4.2  定位页面元素 48
4.3  文字范本匹配 54
4.4  命令使用技巧 58
第5章  Selenium-RC 63
5.1  简介 63
5.2  Selenium-RC基础 64
5.2.1  Selenium-RC工作原理 64
5.2.2  Selenium-RC架构 66
5.2.3  Selenium-RC安装 70
5.3  Selenium-RC使用 74
5.3.1  从Selenese到测试程序 74
5.3.2  构建你的测试程序 79
5.3.3  学习Selenium-RC API 86
5.3.4  报告测试结果 88
5.3.5  为测试加入一些编程逻辑 91
5.3.6  Server选项 94
5.3.7  处理HTTPS和安全弹出对话框 99
5.3.8  支持其他浏览器和浏览器配置 100
5.4  常见错误的处理 101
第6章  Selenium测试案例设计 107
6.1  测试设计导言 107
6.2  测试什么 107
6.3  验证结果 109
6.3.1  断言vs验证 109
6.3.2  权衡：assertTextPresent、assertElementPresent、assertText 110
6.4  选择一个定位策略 111
6.4.1  定位动态对象 111
6.4.2  如何避免在测试中使用复杂的xpath表达式 114
6.5  测试Ajax应用系统 115
6.6  UI映射 115
6.7  数据驱动测试 118
6.8  数据库验证 119
第7章  Selenium用户扩展 121
7.1  简介 121
7.2  Actions 121
7.3  Accessors/Assertions 122
7.4  定位策略 123
7.5  在Selenium-IDE中使用用户扩展 124
7.6  在Selenium-RC中使用用户扩展 124
第8章  Selenium-Grid 126
8.1  Selenium-Grid是如何工作的 127
8.1.1  传统的Selenium架构 127
8.1.2  Selenium-Grid架构 128
8.1.3  指定测试执行环境 130
8.2  如何使用Selenium-Grid测试平台 136
第9章  Selenium 2.0和WebDriver 142
9.1  WebDriver基础 142
9.1.1  WebDriver是什么 142
9.1.2  什么时候使用WebDriver 143
9.1.3  五分钟入门指南 143
9.2  WebDriver的各种实现 146
9.2.1  HtmlUnit Driver 146
9.2.2  Firefox Driver 147
9.2.3  Internet Explorer Driver 149
9.2.4  Chrome Driver 149
9.3  WebDriver进阶 151
9.4  模拟Selenium-RC 156
第2篇  自动化测试实战篇
第10章  实战——测试Google GMAIL 160
10.1  明确测试范围 160
10.2  Selenium测试——登录GMAIL邮箱 161
10.3  Selenium测试——撰写邮件 172
10.4  Selenium测试——删除邮件以及邮件列表 178
10.5  Selenium测试——邮件存档 185
10.6  Selenium测试——搜索邮件 191
10.7  使用测试案例集来管理Selenium-IDE脚本 197
10.8  留给读者的思考 200
第11章  管理你的测试案例——Bromine 201
11.1  Bromine基础 201
11.1.1  为什么使用Bromine 201
11.1.2  Bromine特性 202
11.1.3  Bromine工作原理 202
11.1.4  安装Bromine 204
11.2  配置和使用Bromine 206
11.2.1  配置Bromine测试节点 206
11.2.2  配置Bromine任务调度器 209
11.2.3  创建一个Bromine测试脚本 212
11.2.4  在Bromine中上载测试脚本 216
11.2.5  测试计划 216
11.2.6  测试实验室 219
11.2.7  控制面板 220
11.3  实战——管理Google GMAIL测试案例 222
第12章  测试云——SauceLabs 229
12.1  Sauce OnDemand 229
12.1.1  如何使用Sauce OnDemand 231
12.1.2  Sauce OnDemand常用参数 238
12.2  Sauce Connect 246
12.3  Sauce IDE 248
12.4  Sauce RC 253
12.5  实战——在SaucesLabs 中运行Google GMAIL测试案例 258
12.6  实战——在Bromine中集成SaucesLabs 267
第13章  管理你的缺陷——MantisBT 271
13.1  简介 271
13.2  安装 273
13.3  MantisBT配置 276
13.4  MantisBT管理 280
13.4.1  用户管理 280
13.4.2  项目管理 283
13.4.3  自定义字段管理 285
13.4.4  管理配置 286
13.5  报告缺陷 289
13.5.1  报告并处理缺陷 290
13.5.2  缺陷查询 291
13.5.3  缺陷修改 292
13.5.4  我的视图 294
13.6  统计报表和图形报表 294
13.7  留给读者的思考 297
第3篇  Selenium使用帮助篇
第14章  Selenium使用帮助 300
14.1  Selenium API速查手册 300
14.1.1  Selenium Action 300
14.1.2  Selenium Assertion 318
14.1.3  Selenium Accessors 320
14.2  Selenium客户端驱动配置 353
14.2.1  .NET客户端驱动配置 353
14.2.2  Java客户端驱动配置 356
14.2.3  Python客户端驱动配置 372