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

孙婷婷 · August 15, 2019 · 211 hits

接口测试往往不是简单的使用接口调用工具(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的轮询机制查看任务运行信息、调用项目接口校验任务详情列表等信息、停止删除任务、调用测试服务删除表完成数据清理。

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up