产品特色
编辑推荐
适读人群 :具有编程基础,希望系统地了解UI自动化测试的开发或测试人员 《Selenium自动化测试之道——基于Python和Java语言》既介绍了测试工具Selenium的使用,又带领读者理清实施自动化测试的思路,后者尤其重要。正所谓,测试技术或工具只是“指月之手”,我们追求的是“月亮”,是如何放心地迭代、快速地交付高品质的产品。
《Selenium自动化测试之道》内容设置与当今企业,尤其是互联网公司所需的UI自动化测试技术环环相扣,归纳总结了可能遇到的难点以及解决问题的思路。
《Selenium自动化测试之道》介绍的行为驱动开发(BDD)与持续集成工具Jenkins,都需要团结整个研发团队,甚至是相关的业务部门,才能将这些理念发挥得更好,因此对于促进研发过程改进也具有一定的参考价值。
内容简介
《Selenium自动化测试之道——基于Python和Java语言》以Selenium的使用为主线,展现了UI自动化测试的各种实践过程,引导读者思考如何基于Selenium做好UI自动化测试。示例代码采用Python和Java,全书共8章,第1章分析讨论了自动化测试的意义,旨在使读者对自动化测试有一个较明确的认识;第2、3章详细介绍了SeleniumIDE的命令、SeleniumWebDriverAPI、不同Driver对象以及工作原理,旨在使读者对Selenium有深入的了解;第4章重点通过代码演示介绍了不同类型的测试框架;第5、6章是拓宽思路,演示了如何使用SeleniumWebDriver结合JavaScript代码来操作HTML5页面的WebStorage、Canvas对象,以及如何使用Appium处理原生App和WebApp的页面对象;第7章着重演示了主流BDD框架Cucumber-JVM、Lettuce、Behave的应用,偏实战场景,探讨了BDD实施过程中需要考虑的种种问题;第8章介绍了测试人员在Jenkins使用过程中的必备知识。本书还提供了所有示例的源码与素材文件供读者练习使用,读者可从网上下载本书资源文件。
《Selenium自动化测试之道》适用于具有编程基础,希望系统地了解UI自动化测试的开发或测试人员,以及对自动化测试感兴趣的计算机专业学生等。
作者简介
Ping++测试团队主要面向支付相关产品及行业解决方案,特别是针对RESTful API和Web系统的各类测试场景。作为创业团队的一部分,Ping++测试团队的工程师既认可手动测试的价值,又积极推行测试自动化,既聚焦产品,也关注流程协作,同时把提升产品质量作为己任。
目录
目录
第1章自动化测试的价值观1
1.1自动化测试与产品质量的关系1
1.2自动化并不等同于白盒测试2
1.3采用自动化还是手工测试4
1.4如何进行自动化测试5
1.5学习自动化测试的建议7
1.6小结8
第2章Selenium初体验9
2.1从一个测试脚本说起9
2.2Selenium家族10
2.3SeleniumIDE12
2.3.1安装SeleniumIDE12
2.3.2SeleniumIDE的使用13
2.3.3场景演练20
2.4SeleniumWebDriver37
2.4.1工作原理37
2.4.2元素定位38
2.4.3场景演练41
2.4.4Wait45
2.4.5常用的断言46
2.5SeleniumGrid47
2.5.1工作原理47
2.5.2环境搭建48
2.6小结52
2.7练习52
第3章SeleniumWebDriver53
3.1创建不同的Driver对象53
3.1.1主流浏览器53
3.1.2Headless浏览器56
3.2常用API概览59
3.2.1浏览器操作60
3.2.2ActionChains61
3.2.3Alert61
3.2.4By62
3.2.5DesiredCapabilities62
3.2.6Keys63
3.2.7Wait64
3.2.8execute_script64
3.2.9switch_to66
3.3场景演练66
3.3.1弹出框67
3.3.2悬浮菜单71
3.3.3表格75
3.3.4iframe79
3.3.5上传与下载81
3.4可能遇到的异常83
3.5小结88
3.6练习88
第4章自动化框架89
4.1线性框架89
4.2模块化框架91
4.3数据驱动框架94
4.4关键字驱动框架102
第5章HTML5测试107
5.1WebStorage108
5.1.1LocalStorage108
5.1.2SessionStorage111
5.2ApplicationCache111
5.2.1获得ApplicationCache
当前的状态112
5.2.2设置网络连接状态在线/
离线113
5.3Canvas114
5.4Video116
5.5小结118
5.6练习118
第6章移动App测试:Appium119
6.1认识Appium120
6.1.1Appium是什么120
6.1.2Appium与iOS应用120
6.1.3Appium与Android应用121
6.2开始使用Appium122
6.2.1准备工作122
6.2.2Appium的安装与启动123
6.3原生App测试实践128
6.3.1运行ios_simple.py128
6.3.2运行android_simple.py133
6.3.3寻找练手App136
6.4WebApp测试实践139
6.4.1使用Chrome开发者工具
查看WebApp元素141
6.4.2AndroidWebApp的联机
调试142
6.4.3iOSWebApp的联机
调试144
6.5小结146
6.6练习146
第7章BDD:行为驱动开发147
7.1认识BDD148
7.1.1BDD的由来148
7.1.2与TDD比较150
7.1.3选择合适的BDD工具151
7.1.4BDD实施157
7.2BDD工具的使用160
7.2.1使用Cucumber-JVM161
7.2.2使用Lettuce168
7.2.3使用Behave175
7.3小结182
7.4练习182
第8章Jenkins的使用183
8.1认识Jenkins183
8.2Jenkins安装与启动185
8.3任务定制化188
8.3.1同步源码190
8.3.2定时任务190
8.3.3报告191
8.4用户与权限194
8.5小结195
8.6练习195
参考资料196
前言/序言
前言
写一本关于Selenium自动化测试的工具书,一开始我是拒绝的。直到现在,我仍然认为工具书不足以道尽测试的奥妙。学习Selenium最好的途径是啃官方文档和源码,从最开始的SeleniumRC到WebDriver,再到移动测试Appium,Selenium一直在快速、持续地发展和变化着。等读者看到这本书的时候,很可能某些问题已经有了更好的解决方案,或者书中的代码已经不能直接运行。
而最终,我还是动笔了。因为我还有另一个观点:“自动化测试”不是某一家公司或者团队组织需要考虑的问题,它应该是测试同行们的必经之路,是日常测试工作的手段之一。而初学者在一开始难免会有畏难情绪,又不知如何构建知识体系。于是,将所思所得分享出来,或许可以帮助初学者尽快地度过那段“破冰期”。
本书的组织方式
市面上Selenium的资料很多,谈论测试自动化的也很多。但脱离了工具和技术,去谈方法论,难免让人觉得空洞;而没有方法论的东西,只谈工具和技术,难免是“一叶障目,不见泰山”。本书尝试在梳理技术知识的同时,讨论测试自动化的方法论。
第1章主要探讨测试价值观,阐述编者对自动化测试的基本观点和认识。
第2章是Selenium入门内容,介绍了Selenium的发展,涉及SeleniumIDE、SeleniumWebDriver和SeleniumGrid。
第3章重点介绍了SeleniumWebDriver的使用。不是简单罗列SeleniumWebDriverAPI,还包括不同WebDriver对象、不同页面元素的处理思路。
第4章介绍了自动化测试框架的设计,包括线性、模块化、数据驱动和关键字框架4种类型。
第5章介绍了HTML5元素的处理。Selenium还未对某些HTML5元素的操作进行封装,因而需要利用JavaScript来解决问题。读者将在这一章开拓视角,了解更多的Selenium应用场景。
第6章介绍了移动App的测试框架——Appium。基于前面几章对Selenium原理与操作的了解,读者会在这一章了解iOS与AndroidApp自动化测试脚本的写法。
第7章介绍了行为驱动开发(BDD)模式。通过这一章,希望读者能体会到做好自动化测试不仅在于工具的掌握和框架的使用,还需要考虑测试用例的管理、手动测试用例如何与自动化脚本关联,甚至与业务部门的沟通等问题,其中几个BDD框架的示例为读者提供了解决问题的思路。
第8章介绍了持续集成工具Jenkins的使用,希望通过这一章能为读者带来测试流程方面的思考。Jenkins可以让测试脚本的执行、报告的展示变得简单高效。
本书的内容均是由Ping++的一线测试人员编写的。第2章由王红兴、周淼淼编写,第4章由徐克亮编写,其余章节由吴子腾编写。
本书的特色
本书的特色主要体现在以下3个方面:
第一,在理论观点上,本书在开篇就阐明了编者对于“质量与自动化测试的关系”,“自动化测试与白盒测试的关系”等话题的理解。其实Selenium等各种自动化测试工具上手并不难,但相信读者在阅读过程中并不仅仅只是想了解一种工具,而是想获得如何实施自动化测试的思路。正所谓,测试技术或工具只是“指月之手”,我们追求的是“月亮”,是如何放心地迭代,快速地交付高品质的产品。
第二,在学习视角上,本书从Selenium工作原理、测试脚本的组织方式——开始讲解,再由Web自动化脚本的编写延伸到HTML5元素、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日
拥抱效率,掌控未来:你的代码,为你效劳 在瞬息万变的数字洪流中,效率与精准是软件开发生命周期的核心驱动力。当每一次的迭代都伴随着成百上千次的重复劳动,当人工测试的瓶颈日益凸显,我们迫切需要一种更智能、更可靠的方式来确保产品的质量,加速产品上线。这,便是软件自动化测试的价值所在。 本书将带领你踏上一段深度探索自动化测试技术之旅。我们并非仅仅停留在工具的使用层面,而是将目光聚焦于其背后的原理、设计理念、以及如何在实际项目中构建和维护一套健壮、可扩展的自动化测试体系。我们将深入剖析自动化测试的“道”——那些支撑其强大生命力的核心思想与最佳实践。 第一部分:基石的构筑——理解自动化测试的本质与哲学 在正式挥舞自动化测试的利刃之前,我们需要夯实理论基础,理解为何而战,以及如何能战得更漂亮。 超越“点”的理解:自动化测试的战略意义。 我们将探讨自动化测试在整个软件开发生命周期中的战略定位,它如何与敏捷开发、DevOps文化相辅相成,如何帮助团队实现“持续集成、持续交付”的目标。这不仅仅是写几行代码执行一下,而是关于如何通过自动化来提升整体的开发效率、降低风险、缩短交付周期。 摆脱“孤岛”困境:自动化测试与质量保证的融合。 质量并非测试人员的专属责任,而应贯穿于产品设计的每一个环节。本书将阐述自动化测试如何赋能开发人员、产品经理,让他们都能在早期发现和修复问题,从而构建“内建质量”的产品。我们将讨论单元测试、集成测试、端到端测试的定位与协作,以及如何构建一个多层次的测试金字塔。 “人”的智慧,机械的执行:自动化测试的哲学思考。 自动化测试并非要取代人的思考,而是要将人从重复、低价值的工作中解放出来,让他们能专注于更具创造性、更需要洞察力的分析和设计。我们将探讨如何设计能够清晰表达业务意图的自动化测试,如何让测试代码本身也具有良好的可读性和可维护性。 选择的智慧:不同自动化测试框架的审视与取舍。 市场上的自动化测试框架琳琅满目,针对不同的技术栈、不同的测试场景,都有其独特的优势。我们将不局限于单一工具,而是站在宏观视角,审视几种主流的自动化测试框架(例如,前端的Playwright、Cypress,后端的REST Assured,移动端的Appium等)的设计哲学、适用场景、以及它们在社区中的发展趋势。我们将帮助你理解,为什么在某些情况下选择X比选择Y更合适。 第二部分:精益的实践——构建可维护、可扩展的自动化测试框架 理论指导实践,但实践本身也需要一套严谨的框架来支撑,使其稳定运行,并能随着业务的发展而不断演进。 “模型驱动”的强大:Page Object Model (POM) 与 Screenplay Pattern。 在Web自动化测试领域,Page Object Model(POM)早已是耳熟能详的设计模式,它极大地提升了测试代码的可维护性。我们将深入解析POM的实现细节,包括如何优雅地管理页面元素、如何封装页面操作,以及如何规避其潜在的缺点。在此基础上,我们还将引入更具表达力和可维护性的Screenplay Pattern(脚本家模式),演示如何将测试脚本编写得更像是一系列角色执行的“剧本”,从而大幅降低维护成本,提高测试的清晰度。 数据驱动的灵活性:告别硬编码的时代。 为什么同一个测试用例需要针对不同的输入数据进行多次执行?数据驱动测试是解决这一问题的关键。我们将讲解如何有效地管理测试数据,无论是从CSV、Excel文件,还是数据库,甚至是如何通过API动态生成测试数据,并将其无缝集成到自动化测试脚本中。 “行为驱动”的沟通力:BDD与Cucumber的深度融合。 Behavior-Driven Development(BDD)是一种将技术人员、业务人员和测试人员聚集在一起,以一种共同的语言描述系统行为的方法。我们将深入探讨BDD的核心理念,并演示如何利用Cucumber等工具,将自然语言描述的业务需求转化为可执行的自动化测试。这不仅仅是编写自动化脚本,更是构建团队沟通桥梁的有力工具。 “面向服务”的基石:API自动化测试的精髓。 在现代微服务架构中,API是系统之间交互的命脉。API自动化测试是确保系统稳定性和互操作性的重要环节。我们将详细介绍如何使用专业的API自动化测试工具(如Postman、REST Assured等)来设计和执行API测试,包括请求构建、参数化、断言校验、以及如何进行性能和安全相关的API测试。 “可观察性”的保障:日志、报告与异常处理。 自动化测试的价值不仅仅在于发现问题,还在于能够清晰地报告问题。我们将深入探讨如何设计详尽、易于理解的测试报告,如何集成丰富的日志记录,以及如何优雅地处理和捕获自动化执行过程中出现的各种异常,从而帮助我们快速定位和解决问题。 第三部分:进阶的艺术——将自动化测试推向新的高度 掌握了基本功之后,我们还将一同探索如何让自动化测试变得更智能、更高效、更具价值。 “可视化”的洞察:UI自动化测试的挑战与解法。 Web UI自动化测试常常面临着环境不稳定、执行缓慢、维护困难等挑战。我们将深入分析这些挑战,并探讨如何通过合理的测试设计、优秀的元素定位策略、以及一些高级的工具特性来克服它们。 “混沌”的守护者:探索与探索式自动化测试。 传统的自动化测试通常是基于预设的测试用例。然而,现实世界充满了未知。我们将介绍探索式自动化测试的概念,它如何与手动探索式测试相结合,帮助我们发现那些预设用例难以覆盖的边缘情况和潜在缺陷。 “智能”的助手:AI在自动化测试中的应用前景。 人工智能正在以前所未有的速度渗透到各个领域,自动化测试也不例外。我们将探讨AI在测试用例生成、故障定位、甚至UI自愈等方面的潜在应用,并展望AI将如何重塑未来的自动化测试格局。 “云端”的翅膀:分布式与并行执行的优化。 随着测试用例数量的不断增加,单机执行的效率逐渐捉襟见肘。我们将介绍如何利用云平台或自建的Grid架构,实现自动化测试的分布式和并行执行,从而大幅缩短整体的测试周期,加速反馈。 “持续”的演进:自动化测试的度量与改进。 如何衡量一套自动化测试体系的有效性?如何识别其瓶颈并进行持续改进?我们将探讨一系列关键的度量指标,并提供一套系统性的方法论,帮助你不断优化自动化测试的投资回报。 本书旨在成为你手中一份实用而深入的指南,无论你是刚刚接触自动化测试的初学者,还是希望进一步提升技能的资深工程师,都能从中获益。我们相信,掌握了自动化测试的“道”,你将能够更自信地拥抱变化,更高效地交付高质量的软件产品,为你的职业生涯和团队的成功注入强大的动力。让我们一同踏上这段充满探索与实践的旅程,用代码为效率代言,为未来赋能。