质量内建2.0,从自働化到及时化:契约测试,接口随时一致

定义

契约测试是一种以自动化测试作为技术手段,解决团队间因存在明显沟通边界,由沟通不畅和代码变更而造成的系统间接口不匹配问题的最佳实践。

56d65e791afb6d2fe482a4be26c45d61.jpeg

通过测试驱动生成服务间的契约文档,利用该契约文档和Mock Server(银行业常称之为“挡板”)分别对契约的消费者和提供者进行自动化测试,以确保双方能够按照契约实现满足规格要求的接口,并利用持续集成流水线实现对双方变更影响的快速反馈。

契约测试是基于契约或者使用契约来测试被测系统,其核心是契约,包括如何制定契约,如果更改契约以及如何使用契约等。首先定义契约必须有 API 的消费者(Consumer)和 API 的提供者(Provider)两端,其次契约还要包含这个 API 的 Request 和 Response 的定义细节,见下图:

4a44c899d71ebd106a71d50437d3c498.png

场景

然后再分别使用这个契约里面的内容生成测试用例来测试消费者者对于 Web API 消费代码和提供者对于 Web API 的实现代码,见下图:

8ead8da0aaf4dc37aa9ee6f56ec50837.png

框架

如果要实践契约测试,首先要沟通契约,并且编写契约。首先沟通契约一般有两种方式,一种是提供者驱动(Provider Driven),另一种是消费者驱动(Consumer Driven)。而编写契约的方式也有两种,一种是使用工具手动编写契约;另外一种是使用特定的契约测试框架或者工具,然后编写代码来动态生成契约。业界最常用的三个契约测试框架是 Pact,Swagger 和 Spring Cloud Contract。其中 Pact 是一个支持多种语言的框架,包括 Java,JavaScript,Golang,#C 等多种语言开源免费框架,主要通过编写测试代码来动态生成契约,并主要用于消费者驱动契约类型的测试;而 Swagger 主要是通过手动编写契约来做提供者驱动契约类型的测试;最后 Spring Cloud Contract 主要用于基于 Spring 框架开发的 Web 系统,也是主要通过编写测试代码来动态生成契约来做消费者驱动契约类型的测试。并使用契约生成相应的测试用例和自动化测试。其次,当生成了大量的契约之后,一定要集中化的管理契约,并且最好能可视化出来,如下图:

3a52816ae2e43a0301668032f435c6c2.png

步骤

契约测试实施的主要步骤总结如下:

  1. 制定明确的契约沟通,设计和变更流程

  2. 各服务开发团队之间必须同意并遵守此流程

  3. 集中化管理契约

  4. 可视化展现服务的依赖和调用链

  5. 自动化契约测试并加入持续构建流水线中

参考公众号:

胡皓老师 枪炮与代码

刘冉老师 刘冉的思辨悟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值