
前言
写一本关于Selenium自动化测试的工具书,一开始我是拒绝的。直到现在,我仍然认为工具书不足以道尽测试的奥妙。学习Selenium最好的途径是啃官方文档和源码,从最开始的Selenium RC到WebDriver,再到移动测试Appium, Selenium一直在快速、持续地发展和变化着。等读者看到这本书的时候,很可能某些问题已经有了更好的解决方案,或者书中的代码已经不能直接运行。
而最终,我还是动笔了。因为我还有另一个观点:“自动化测试”不是某一家公司或者团队组织需要考虑的问题,它应该是测试同行们的必经之路,是日常测试工作的手段之一。而初学者在一开始难免会有畏难情绪,又不知如何构建知识体系。于是,将所思所得分享出来,或许可以帮助初学者尽快地度过那段“破冰期”。
本书的组织方式
市面上Selenium的资料很多,谈论测试自动化的也很多。但脱离了工具和技术,去谈方法论,难免让人觉得空洞;而没有方法论的东西,只谈工具和技术,难免是“一叶障目,不见泰山”。本书尝试在梳理技术知识的同时,讨论测试自动化的方法论。
第1章主要探讨测试价值观,阐述编者对自动化测试的基本观点和认识。
第2章是Selenium入门内容,介绍了Selenium的发展,涉及Selenium IDE、Selenium WebDriver和Selenium Grid。
第3章重点介绍了Selenium WebDriver的使用。不是简单罗列Selenium WebDriver API,还包括不同WebDriver对象、不同页面元素的处理思路。
第4章介绍了自动化测试框架的设计,包括线性、模块化、数据驱动和关键字框架4种类型。
第5章介绍了HTML 5元素的处理。Selenium还未对某些HTML 5元素的操作进行封装,因而需要利用JavaScript来解决问题。读者将在这一章开拓视角,了解更多的Selenium应用场景。
第6章介绍了移动App的测试框架——Appium。基于前面几章对Selenium原理与操作的了解,读者会在这一章了解iOS与Android App自动化测试脚本的写法。
第7章介绍了行为驱动开发(BDD)模式。通过这一章,希望读者能体会到做好自动化测试不仅在于工具的掌握和框架的使用,还需要考虑测试用例的管理、手动测试用例如何与自动化脚本关联,甚至与业务部门的沟通等问题,其中几个BDD框架的示例为读者提供了解决问题的思路。
第8章介绍了持续集成工具Jenkins的使用,希望通过这一章能为读者带来测试流程方面的思考。Jenkins可以让测试脚本的执行、报告的展示变得简单高效。
本书的内容均是由Ping++的一线测试人员编写的。第2章由王红兴、周淼淼编写,第4章由徐克亮编写,其余章节由吴子腾编写。
本书的特色
本书的特色主要体现在以下3个方面:
第一,在理论观点上,本书在开篇就阐明了编者对于“质量与自动化测试的关系”,“自动化测试与白盒测试的关系”等话题的理解。其实Selenium等各种自动化测试工具上手并不难,但相信读者在阅读过程中并不仅仅只是想了解一种工具,而是想获得如何实施自动化测试的思路。正所谓,测试技术或工具只是“指月之手”,我们追求的是“月亮”,是如何放心地迭代,快速地交付高品质的产品。
第二,在学习视角上,本书从Selenium工作原理、测试脚本的组织方式——开始讲解,再由Web自动化脚本的编写延伸到HTML 5元素、App测试对象的识别等。章节的内容设置与当今企业,尤其是互联网公司所需的UI自动化测试技术环环相扣,归纳总结了可能遇到的难点以及解决问题的思路。
第三,在技术实施上,突出了需要向团队传播质量意识与测试自动化实践相结合。本书介绍的行为驱动开发(BDD)与持续集成工具Jenkins都是需要团结整个研发团队,甚至是相关的业务部门,才能将这些理念发挥至最佳。当然,即便这些概念在组织推进过程中存在困难,测试人员也可以通过了解这些工具和技术,对研发过程改进这一话题进行更加深入的思考。
考虑到本书的目标和定位,对于没有掌握任何一门编程语言的读者而言,或许会造成阅读门槛。另外,本书涉及多类界面对象的识别和操作、多种测试脚本的写法、多个测试框架的使用。然而在实际工作中,界面操作的自动化仅仅是分层测试策略中的一部分,并不能代表全部的自动化工作。但为了便于从整体上把握和安排内容,编者还是以Web测试自动化作为本书的主要架构。这样,相比单一地通过某个系统或产品来整体介绍自动化测试方面的研究,书中各章节的内容显得在体系性上有所欠缺。
目标读者
本书主要面向的读者是具备编程基础,缺乏自动化测试经验,希望快速、系统地了解Selenium,从而进一步做好UI测试自动化的工程师。本书不仅是为测试人员而写的,它还适用于对软件测试有兴趣的在读大学生以及希望了解测试技术的开发人员。
全书综合了Selenium实践过程中的方方面面,涉及脚本编写、框架选型、开发模式等各个领域的讨论。虽然示例代码分为Java与Python两种语言,但并不会影响阅读,书中对示例代码进行了详尽的文字解读。Python代码适用于2.7.10版本。代码下载链接:https://github.com/applewu/selenium-exercises.git。
如何阅读本书
本书的前3章是全书内容的基础,需要首先阅读。在掌握了前3章之后,读者可以按照任意顺序阅读后续章节。既可以顺序浏览,概观Selenium自动化测试实践,也可以选择性地阅读自己感兴趣的章节。
我们学习任何测试工具的最终目的不在于掌握工具,而在于如何利用工具更好地为自动化测试服务。自动化测试也只是产品质量工作中的一部分。因此,不要沉迷于“术”,而忘却了“道”。在阅读过程中,读者一方面需要积极实践,掌握测试脚本的编写方法,另一方面需要积极思考,如何在自己所在的工作中合理应用起来。练习与反思,才能将本书的效果发挥至极致。
勘误和支持
由于水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。在阅读过程中遇到任何问题或错误,欢迎发送邮件至邮箱test4greenbar@163.com,期待能够得到读者的真挚反馈。
读者还可以直接在Github的selenium-exercises项目中提交代码有关的问题,也可以通过微博(@籽藤_上海)联系编者。
致谢
首先要感谢清华大学出版社提供了这样一个创作平台。其次,感谢那些提供了宝贵建议的朋友们。虽然最终编写这本书的是Ping++的测试团队,但还有很多同事和好友为本书提供了宝贵的意见。感谢李雨洪、方雷、孙兵兵、叶波光、翁旭锋、李响、左文娅、赵海林、付敏芝、史子飞提出的问题和反馈,感谢我素未谋面却志同道合的好友刘琛梅以及我的老师姜晓东在百忙之中为本书写了推荐序。
最后,我要感谢我的家人。感谢我的父母,尤其是我的母亲,培养了我的阅读和学习习惯。感谢我的公公婆婆,他们的辛勤付出让我在写书的过程中没有后顾之忧,不用担心儿子的生活起居。我还要感谢我的儿子垲兴,你的笑容是我的能量。感谢你们伴我前行。
Ping++测试团队 吴子腾
上海 张江高科
2017年9月10日