摘要:Mock Server在为性能测试提供服务时,往往需要承受较大的压力,所以在系统设计上支持水平扩展,热点接口和案例数据的读取方案切换。案例管理是平台的另一核心功能,它基于接口创建,是接口使用场景化之后的数据体现,同时提供智能化的类型匹配、数据匹配以及自动化的案例创建。

随着苏宁金融的快速发展,业务和服务系统规模不断扩大,微服务系统数量快速增长。面对如此繁多的系统数量和复杂的系统关系,接口管理和服务模拟成为制约研发效率的重要因素之一,体现在:

  • 接口维护工具和维护方式不统一,导致管理混乱,检索困难;
  • 接口维护和沟通的成本高,接口变更、接口定义标准不统一,容易产生争议;
  • 前后端、系统间依赖性高,研发环节相互制约;
  • 服务难模拟,无法对可用性进行持续监测;
  • 不支持RPC(苏宁远程调用框架RSF)类型的接口。

魔客平台

定位

魔客平台的诞生即是为了解决上述问题,它将接口管理和服务模拟功能有机结合,能够适配特殊要求(包括接口的加签加密,RPC类型接口,性能测试支撑,内部各套环境测试等等)。

图一 魔客平台构成

魔客平台包含以下四个平台:

  1. 统一接口管理平台:提供基础的接口维护和数据支撑;
  2. 统一服务模拟平台:支持正反两个方向的服务模拟,模拟接口请求和模拟接口响应;
  3. 统一服务检测平台:对服务的可用性进行持续检测,支持自动化测试;
  4. 统一压测支撑平台:提供稳定的挡板服务,延时模拟,性能指标管理。

价值

通过四个平台的相互配合,解决制约研发效率的各个问题,能够在成本、人效、标准三个方面产生巨大的价值:

图二 魔客平台价值

  1. 降低单接口维护、沟通、变更、测试的成本,最终将上述工作项的时间成本由2-8小时降低到1小时以内;
  2. 将接口管理与服务模拟功能有机结合,前后端分离,系统间解耦,极大的缩短了联调时间,提高研发人效,最终将联调的平均时间由4-8小时降低到2小时以内;
  3. 形成一个标准的研发平台,输出标准的接口文档,制定标准的研发过程。平台服务优于行业标准、理念先进,可作为技术能力对外输出,体现苏宁技术的独有性、领先性。

业务规划

图三 魔客平台业务规划

我们的最终目标是要打造一个智能化的平台,提供数据的智能服务。接口和案例是两大基础核心功能模块,它们提供数据的来源,进而为性能测试和自动化提供服务。权限管理和技术支持为平台健康稳定发展提供了保障。

图四 一站式接口解决方案

实现接口一人维护多人共享。接口提供方开发维护接口文档,创建案例,使用API Test调试接口和设置自动化检测;调用方根据接口文档开发代码,可以使用Mock Server模拟代替服务方,订阅服务获取接口变更通知;测试人员可以在平台上完成接口的自动化测试和获取性能测试支持;产品人员可以审批接口申请和分享、下载接口文档。

接口管理

接口管理是平台的核心功能,提供接口所涉及的方方面面,如维护、升级、变更、分享、通知、生命周期等功能的管理;以及智能化的数据服务,包括接口信息自动获取、接口快速创建、参数一键转换。接口管理为所有功能提供基础数据支持,功能强大,配置便捷。

接口维护

  • 基础信息、协议、契约、出入参、分组&标签、加签加密、响应码、枚举等数据维护
  • 版本管理,变更记录查看、回滚、通知
  • 在线分享与文档导出
  • 使用申请与上游系统管理
  • 收藏与订阅
  • 生成代码和样例

接口来源

  • 来源于苏宁内部平台,由系统自动获取,包含RSF平台、ESB平台、Kafka平台、WINDQ平台等
  • 存量数据导入,包括Excel导入、Swagger导入、阿里RAP导入等
  • 插件获取,包括安装浏览器插件录制HTTP请求创建接口、安装Maven打包插件通过注解自动获取接口
  • 手工维护

接口生命周期

管理接口从设计到上线的状态变更,包含接口变更、接口升级和接口下线等流程。

图五 接口下线流程图

案例管理

案例管理是平台的另一核心功能,它基于接口创建,是接口使用场景化之后的数据体现,同时提供智能化的类型匹配、数据匹配以及自动化的案例创建。根据案例的不同应用场景可以分为三类:

  1. 应用于服务模拟的挡板案例,对接口进行mock时,匹配案例的预期输入,返回案例的预期输出;
  2. 应用于接口测试的数据案例,将案例的预置参数作为真实接口调用的请求参数,将案例的预期返回与请求的实际响应对比验证接口的正确性;
  3. 应用于自动化测试的场景案例,可获取场景参数和前置接口返回数据。

服务模拟

挡板服务(Mock Server)

挡板服务主要用于接口无法使用(未开发完成,网络不通,系统异常等)或特殊场景难以复现时,通过挡板服务模拟接口返回。

  • 支持HTTP、HTTPS、RSF等不同的协议类型;
  • 支持JSON、XML、Form-data、Java Bean等不同的数据结构;
  • 支持等于、包含、正则、类型等不通过匹配方式;
  • 支持过滤特殊无法确定的参数,如随机数和时间戳等。

下面简单介绍一下挡板服务的实现:

CaseReloadServlet和CaseChangeNotifyServlet分别用于接收全量和增量的案例变更请求,然后调用CaseLoader加载案例信息到缓存中;HttpMock Servlet和RSFMockServlet分别用于接收Http和RSF协议的Mock请求,通过Mock Handler组装请求信息并调用MockService进行匹配,MockService先通过Mock DataRedisHelper从缓存中获取接口信息和案例列表,循环案例列表,根据案例定义CaseDefinition中的匹配规则MatchPattern进行匹配,并将匹配到的Case Definition中的ResponseDefinition组装返回数据。

图六 挡板服务组件图

CaseDefinition是案例的定义,包含请求的匹配规则和响应的结果数据;MatchPatternParser根据不同的数据类型解析生成CaseDefinition;MatchPattern为具体匹配规则,衍生出对象类型ObjectValueMatchPattern包含类型匹配,Equals匹配,Null或者不存在等,和字符串类型StringValueMatchPattern,包含JSON类型匹配、字符串包含、正则等。

图七 挡板解析与匹配类图

接口测试(API Test)

接口测试可用于开发的自验证、构造数据、服务可用性监测等。节省开发人员编写功能测试的代码工作量,一次创建重复使用。

  • 支持HTTP、HTTPS、RSF等不同的协议类型;
  • 支持JSON、XML、Form-data、Java Bean等不同的数据结构;
  • 支持加签加密等特殊字段处理;
  • 支持苏宁各套测试环境。

图八 接口测试转发路由实现图

前后端分离

前后端分离方案已经在集团内部得到了很好的实践,版本迭代速度和效率得到了显著提升。

前端开发根据接口和案例集成接口,可以在平台上获取mock地址、查看接口的实现代码样例(Vue、jQuery等)以及数据样例,实现和后端的分离开发。通过订阅接口获得实时的接口变更通知,查看变更内容,节省文档传递和沟通的时间成本。

后端开发设计和维护接口信息、创建mock案例。代码开发完成后使用接口测试功能调试接口,若返回结果和mock案例预期输出相同,则可以认为接口功能满足预期。

由于接口的请求方式(POST、GET、PUT等)、数据结构(JSON、XML、Form-Data等)、字符特殊处理(、UrlEncode、加密、加签等)、异常处理(正常响应、失败、异常等)都已经在魔客平台调试通过,前端只需将mock地址改为接口真实地址即可完成交付,理论上可将联调时间降低为0。

此外,还可以结合苏宁金融自研的网关系统——灰狐网关实现最佳前后端分离方案。

图九 前后端分离方案

自动化测试

这里说的自动化侧重于研发的自动化测试,对接口和案例在各个测试环境持续的进行可用性探测。在研发阶段,开发或者测试根据接口定义维护好自动检测的案例,案例要覆盖接口的各个场景,执行结果可以作为接口达标的主要依据。平台会定时进行检测,及时发现接口的异常。此外,在接口变更时自动触发自动化检测,及时发现此次变更是否造成功能异常,降低开发和测试回归验证的成本。

性能测试

对性能测试的支撑可以分为两个部分:

  1. 基础数据支撑,即通过测试人员维护和系统自动获取(从监控大盘和调用链监控系统)的方式将接口性能数据持久化,可作为接口性能评估和调用方延时模拟的主要依据;
  2. 通过中间件为性能测试执行过程提供mock服务,减少硬编码和人为评估接口耗时。

Mock Server在为性能测试提供服务时,往往需要承受较大的压力,所以在系统设计上支持水平扩展,热点接口和案例数据的读取方案切换。

展望

魔客平台一经推广便收到苏宁集团各研发中心的一致好评,平台使用人数和访问量快速增长。后续将重点推进的内容有:

  1. 提供智能的数据报表,包含系统所属接口的自动化测试覆盖率、接口维护质量、接口健康度状态;
  2. 提高接口质量,增加接口评分功能,约束文档的规范性,推进接口的自动化检测功能,提高文档的准确性;
  3. 完善自动化测试的功能,丰富自动化场景的配置功能;
  4. 作为苏宁的标准产品对外输出,提供云服务。

相关文章