接口测试 NDC 项目接口测试服务设计实践

孙婷婷 · 2019年08月15日 · 1370 次阅读

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

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

  • 校验同步/订阅任务的执行正确性
  • 不同数据组件/不同数据类型的支持度
  • 不同组件的表操作/数据操作(增删改查)的功能支持
  • 数据传输的完整性
  • 其他参数配置下任务执行正确性

项目测试特点

  • 测试场景链路长:一个完整的 NDC 任务操作流程主要由创建任务、启动任务、等待数据迁移、校验数据同步组成。如果从测试的角度来看,整个场景链路则还要包括准备源端数据、等待迁移时增删改查数据和表结构、校验源端状态、校验任务多项状态、任务停止和删除、源端和目标端数据删除等步骤。
  • 时间长稳定性差:任务状态变更的不确定性及数据迁移速度的不稳定性,决定了场景的执行时间不确定,用例可能需要等待和轮询请求查看是否到达预期。
  • 场景步骤并行:为更贴近线上任务的真实场景,测试任务在执行的过程中需要持续操作源端数据库并校验目标端数据库,因此在测试场景设计过程中要考虑多个测试步骤的并行执行。
  • 准备数据和清理数据量大:多数据组件的支持,意味着 NDC 的测试重点需要兼顾不同类型的库、不同结构的表、ddl 和 dml 操作、事务非事务等操作。

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

  • 数据构造服务与场景用例代码隔离,功能结构清晰
  • GoAPI 平台用例名称管理和复制功能强大,方便用例整合
  • GoAPI 平台自带轮询功能,特别符合 NDC 场景中执行等待的场景
  • 接口返回结果可通过 json 转换快速完成全校验

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

  • 源端管理/登录/执行节点等功能不需构造数据,可单独测试。
  • 任务列表和详情管理的前提是创建任务,创建任务则依赖于数据构造服务提供的建表和铺底数据功能。
  • 任务状态流转和动态详情的校验前提是对任务的操作,包括启动/停止/删除等,为模拟真实应用场景,启动任务的同时需要数据构造服务进行持续的数据操作和表结构操作。
  • 任务的状态进入到某个状态(例如增量延时小于 1s)后可进行链路终端的数据校验验证,校验成功后代表任务执行成功,则需要数据构造测试服务结束操作删除表。

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

目前已支持的功能有:

  • 随机类型列生成
  • 全类型列生成
  • 建表数/列数可配置
  • 建表支持:ddb/mysql/kudu/hive
  • 删表支持: ddb/mysql/kudu/hive
  • 修改表支持:alter table xxx
  • 支持单个建表和单个删表持续增删改查表数据
  • 场景保护:支持随机建表的用例复现

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

暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册