Contract Testing - 契约测试
2016-11-02 本文已影响2348人
MoZhou
Why
多用于微服务架构,当不同服务之间需要互调API时,传统测试无法覆盖,需要通过制定一个类似通信协议(这里叫契约)来确保内部服务正常通信
What
契约测试会测试外部服务的边界,以查看服务调用的输入/输出,并测试该服务能否符合契约预期。将所有的消费者契约测试结果集合起来,有助于维护者在需要时对服务作出变更(不影响消费者),并十分有助于在定义新服务提供支持。
- 角色:消费者(Consumer) & 生产者(Provider)
- 思想:Consumer Driven (需求驱动)
- 具体实现:Consumer 端提供一个类似“契约”的东西(如json 文件,约定好request和response)交给Provider 端,告诉Provider 有什么需求,然后Provider 根据这份“契约”去实现
- 具体情形:
假设一个Provider被多个Consumer调用时,当Provider变化时,需测试对消费端得影响
消费端/生产端 服务升级时,比如由1.0升级至2.0,那么2.0要能覆盖1.0的需求测试
具体流程图How
作为数据的生产者,需要确保其提供的数据能够符合消费者的要求。作为数据的消费者,需要确保从生产者获取数据后,能够有效地被处理。
Usage
可以用Pact工具来自动化把测试生成json文件作为多个服务通信的契约
关于Pact的用法参见https://github.com/SEEK-Jobs/pact-net