接口测试往往不是简单的使用接口调用工具(postman、gotest 平台)调用一下接口就能测试完成。特别是对于一些逻辑复杂的偏底层服务,场景如何设计、数据构造如何设计更是一个 QA 技术能力的体现。本文通过分析 NDC 项目功能和测试重点,展示了该项目接口测试过程中场景设计、数据构造服务实现的思路,以期给更多的偏底层服务项目做一些接口测试设计参考。

NDC 项目介绍
NDC 全称为 Netease Data Canal,是网易大数据平台组研发的一套用户结构化数据同步和数据订阅的中间件系统。以上定义可简单理解为 NDC 是一个用于不同的数据组件之间进行数据同步和订阅的中间件系统,例如支持从 Mysql 同步到 Hive、从 DDB 订阅到 Kafka 等等。主要应用场景有数据库在线扩容、机房数据实时同步、数据驱动业务、OLAP 数据整合等。NDC 应用的一般步骤为在 WEB 管理平台创建一个源端到目标端的同步/订阅任务,配置需要同步的表和字段及其他参数,启动任务开始数据传输。因此项目测试的主要侧重点在于:

项目测试特点

测试实现
1.测试选型:
NDC 项目的底层实现是 RPC 接口。最近上新 NDC2.0 版本,上层使用 HTTP 接口调用 RPC 接口提供给前端调用。之前有 QA 同学在 RPC 框架基础上基于 testng 完成了一系列测试用例,但是 testng 的实现存在不方便长链路场景维护、可校验的数据项过少、用例维护性差、测试场景单一等特点。同时项目组也希望测试能做到到端测试,因此决定采用我们的 GoAPI 平台 + 数据构造服务,完成 HTTP 接口层服务测试。与 testng 的 RPC 层测试相比,HTTP 接口测试使用 GoAPI 平台进行场景用例整合,并实现单独的数据构造服务完成数据构造、清理等辅助测试步骤,具有以下优势:

2.场景用例框架:
基于 NDC 项目的使用场景,可梳理下图的测试框架,二三层模块是项目 API,它们的自动化实现需要向上依赖,最终依赖于数据构造服务的数据准备操作和清理功能。

3.GoAPI 化数据构造服务设计:
数据构造服务主要需要完成源端/目标端建表删表、表结构/表数据增删改查等操作。由于数据库操作具有不确定性,建表修改表结构语句(例如 Hive)执行过程较慢,且表数据操作可能需要持续进行,故使用异步操作。实现逻辑如下图所示,建表请求中为方便测试数据结构的不同类型,实现了随机类型列生成器生成列类型;经过参数检查、建表语句生成后,直接返回请求结果,并通过异步操作完成建表删表等操作;同时为方便用例执行完成后删表,每生成一个任务的表信息会保存在内存 jobInfoMap 中,在收到删表的 http 请求后,从内存中获取信息完成删表操作。

目前已支持的功能有:

4.场景用例实现
完成数据构造服务设计实现后,即可在 GoAPI 上构造场景完成测试。下图是一个场景测试的示例,大概流程为调用数据构造服务接口建表、插入等待时间等待并发建表完成、调用项目接口创建任务、启动任务、调用测试服务接口启动对表的持续增删改查、启动 GoAPI 的轮询机制查看任务运行信息、调用项目接口校验任务详情列表等信息、停止删除任务、调用测试服务删除表完成数据清理。


↙↙↙阅读原文可查看相关链接,并与作者交流