
前言
自动化测试已经成为软件测试行业的一个重要领域,在大部分公司的面试及项目实践中几乎都会涉及自动化测试,因此自动化测试已经成为测试人员的必备技能。
2011年,笔者接触了第一个自动化测试工具DeviceAnywhere,该工具将真实手机置于云端,通过录制回放执行自动化测试用例,最后采用图片对比技术实现断言。次年,笔者开始使用Python和monkeyrunner编写基于Android的界面自动化测试用例。时间转瞬即逝,笔者和自动化测试结缘已近10年。在此期间,笔者负责过大型自动化测试项目的用例维护,也负责过整个公司自动化测试的实际项目落地。基于多年对自动化测试技术的积累,笔者希望能够将这部分经验总结并分享给大家。
根据笔者多年自动化测试的工作经验,大多数自动化测试人员仅仅停留在简单的脚本编写阶段,在如何提高自动化测试的建设效率、执行效率和维护效率等方面非常欠缺。针对这种现象,笔者开始编写本书,旨在提升测试人员自动化测试能力。本书共包含12章,其主要内容如下。
第1章介绍示例应用程序的部署,并以一个自动化测试用例为引子,以此引申出自动化测试领域中的多个热门专题。
第2章以模块化和函数库的方式对测试用例进行分层,介绍了工程内、跨工程的代码复用策略,最后介绍了对于大型自动化测试项目适用的精细化测试用例分层思想。
第3章详细介绍了TestNG和JUnit的参数化测试,并介绍了如何使用CSV、Excel、Properties、YAML和数据库作为数据源。
第4章首先介绍关键字的概念,然后介绍了Robot Framework的关键字,包括标准关键字、外部关键字、自定义关键字、用户关键字及关键字的优先级,最后介绍了如何自己实现一个关键字驱动测试框架。
第5章首先介绍Page Object设计模式的概念,然后介绍了两层和三层建模两种不同的建模方式,接下来介绍了Selenium对Page Object设计模式的支持,最后对Page Object设计模式提出优化建议。
第6章从Java线程休眠开始介绍自动化测试用例中的等待,然后详细介绍了Selenium中的隐式等待和显式等待。另外,在显式等待章节中还介绍了如何实现自定义的等待条件。
第7章从Java断言开始介绍自动化测试用例中的断言,然后详细介绍了TestNG和JUnit的断言,最后介绍了AssertJ和Hamcrest两个断言函数库。另外,在Hamcrest一节中还介绍了如何实现自定义的匹配器。
第8章首先介绍TestNG的测试报告(包含内置测试报告和自定义测试报告),然后介绍了目前流行的两个第三方测试报告框架Extent Reporting和Allure,最后介绍了如何实现邮件发送客户端及发送测试报告。
第9章详细介绍了测试替身,测试替身分为Dummy、Stub、Spy、Mock和Fake这5种,对于自动化测试而言,最常用的是Mock,因此在Mock一节中详细介绍了其在单元测试、HTTP接口测试和Dubbo接口测试中的运用。
第10章介绍了多种方法用于提高自动化测试的执行效率,包括使用无头浏览器、TestNG或JUnit进行并行执行和使用Selenium Grid进行分布式执行。
第11章首先对持续集成、持续交付和持续部署的概念进行陈述,然后使用流行的开源工具Jenkins介绍如何实现持续集成、持续交付和持续部署,最后介绍了一些其他常用实践,包括邮件通知、多节点构建和集成第三方测试报告。
第12章简述了本书未涉及的一些前沿领域,包含自动化测试平台、容器化和人工智能。
本书既不讲编程语言,也不讲自动化测试的基础,而是通过实际的自动化测试用例来提炼当前自动化测试领域的热门主题,并以主题形式贯穿全书。其中的知识点对提高自动化测试的建设效率、执行效率和维护效率均有较大的指导意义。
本书适合有一定编程语言和自动化测试基础的中高级测试工程师、自动化测试工程师、测试开发工程师以及自动化测试管理者阅读。
● 对于中高级测试工程师:具备一定的编程语言和自动化测试基础,可通过本书提高自动化测试能力。
● 对于自动化测试工程师:通过本书可更加深入地掌握自动化测试,摆脱只会编写自动化测试用例的初级水平。
● 对于测试开发工程师:可参考本书中的一些设计思想和理念,以便搭建更好的自动化测试框架。
● 对于自动化测试管理者:了解自动化测试实施过程中的常见问题及解决方案,为自动化测试实际项目落地提供帮助。
本书的编写及出版离不开大家的支持和帮助,笔者在此一一表达谢意。
感谢妻子的理解和支持,让我能全身心地编写本书。
感谢“老大”(陈恒骥)给我进入软件测试行业的机会,如果没有这个机会,我不可能在这个行业走得这么远。
感谢编辑秦菲的耐心指导,让本书得以顺利出版。
由于笔者水平有限,书中难免有不足之处,恳请读者批评指正。您可通过微信公众号(自动化测试理论和实战)联系我,谢谢!另外,您还可以在我的GitHub(https://github.com/lujiatao2)中找到本书的示例源代码,或关注机械工业出版社计算机分社官方微信订阅号——IT有得聊,回复67316获取。
卢家涛
2020年11月4日