本书分为14个章节,第1章是自动化测试相关基础知识的介绍;第2章到第10章是本书的重点,循序渐进地介绍了自动化测试所用到的技术;第11章通过一个具体的项目综合运用了前面章节所介绍的技术与技巧。第12章到第14章选取了当前最热门的技术进行了介绍,旨在扩展测试人员的综合技术能力。
本书的写作目的并不是为了简单地告诉读者如何使用一个自动化测试工具,而是希望读者在学习本书的内容后能够提高综合的技术高度与宽度,从而摆脱简单的手工测试,向高级测试工程师的道路迈进。
作者是有多年工作经验的测试工程师,精通性能测试、自动化测试等技术。
书中的代码和示例,很大一部分都是作者在日常工作中勤奋总结而得出的一手范例,非常实用。
这本书其实提到了很多不错的实践,路子正宗,从者不会误入歧途,适合测试新手及有一定经验的测试人员。
推荐序
记得很久之前接触自动化的时候看了一本关于某早期自动化测试工具的书,书名已经 记不得了,内容给我留下了深刻印象。因为那本书根本就是把官方文档有选择性地翻译一 遍,对于实际应用来说其作用几乎是零。因此,从那时起我就一直认为,对工具的介绍不 应该仅仅停留在理论和了解的程度,如果没有实战,那么我们之于工具无非就是叶公好龙, 一直远观,无法赏玩。 很欣慰的是,虫师这本《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 的使用,以及持续集成工具的使用等。
本书能够出版首先需要感谢编辑安娜,她为本书的出版提供了许多意见与帮助。其次, 需要感谢以往各期的学生,在传授你们技术的过程中我同样也收获颇多。另外,还要感谢 王成成、符志辉、张超、刘玉凤、吴宇、许晶晶、李娜、李朋程等学生,是你们帮助我校 对了这本书中的内容。
虫师
错误在前言的第一页,不在正文: “Gird”改为”Grid”
第44页中if语句甚至可以进行布尔类型的判断,下方的列子第一行
定义a=true 错误,应该加上引号定义字符串为a=’true’
“就需要要用到”改为”就需要用到”
“找到不到”改为”找不到”
python.py的例子错了,少一个 print()方法