一、背景
当前公司技术架构正处于向微服务化转型的关键阶段。相较于传统单体架构,微服务通过细粒度服务拆分实现了独立开发部署,有效提升业务扩展性。
从测试角度来看,制定好服务端相关测试策略,能够更早介入测试,更早的发现问题。这里总结下我落地的服务端测试策略。
二、测试策略模型的选择
- 面向微服务测试,需要测试分层,每一层的测试颗粒度有所不同。选取测试策略模型一定要基于现实情况的痛点出发,结果导向,通过调整测试策略来解决痛点。
- 模型演进过程是金字塔 → 近似钻石(除非功能测试外,类似于钻石模型)→ 蜂巢。
三、服务端的元素及测试策略
后端服务有以下几个测试元素以及对应的测试策略。
(1)对外接口
- 场景模拟方式:接口
- 测试策略:接口层可分为输入(Input)、业务处理(handle)、输出(Output)3个维度。
- 输入(Input):
1)必填项校验
2)数据类型校验
3)时间戳
4)输入参数是否满足调用方。
5)接口定义的调用方法是否方便。
6)身份秘钥及敏感信息校验。
- 业务处理(handle):
1)约束条件(数值限制、状态限制、关系限制、权限限制、时间限制)
2)数据类型校验(int、string、bool、列表字典)
3)时间戳(负数、足够大、足够小)
4)输入参数是否满足调用方。
5)接口定义的调用方法是否方便。
6)身份秘钥及敏感信息校验
- 输出(Output):
1)不安全的路径输出
2)敏感信息加密(身份证、密码、银行卡等不能直接明文返回)
3)文档对齐(正常的输出参数、是否有额外参数未体现、值正确性)
4)输出参数是否满足调用方
(2)三方与内部交互接口
- 场景模拟方式:模拟三方服务的处理
- 测试策略:被测服务与三方服务交互异常的情况。
- 被测服务请求依赖服务的协议正确性
- 依赖服务返回超时
- 返回处理异常情况(包括状态码、返回体)
- 依赖服务宕机(网络问题、运维问题)
- 依赖服务的数据处理情况(空数据、单数据、多条数据)
(3)数据存储
- 场景模拟方式:接口、db
- 测试策略:
- 正常的数据读写功能(增删查改)
- 数据一致性校验
- 缓存机制的校验
- 服务器资源利用率
(4)服务端稳定性、高可用
- 场景模拟方式:接口性能测试
- 测试策略:
- 稳定性测试策略:长时间的性能测试,观察cpu使用率、内存使用率是否有递增,事务失败率是否异常,tps是否有波动。
- 高可用测试策略:服务需要保证所有异常场景都被处理,所以测试用例的测试颗粒度需要尽可能的细,比方说所有入参校验、服务交互异常、压力测试观察服务状态、服务升级回滚机制等场景。
(5)服务端安全性场景
- 场景模拟方式:接口、db
- 测试策略:
- 请求协议在不加密的情况下是否能请求成功
- 返回协议是否有加密处理
- 加密的方式是否严谨,容不容易被他人解开
- 加密后的数据服务端侧是否能够正常解析
- 加密后的消息体是否具备时效性
(6)环境监控,日志采集
- 服务监控手段:环境实例监控、日志采集
- 测试策略:
- 环境监控:观察服务的性能指标、实例状态。
- 日志:采集埋点数据和服务运行日志,如线上出现问题以便于快速定位并解决
(7)服务端启动配置项
- 场景模拟方式:启动配置项修改
- 测试策略:
- 故障演练。应用存在多个实例,其中一个实例异常时,是否会影响其他实例的正常运行。
- 数据升级测试。由测试进行数据升级测试,新版本有对应的表结构,测试需要关注升级的数据是否向上兼容,根据上线步骤会不会影响的历史版本数据的处理。
- 服务回滚测试。需要模拟服务上线后,校验对应的回滚策略,通常只需要评估回滚策略是否平滑,会不会影响到之前的用户数据