技术分享 | 微服务模式下如何高效进行API测试

6d9ad816131923a0bb1f8e52d912533d.png

87b7920cdf276e8a62db1cdf80c3ca95.png

导读:微服务架构下,API 测试的最大挑战来自于庞大的测试用例数量,以及微服务之间的相互耦合。基于这种挑战,如何进行高效的API测试,选择什么样的方式就比较重要,此文主要是采用契约测试的方法来对微服务模式下的API测试做简要的阐述。

一、背景

集成开放平台由1个云端管理中心+N个后台服务组成(连接中心、接口中心等),云端管理中心与后台服务存在1对多的API调用关系,而服务与服务间也存在多对多的API调用关系。如何高效精准的保障这些接口调用稳定,结合行业内接口测试方法和微服务模式下的接口测试,我们总结了一套集成开放平台的API测试方法:契约测试。

3bbcd7e5052cba44fe7675df82838ed4.png

二、契约测试与传统API测试的不同

2.1 传统的 API 测试策略

在传统的 API 测试中,我们的测试策略通常是:

1. 根据被测 API 输入参数的各种组合调用 API,并验证相关结果的正确性;
2. 衡量上述测试过程的代码覆盖率;
3. 根据代码覆盖率进一步找出遗漏的测试用例;
4. 以代码覆盖率达标作为 API 测试成功完成的标志。

2.2 基于消费者契约的 API 测试(后面简称契约测试)

而服务拆分之后,API 接口数量将成倍增加,此时需要找到一种既能保证 API 质量,又能减少测试用例数量的测试策略。即基于消费者契约的 API 测试。
如下图,基于消费者契约的 API 测试的核心思想是:只测试那些真正被实际使用到的 API 调用,如果没有被使用到的,就不去测试。
2dbc698551dd388ec88797538086ebef.png

看上图大家可能对契约测试还是比较模糊,下面我举个实例进行详细讲解。

案例:连接中心提供了创建连接的API给云端管理中心,我们需要对创建连接的API进行接口测试。

传统的接口用例设计如下:

5df018370c269eaa459e62d0b416cd45.png

2.3 契约测试的用例设计如下:

128309dc65841b8ea865bd71c440ee42.png

从上面两幅图可以清晰的看出,契约测试抛弃了异常场景的验证,契约模式下,传参可定是合法的。

从上面两幅图可以清晰的看出。契约测试做了如下改变:

1.抛弃了异常场景的验证,契约下,传参肯定是合法的。不需要额外进行验证。

2.对接口提供方的业务逻辑做了场景合并处理,不关注里面的业务逻辑,重在验证契约的功能是否正常。

2.4 契约测试、单元测试、接口测试区别

API测试和单元测试,更强调的是覆盖API内部逻辑。

契约测试,更强调是组件之间连接的正确性,除了保证组件内部,还要保证组件间的调用是正确的,也就是服务API之间的调用。

单元测试单元测试针对代码单元(通常是类)的测试,单元测试的价值在于能提供最快的反馈。另外好的单元测试还可以帮助你改善设计,在你的团队掌握TDD的前提下,单元测试能辅助重构,帮助改善代码整洁度。
API测试API测试是针对业务接口进行的测试,主要测内部接口功能实现是否完整,比如说内部逻辑是不是正常,异常处理是不是正确。
契约测试契约测试其实是为了测试服务之间连接或者说接口调用的正确性,为了验证服务提供者的功能是不是真正能够满足消费者的需求。它其实体现了测试前移的思想,把本来要通过集成测试才能验证的工作化作单元测试和接口测试,用更轻量的方式快速进行验证。关注点是consumer是否可以正确的消费provider的API,这里的"消费"包括调用接口和解析数据。它的被测对象,注意,一定是consumer。
集成测试它从用户的角度验证整个功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个过程是不是OK,它的价值业务价值最高,是验证一个完整的流程。


2.5 契约测试带来的好处

降低服务集成的难度,把服务集成这个过程分解成了单元测试和接口测试来做,它从消费者的需求为出发点,把消费者的需求作为你的测试用例驱动出一份契约,然后验证提供者端的功能。

通过使用契约测试,接口调用双方协商接口后就可以并行开发,并且在开发过程中就利用契约进行预集成测试,不用等到联调再来集成调通接口,一旦成熟,在保证质量的前提下,联调的成本可以减低到几乎为0。

三、总结及适用场景

契约测试相对传统接口测试来说,很大程度上缩减了测试场景,使测试更聚焦于客户实际应用场景。但是缺点也很明显,一旦消费者毁坏契约进行非法的参数调用时,就会导致生产者出现不可预知的异常,甚至会导致宕机的发生。为此我梳理一下适用的场景,请慎重选择。

场景描述

是否适用

1.微服务内部接口,不对外开放

2.微服务前后端调用接口,有指定身份认证

3.微服务间相互调用接口,不对外开放

4.微服务对外指定接口,有指定身份认证

5.微服务对外公开接口

×

6.微服务对外指定接口,涉及核心业务场景

×

------ END ------

作者简介

吴同学: 测试工程师,目前负责集成开放平台的测试工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值