自动化测试时候,我们需要做集成测试。
此处的集成测试说的是服务提供者是否符合服务消费者的预设的请求需要的响应,这些预设的请求和响应组就是契约。
有几种办法:
1 端到端测试
把比如A和A依赖的服务(包括依赖本身的依赖)以及数据库等全部部署好,然后进行测试,然后输入预设的请求,检查响应信息
缺点:
1) 把比如A和A依赖的服务(包括依赖本身的依赖)以及数据库等全部部署好,增加了测试的复杂度
2) 依赖的所有数据库的数据都需要准备好(数据存在,以及多数据库数据之间的关系)
3) 测试时间长
4) 稳定性差,如调用链某一环出错了,可能并不是bug,但是失败了,特别是和第三方对接的服务
2 mock
在消费方mock一个provider,再provider放mock一个consumer,针对同一份测试数据进行测试,这样自动化测试时候就不需要网络io了
缺点:
1) 提供方和消费方无法适合度不好
2) 无法获知无用的api
往往我们的开发是由服务提供方来定义api,导致了提供方并不知道他的上游有哪一些,而且提供方也并不知道消费方真实的需求
cunsumer driven contract test 旨在解决这个问题
当消费方已经不需要这个api的时候,提供方测试时候会有提示
消费方明确自己的需求
开源的方案有:
https://github.com/pact-foundation