邵杰明,热爱测试工作,10多年的测试行业经验,曾先后供职于多家世界一流软件公司担任测试开发和测试管理工作,积累了丰富的行业工作经验,拥有PMP认证,目前担任测试架构师的工作,致力于自动化测试设计、持续交付等方面的工作。
王东刚,常用网名fastpoint,资深测试专家,《软件测试与Junit实践》作者,在项目管理、产品开发和测试方面均有建树。也曾自主创业,主推专业的软件测试服务。
蒋涛,高级测试工程师,现负责雅虎两个主要移动端产品的测试工作。从Selenium 1.0时代便开始使用其进行工作,期间经历过多个国际级的大型项目,属于国内较早一批接触Selenium的人之一,拥有丰富的自动化项目经验。现在主要工作重心在移动互联网上,部署、实施、开发过多个移动平台的自动化项目。同时也是一个摄影爱好者,喜欢独自背包旅行。
本书特色
市面第一本介绍用开源测试工具进行软件测试和框架设计的图书。
对自动化测试框架层层剖析,对构成自动化测试框架的各个元素,包括基类、日志、计时、检查点、截屏、数据处理,娓娓道来,并实现了 UI/API 的分层自动化测试,更有效地应用于敏捷开发模式下的快速、灵活的持续测试。
本书对不同类型、格式的测试数据(如XML、Excel文件、数据库等数据源)的处理技术做了详细交待,能够满足不同业务数据的测试需求。
一个随手可得的案例(开源TestLink项目)贯穿其中,从单点功能到多点功能、功能操作的封装、页面封装、控件封装、数据封装,到业务与具体实现的隔离、分层处理等,各种自动化具体技术或技巧都很好地被呈现出来,让读者可以一面学习、一面实践,效果倍增。
本书构建的自动化测试框架是从底层Solvent、SeMet开始,一方面是基于Selenium+webDriver实现,基础可靠;另方面,又能脱离Selenium+webDriver,为API等其他不同技术实现的自动化测试服务。
内容提要
精通自动化测试框架设计
全书共分3部分,第1部分包括第1~8章,介绍了有关测试框架与UI自动化测试的主题。在第1章中介绍了若干种不同类型的自动化测试实践,并提出了T型自动化测试框架以及纺锤形自动化测试模型。在第2章介绍了自动化测试中如何进行数据的交互与管理,并结合实际案例列举了Java属性文件、XML、Excel、数据库以及CSV等不同的处理方式。第3章和第4章介绍如何分层构建Solvent、SeMet等底层框架。第5~8章是有关TestLink UI自动化测试框架的构建。第2部分是UI自动化框架横向拓展的主题。第3部分讲解API测试。实现了UI/API的分层自动化测试,并探讨了在敏捷模式下,通过统一框架,同一用例在不同技术实现方式下无缝切换运行的可行性和由此带来的价值。第16章介绍了Webdriver的基础概念及简单元素封装、自定义Page Object等内容。读者可以按照此书介绍的方法,根据自身工作中被测应用的实际特点,加上适当的工具,来尝试建立适合自身项目实际需求的自动化测试框架。本书是帮助读者从初学者踏上通往更高层级测试工程师的阶梯。
本书适合作为测试初学者、测试从业人员、测试经理、测试管理人员、测试开发人员的参考用书,也可以作为大专院校相关专业的师生用书和培训学校的教材。
前言
精通自动化测试框架设计
在凌晨熬夜完成年度双11采购付款任务的同时,本书也将最终交付给出版社了。不知不觉间,互联网公司从一个“搅局者”成为市场的主流玩家,影响着数亿人的生活。
而互联网公司背后的软件开发模式也逐步成为行业的主流声音。伴随着敏捷时代的到来,互联网公司更催生出了测试开发工程师以及测试架构师这些新兴的职业。而传统的测试人员则面临着转型的挑战,职业生涯也更早地遇到了天花板。许多公司甚至都不再设立“测试经理”的职位,招聘人员也开始秉承着“不会做开发的测试不是一个好测试”的理念去遴选候选人,造成了很多测试人员将“转做开发”而不是“做好测试”作为自身职业发展的一个目标。另外一个方面,一般的自动化测试人员,在熟悉了Webdriver等自动化测试工具之后,如何从一个工具的使用者,仅仅完成测试步骤的自动化翻译工作,转变成为一个工具、框架或者平台的构建者、维护者,成为使用者们的支持人员,实现自我价值的提升与组织收益的共赢?这需要从业人员有很好的业务理解能力、新技术学习能力以及持续不断地自我激励与坚持。此外,还需要一个好的机遇,能得到项目实践的机会。而能在实际工作中得到这种系统锻炼,快速从“菜鸟”成长为“老法师”的无疑都是幸运儿。
本书希望凭借着作者们多年的自动化测试实践,将自动化测试可能的一些挑战、问题与处理的方式以及方法,通过选择合适的被测应用作为案例一步步进行展示的形式,介绍自动化测试框架的搭建以及后续演变过程。读者可以按照此书介绍的方法,根据自身工作中被测应用的实际特点,糅合进适当的工具,来尝试建设适合自身项目实际的自动化测试框架,并进而走出使用者的大门,并在踏上通往更高层级的台阶中走得更好。
本书的主要内容
第1部分包括第1章到第8章,介绍了有关测试框架与UI自动化测试的主题。在第1章中介绍了若干种不同类型的自动化测试实践,并提出了T型自动化测试框架以及纺锤形自动化测试模型。本着兵马未动,粮草先行的策略,在第2章中介绍了自动化测试中如何进行数据的交互与管理,并结合实际案例列举了Java属性文件、XML、Excel、数据库以及CSV等不同的处理方式。第3章和第4章开始着手介绍如何分层构建Solvent、SeMet等底层框架。在第3章有关Solvent的构建中,提供了诸如用例基类、日志、计时、检查点、截屏、数据处理等基础功能。在第4章有关SeMet的构建中,结合自动化测试工具WebDriver以及被测应用TestLink,介绍了SeMet、TLTestCase等类的实现。
第5章到第8章则是有关TestLiink UI自动化测试框架的构建。在第5章中,笔者选取了TestLink的部分典型控件进行了封装,并提出了聚合而不是继承的UI页面切分原则。在第6章中,笔者引入了三段式页面封装法,并通过案例介绍了业务对象类、方法链、业务与具体实现的隔离、使用枚举类封装页面数据以及构建自给自足的测试用例等一些实用的方法。另外,在第6章到第8章中,分别介绍了测试项目管理、测试规约、关键字、测试用例集、测试计划、版本管理、平台、测试执行等单业务对象的UI自动化实现。在第8章中,还介绍了多业务对象之间进行交互的测试场景下的自动化实现。
本书第2部分则是有关UI自动化测试框架横向拓展的主题。
第9章关注浏览器兼容性问题,对浏览器端Web App的渲染、容错、布局等内容进行了介绍,并列举了许多兼容性测试案例。
在第10章中介绍了本地化测试的自动化课题。在提出了“一码走天下”的愿景之后,也根据实际需要介绍了一种利用轻量级数据库来存储数据字典,结合Java反射机制,完成页面定位信息动态生成的方式。
本书第3部分将引入API测试,提出多层次自动化测试的课题。
在第12章中介绍了如何使用第三方提供的TestLink Java API通过XML-RPC协议操作TestLink,并简要介绍了一种接口测试用例自动化生成的方法。在第13章中,介绍如何在SeMet层混合使用接口服务,实现局部的跨层混合自动化,在一些数据和结果验证的场景中通过用例无缝切换,实现速度和鲁棒性的大幅提升。在随后的章节中,引入了与SeMet层并列的APIMet层,从而实现了UI/API的分层自动化测试,并探讨了在敏捷模式下,通过统一框架、同一用例在不同技术实现方式下无缝切换运行的可行性和由此带来的价值。在第14章中,围绕代码管理和审查的课题,结合代码检出、提交、合并等日常工作场景,介绍了Git/Gerrit代码工具的使用。在第15章中,结合Jenkins这一持续集成工具,介绍了持续集成的各项工作、常见问题和最佳实践。第16章介绍了Webdriver的基础概念以及简单元素封装、自定义Page Object等内容,供初次接触Webdriver自动化测试的读者阅读参考。
本书的总体结构如下图所示。
最需要感谢的是我们的家人。没有他们在过去一年中默默的付出和谅解,以及不断的鼓励,本书是无法写成的。
还要感谢前同事王哲、牛锐,本书很多的内容都源自于和他们之前探讨的话题,与他们的一次次午餐闲聊最终促成了本书早期提纲的形成。感谢SPR Tracker的作者方建新对本书第1章初稿的评阅。
感谢我的合作伙伴们。依稀记得当年在杭州学院路的办公室,王东刚每周忍着烟瘾编写程序的神情。后来才知道他编著了《软件测试与Junit实践》一书,是Junit在国内的早期传播者与践行者之一。这次,他又同意将有关兼容性等最近的研究成果拿出来与大家分享。感谢邵杰明,承担了有关测试项目工程管理部分的撰写工作,在我负责撰写的章节中,也与他有着很多有益的探讨。感谢蒋涛,他欣然接受了我的邀请,撰写了有关Webdriver基础介绍的章节,而且还热心地在各大QQ群中解答各种初学者的问题。
由于作者水平有限,加之时间仓促,疏漏之处在所难免,还请广大读者批评指正。本书答疑QQ群:(516414684),编辑联系邮箱为[email protected]。
陈冬严
于上海
序
精通自动化测试框架设计
2015年国庆节长假最后一天,打开To Do List,里面显示还有一项工作没有完成,那就是应本书作者的邀请为本书写序,节前已经承诺,我会在“十一”假期期间完成这一任务。但假期快要结束了,还没有开始写,能完成吗?如果有一个机器人,我只要把想表达的主题、关键字(主要想法)告诉它,接着它就能很快帮我完成写作。最后,我只要校对一遍,稍作修改,就大功告成,那该多好啊!这样的梦想可能在不久的将来会成为现实,因为半个多月前,新闻写作机器人Dream writer就已经出现,它只花了1分钟,就炮制出了一篇新闻稿。但“序”的写作还属于高难度动作,Dream writer目前还干不了。由此想到软件测试,在软件发布前,留给回归测试的时间一般也很少,人们也希望有机器人助自己一臂之力,能够快速自动地执行测试。为此,有些著名的测试工具乐意取名为Robotium、Robot Framework,和机器人(Robot)扯上关系。在敏捷开发模式流行的今天,没有自动化就无法“敏捷”起来;没有自动化测试就无法做到持续集成,没有持续集成就不能做到持续交付。所以,人们一直致力于提高自动化测试水平,例如,在移动App的安装/卸载测试、兼容性测试、基本功能测试、“闪退”测试等方面,人们已经享受到自动化测试的云服务,需要什么测试就能获得相应的服务,甚至可以做到一键式测试,让测试自动化达到极致。
但是,当我们面对企业的软件应用产品时,其业务逻辑复杂,用户交互(UI)界面也不简单,仅仅完成基本功能的验证是不够的、也是很难的,而且需要针对各种业务场景、业务流程、业务数据等进行验证。这时,需要我们针对UI、API开发大量的自动化测试脚本,自动化测试会面对更大的挑战。虽然针对API进行自动化测试的效率高、执行稳定,维护成本也低,但没有UI的自动化测试配合,测试还不够彻底,还需要手工执行部分UI测试。所以,UI自动化测试再难,也必须克服这个困难,才能比较彻底地实现自动化测试。
本书就是从UI自动化测试入手,逐步展开各项自动化测试技术的讨论,包括面向接口的自动化测试、数据驱动的自动化脚本、兼容性测试和本地化测试的自动化实现等。全书文字流畅、幽默,案例丰富,技术也很有深度,亮点也不少,例如:
对自动化测试框架层层剖析,对构成自动化测试框架的各个元素,包括基类、日志、计时、检查点、截屏、数据处理,娓娓道来,并实现了 UI/API 的分层自动化测试,更有效地应用于敏捷开发模式下的快速、灵活的持续测试。
多数业务测试是数据驱动的,本书对不同类型、格式的测试数据(如XML、Excel文件、数据库等数据源)的处理技术做了详细交待,能够满足不同业务数据的测试需求。
一个随手可得的案例(开源TestLink项目)贯穿其中,从单点功能到多点功能、功能操作的封装、页面封装、控件封装、数据封装,到业务与具体实现的隔离、分层处理等,各种自动化具体技术或技巧都很好地被呈现出来,让读者可以一面学习、一面实践,效果倍增。
本书构建的自动化测试框架是从底层Solvent、SeMet开始,一方面是基于Selenium+Webdriver实现,基础可靠;另一方面,又能脱离Selenium+Webdriver,为API等其他不同技术实现的自动化测试服务。我们知道,Selenium是众多开源测试工具的佼佼者,2006年我就向自己的团队介绍Selenium并开始试用,将近 10 年过去了,Selenium依旧光彩照人,在与Webdriver结合之后,其能力和影响更大了,基于Selenium+Webdriver实现的自动化测试框架值得我们信赖。
本书是作者多年的自动化测试实践经验的积累,且不是停留在工具应用上,而是作为自动化测试框架的创建者、开发者来分享经验的。所以,本书不仅适合刚入门的测试人员阅读,也适合资深测试工程师阅读,在阅读时,会有思想火花的碰撞、会从中得到启发,能从中学到不少东西。本书也不仅适合测试工程师阅读,而且适合开发人员阅读,这正和目前开发的敏捷潮流吻合,未来的测试工具开发或维护工作,可能更多由开发人员来承担起来。希望本书的出版,给软件测试图书世界带来一丝清新的气流,让更多的读者能呼吸到这股新鲜的空气,舒畅快乐!
朱少民
同济大学软件学院
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
目录
前言
第1部分 构建UI自动化框架
第1章 BCO团队的自动化之旅
1.1节奥运年的新挑战
1.2节史前的自动化
1.3节五天太久,还能压缩吗
1.4节听说又有一个新框架了
1.5节冰山
1.6节再启航
第2章 测试数据管理
2.1节简介
2.2节测试数据分类
2.3节测试数据交互基本方法
2.4节使用XML文件
2.5节使用Exce
2.6节使用数据库
2.7节使用CSV文件
第3章 构建Solvent
第4章 构建SeMet
第5章 TestLink自动化测试
第6章 页面封装—从登录到测试项目管理
第7章 页面封装—测试规约的自动化
第8章 测试计划
第2部分 UI自动化框架横向拓展
第9章 Web兼容性测试
第10章 轻量级本地化测试解决方案
第3部分 Hybrid Automation—实现UI/API测试一体化
第11章 欢迎来到接口测试的世界
第12章 Hybrid Automation混合自动
第13章 iTestLink业务与技术解耦
第14章 代码的管理和审查
第15章 持续集成
第16章 Webdriver入门简介