毕业于复旦大学,先后就职于微软,中国建设银行,和澳大利亚最大的房产网站 REA Group,负责研发团队管理和架构设计,同时在澳大利亚 RMIT 大学任客座讲师。REA 和 ThoughtWorks 西安采用“协力式外包”(Co-sourcing)的合作方式,在西安有约 100 多人的交付团队。我于 2013 年外派回国,在 ThoughtWorks 西安办公室工作,主管团队建设,技术架构和开发管理。对微服务架构,持续交付,自动化测试,DevOps 和远程互联网团队管理有丰富的经验。
随着微服务架构的不断普及应用,组织架构也随之演变改进,企业内组成很多个小而美的全功能团队。他们每天开发和部署多个不同的服务,每个服务相对独立。这给传统的集成测试带来了很大的挑战。
传统的集成测试的特点:
Ian Robinson 最先提出了用消费者驱动的契约进行面向服务开发的模式,我们公司基于这个模式开发了 Pact 测试框架(https://github.com/realestate-com-au/pact)目的是用轻量级的契约测试来代替厚重的集成测试。它的实现原理是:
在消费端用单元测试的形式(更轻)来生成 pact 契约。服务端通过验证契约来保证两者稳定集成。
现在这个框架得到了很多公司的广泛应用,从最先的 Ruby 版本到现在大部分语言的支持(包括 Java,Scala,.Net,JavaScript,Go,Swift 等)。 同时也开发了一些工具比如 Pact Broker,用来存放契约,和 CI 集成,新的契约能自动触发服务端的 build。目前我们还在尝试跟 Swagger 的集成。
在本次演讲中,我先从阐述微服务架构中的集成测试痛点开始,引出我们的框架,解释它实现的原理,然后现场演示一些实例。同时也顺带分享我们的一些实践经验。