本书从实战出发,介绍微服务架构所带来的测试方面的挑战,以及如何利用新的技术来应对这些挑战。通过本书,读者可以学会如何编写微服务架构下的单元测试、组件测试、集成测试以及契约测试。在此过程中还会用到Arquillian、ShrinkWrap、Pact、Selenium、Docker、Hoverfly 等多个帮助测试的工具和框架。书中涵盖大量的代码和样例,可以帮助读者快速上手,并在自己的实际工作中应用这些技术。
本书适合有一定Java 基础的开发和测试人员,对使用其他编程语言的开发者也会有一定的帮助。
突破持续交付终极瓶颈 全方位提升测试覆盖率 探秘微服务测试工具|技术全景
译者序
微服务架构的理念日渐深入人心,然而隐藏在其架构优势下的还有对传统软件开发模式的强烈冲击。如何在测试环境中部署种类繁多的微服务?如何对复杂的交互、多样的场景进行完整覆盖?单元测试、组件测试、集成测试以及端到端测试又有怎样的不同?有没有专门针对微服务架构的测试框架和工具?本书就将告诉你上述问题的答案。
本书介绍了大量Java 微服务测试领域最为前沿的技术。本书从微服务架构讲起,介绍了测试在这种新型架构下所面临的问题和挑战,之后逐一介绍了单元测试、组件测试、集成测试、契约测试和端到端测试领域针对这些问题和挑战的应对方法。本书还提供了一个完整的微服务应用作为样例,从代码层面介绍如何编写不同领域的测试,给作者提供了上手实践的方法。本书的几位作者都是在测试领域内耕耘多年的老兵,相信他们宝贵的经验能给你带来收获。
本书主要介绍Java 微服务测试,但是其中的方法和理念对于使用任何一门编程语言的开发和测试人员都会有很大的帮助。希望本书能够帮助你更好地改善工作中开发和测试的流程,提升整体的代码质量。
愿你的程序永远不出bug。
序言
在编程的早期是没有任何框架的,测试散落在代码的各个角落,以确保重要的软件功能的确是经过测试验证的。在那个时候,存储空间是十分宝贵且有限的。
后来,单元测试从一个流行概念演化成了软件测试事实上的标准。存储空间的问题也得到了很大的缓解,再也不能成为不编写测试代码的借口。如今,几乎所有的开发者都已经早早开始学习并使用单元测试的方法,并且单元测试已经成为软件开发成功的基础。
今天的企业级应用已经不可能仅依赖简单的单元测试来保证功能的完备。如今的客户也变得更加苛刻,要求也越来越高。如果企业想要充分满足客户的要求,就需要在开发的过程中使用多种测试策略。
本书一方面介绍如何解决当下企业测试的问题,另一方面介绍如何应对未来将微服务引入应用架构所带来的测试挑战,这将会给读者带来更大的价值。
我们花了很长时间来编写本书:最初它只是一个关于某个框架的小册子,现如今它已经成为一个介绍大量测试策略供读者选择的具有10 章且内容丰富的图书。随着技术的不断演进,我们在这个过程中收获颇多。为了能给读者提供尽可能多的选择,我们尽可能地聚焦于策略、方法论和解决方案,而不是简洁的代码和看起来令人兴奋然而最终却不可用的应用。如果通过本书你可以对如何测试自己的应用有新的想法,那么我们的目的就达到了。
我们十分感谢你愿意花时间来读这样一本书,希望你能够喜欢我们的写作风格。
致谢
本书由3 位独立开发者完成,在这里让我们感谢彼此的理解和支持,感谢每个人的辛苦工作和反馈。
十分感谢Arquillian 项目的每一位参与者,尤其是Aslak Knutsen、Dan Allen、Bartosz Majsak 和Matous Jobanek。在你读完这本书的时候,就会了解他们在这个伟大的项目上投入了多少精力,以及这个项目会如何显著地帮助你改善软件测试的质量。
开源软件(OSS)社区提供了很多极其有用的工具来帮助每个人更有效地进行测试。这些项目中的大部分都是由那些不知疲倦且无人知晓的开发者在他们的空闲时间完成的,在这里我们要表达对他们这份难能可贵工作的敬意。我们同时希望作为读者的你,也能够在每个合适的机会对这些“不可思议”的开发者表达谢意。
感谢Daniel Bryant 和Marcin Grzejszczak 花费时间对契约测试部分进行讨论。
在我们徘徊不前之际,Cynthia Kane 和Tiffany Taylor 两位编辑给我们提供了前进的动力,帮助我们完成了这个工作。利用空闲时间写书是一项很有挑战性的任务,十分感谢Cynthia 和Tiffany 帮助我们完成了这项任务。同时也要感谢帮助这本书从可能变为现实的Manning 出版社的每一位工作人员:出版者Marjan Bace 以及相关编辑和产品团队。
Joshua White 提供了大量技术上的论证,感谢他解决了本书质量上的问题。他对我们的测试进行了测试!
感谢每一位花费时间阅读并提供反馈的读者,他们帮助我们完成了最终的图书产品。这些读者包括我们的技术同行评审员:Aleksandar Dragosavljevic′、Alex Jacinto、Anshuman Purohit、Boris Vasile、Conor Redmond、Eddú Meléndez Gonzales、Ethan A. Rivett、Fabrizio Cucci、Gualtiero Testa、Henrik L?vborg、Jan Paul Buchwald、Jonathan Thoms、José Díaz、Kiran Anantha、Leo van den Berg、Mari Machado、Nilesh Thali、Piotr Gliz′niewicz、Robert Walsh、Yagiz Erkan 和Zorodzayi Mukuya。
最后,要感谢家人帮助我们度过了写书过程中一个个漫长的周末以及交稿前的忙乱和写作过程中无数起起伏伏的时光。没有你们的支持,我们将无法完成这项任务!
关于本书
如今,测试已经成为每个开发者在软件开发过程中必不可少的一部分。然而原来并非如此,测试框架是在软件开发出现很长时间之后才出现的。由于现在已经有了足够多关于为什么需要进行软件测试的理论,因此本书并不会关注这一部分。对我们来说,如何进行软件测试以及如何将这个理念带给其他人是更为重要的话题。本书主要关注如何测试这一部分,并提供了应用代码的示例以帮助你快速上手。
本书中的很多内容都可以在互联网上找到,然而在人们真正需要去寻找这些资料的时候,却常常并不一定能联网查阅,即使联网也不一定能及时搜集或找到所需的内容(或者特意选择不联网)。如果使所有这些人们需要的信息汇聚到一起供人直接查阅使用,那将是非常方便的事情。我们希望本书就可以作为这样一种资源。
测试是一个相当通用的术语,但同时测试也是一系列技术的组合,如果想发挥它的最大威力,你需要对相应的技术进行很好的组合。我们收集了大量的热门主题和组件,并且将其以一种最为合适的方式进行组织并展示给读者。
谁应该阅读本书
我们很想说“所有人”都应该阅读本书,然而实际并非如此。我们的目标用户是企业级的Java(Jave EE 和 Spring)应用开发者。如果你就是这样的开发者,那么本书将会帮助你更深入地进行单元测试。
如果你并不是一个专门的Java 开发者,本书依然可能包含你感兴趣的内容。本书提供的大部分信息都是和编程语言无关的,并可以应用于多个不同的领域。
正如书名所示,我们的关注点是正在不断兴起的以微服务为基础的架构。但是我们也提供了大量和更通用的企业级测试相关的信息,因此不必担心本书遗漏了这些内容—书中只是更深入地介绍了微服务相关的内容。
路线图
本书分为10 章,下面是所包含内容的速览:
? 第 1 章介绍与微服务相关的术语以及为什么要使用微服务。
? 第 2 章介绍阅读本书预先需要掌握的知识以及如何构建代码,帮助你在阅读本书之后的过程中节省时间。
? 第 3 章会带你快速浏览通用的单元测试技术、方法论以及最佳实践。
? 第 4 章深入介绍 Arquillian 测试框架。
? 第 5 章展示如何创建一个相互依赖的微服务应用的集成测试。
? 第 6 章讨论消费者驱动的契约测试。
? 第 7 章探索端到端测试技术和工具。
? 第 8 章介绍利用Docker 创建可复用的测试环境。
? 第 9 章探索服务虚拟化的概念和实现。
? 第 10章讨论持续交付和使用 Jenkins构建流水线。
我们以一种循序渐进地介绍各个基本主题的方式来安排章节的顺序。每一章都会承接上一章的内容,当然你也可以按照自己的兴趣来安排阅读的顺序。本书选择 Java 作为实现示例的编程语言,但是本书所讨论的原则可以被应用到其他语言和框架中。