契约测试(下):对契约测试的思考

关于契约测试的必要性?

微服务架构中的服务通常是分布式、独立部署运行、很多服务是异步通信的。因此,服务之间的接口协议一致性是非常重要的。契约测试是测试协议一致性的一种方法,用于验证不同服务之间的接口协议是否一致。下面是微服务架构进行契约测试的几个原因:

1. 帮助识别服务间的协议不一致性:在微服务架构中,不同服务之间的接口协议可能会经常发生变化。通过契约测试,可以帮助发现这些变化,并确保各服务之间的接口协议保持一致。

2. 减少集成测试成本:在传统的单体应用程序中,集成测试可以在应用程序内部进行。但是,在微服务架构中,不同服务之间的集成测试可能会非常复杂。通过使用契约测试,可以确保服务之间的接口协议一致性,并减少集成测试的成本。

3. 促进服务之间的解耦:通过契约测试,可以确保服务之间的接口协议一致性,并帮助服务提供者和使用者独立地开发和部署服务,这有助于促进服务之间的解耦。

4. 帮助保持服务的稳定性:通过契约测试,可以确保服务之间的接口协议保持一致,确保服务稳定,并减少因接口变化而引起的问题。

虽然契约测试是一种有效的测试方法,然而并不是所有的项目都需要进行契约测试。

如果项目的API所有者和消费者在同一个团队中,并且对API的输入和输出、期望行为有着清晰的约定,并且API版本更新不频繁,那么可能不需要进行契约测试。在这种情况下,可以使用传统的单元测试、集成测试等测试方法来验证API的正确性和稳定性。

另外,从测试者的角度看,我们还是需要对过往的缺陷分布进行分析,统计下由契约问题导致的缺陷占的比重,如果比重较低,其实不用重点建设契约测试能力,毕竟契约测试的成本相对比较高。

关于契约测试和Mock测试的区别?

Mock测试是一种测试方法,它将被测试的模块(例如类或方法)替换为mock对象,以便能够控制测试过程中的输入和输出。Mock测试主要关注被测试的代码与其依赖模块之间的交互,通过mock依赖模块的行为来测试被测试模块的正确性和稳定性。

契约测试是一种测试方法,它主要关注应用程序内部的模块之间的协议。通过定义契约文件,描述消费者和提供者之间的协议,并基于这些契约文件生成测试用例来验证消费者和提供者之间的协议是否正确。契约测试可以确保消费者和提供者之间的接口在变更时不会出现问题。

下面是Mock测试和契约测试的一些区别:

1. 测试的重点不同:Mock测试主要关注模块之间的交互,而契约测试主要关注模块之间的协议。

2. 测试方法不同:Mock测试使用mock对象来控制测试过程中的输入和输出,而契约测试一般通过定义契约文件并生成测试用例来验证协议。

3. 对象替换方式不同:Mock测试将被测试的模块替换为mock对象,而契约测试不需要替换模块。

4. 测试覆盖面不同:Mock测试通常只覆盖模块的一部分,而契约测试通常覆盖整个应用程序的协议。

契约测试的实现步骤

1. 确定契约范围:确定需要测试的API接口,以及消费者和提供者之间的契约,包括输入和输出的格式、数据类型、异常处理等方面。契约可以使用OpenAPI规范(如Swagger)来定义。

2. 编写消费者契约测试:编写测试用例覆盖消费者与提供者之间的契约。

3. 编写提供者契约测试:提供者契约测试旨在测试API提供者的实现是否符合契约。提供者契约测试需要与消费者契约测试相匹配,并测试API实现是否正确。

4. 实现自动化脚本:将消费者契约测试和提供者契约测试转化为自动化测试脚本,这些脚本可以模拟输入并验证输出是否符合契约。可以使用测试框架(如JUnit、TestNG、Pytest等)编写这些脚本。

5. 集成到持续集成/持续交付(CI/CD)pipeline中:将自动化契约测试脚本集成到CI/CD pipeline中,以确保在每次部署之前都运行这些测试。

6. 持续维护:持续维护契约测试脚本,以确保它们与契约保持同步,并且可以覆盖新的功能和错误处理场景。

关于契约测试的难点

去年有段时间大量精力花在契约测试用例开发上,对契约测试实施的难点深有感触。

1. 维护成本高:契约测试需要编写大量的测试用例和维护代码库,涉及到接口的变更或者新增时需要及时更新契约测试用例和契约文件,相对于接口测试而言,其维护成本相对较高。

2. 接口多样性:不同的接口可能有不同的参数类型、返回类型、请求方式等,需要针对不同类型的接口设计不同的契约测试用例。

3. Mock数据难度大:契约测试需要mock接口的请求和响应数据,但是有些场景下需要mock的数据比较复杂,比如某些接口需要用到其他系统的数据,这时候需要设计一些复杂的数据mock方案。

4. 契约版本控制:契约文件需要与代码库进行版本控制,确保契约文件的版本与代码库中的版本保持一致,否则可能会出现契约测试与实际接口不一致的情况。

但是目前针对如何降低契约测试成本这块还没有行之有效的idea,其中mock数据这块可以通过开发自动化mock数据工具实现,对预期输入输出报文进行数据结构/格式(以Java为例,json转对象、转jsonString等)。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

软件测试面试文档

我们进阶学习自动化测试—测试开发必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

面试文档获取方式:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值