服务器 频道

爱奇艺的接口治理与自动化测试一体化解决方案实践

  01# 背景

  随着云原生和微服务架构的普及,公司许多服务也转向了微服务模式,以满足业务的高速发展和高流量调用需求。然而,微服务的拆分导致API数量的爆发式增长,使得接口管理和接口质量保障的问题更加凸显,具体体现在以下几个方面:

  1.1 缺少低成本的接口管理方案

  查找成本高:由于没有统一的平台来管理接口,接口信息分散在不同的工具或平台上,如wiki、YAPI、Gitbook、Swagger等。跨团队项目时,接口文档按项目或按团队组织,加上权限隔离,难以轻松找到接口信息和相关负责人。

  例如,团队A在重构时无法找到团队B的接口文档,需要通过多层级沟通来获取目标接口。

  阅读成本高:缺乏统一的文档格式,导致文档质量参差不齐,接口关键信息描述不足或不准确,影响开发和测试的协作效率。

  例如,多个文档格式不统一,开发人员需要花费大量时间去理解接口,延误项目进度。

  维护成本高:研发人员需要手动更新接口文档,尤其使用wiki、Gitbook等工具时,工作量大且长期无法保证最新信息。

  例如,接口更新频繁,很多文档无法及时更新,开发人员需要通过阅读代码或生产环境获取最新接口信息,增加维护难度。

  变更通知迟:接口变更时,相关人员无法及时获得通知,导致开发和测试人员依赖过时信息进行工作。

  例如,接口参数变动未及时通知,导致集成测试阶段发现问题,增加返工和修复工作。

  缺乏接口生命周期管理:接口创建、修改、弃用等环节缺乏有效跟踪和记录,难以了解接口的完整状态,影响项目管理和接口治理。

  1.2 缺少高效的接口质量保障方案

  数据一致性差:接口调试、mock、测试等使用多种工具,如Postman、pytest等,导致接口信息不同步。

  例如,开发阶段接口多次调整,各工具中接口信息没更新,测试时频繁出错。

  上手成本高:使用pytest、自研测试框架等工具需要代码能力,即使熟练人员编写复杂用例也非常繁琐。

  例如,测试用例执行数据库校验、生成token等,调试稳定用例需要耗费巨大精力。

  使用成本高:不同工具和平台功能差异,学习和适应新的工具耗费大量时间和精力。自动化用例通常在项目测试结束后才开始编写,需要额外的时间投入,且自动化验证的时间也被推迟。

  维护成本高:多个业务线各自开发接口测试框架或平台,需持续投入人力维护。

  例如,多平台需要持续人力投入,系统冗余功能多,无法快速推广部分优秀功能。

  协作难度大:开发、测试使用不同工具,接口定义和测试数据无法在工具间复用。

  例如,开发使用Postman,测试使用pytest,缺乏统一的数据管理和复用机制,增加沟通和协作成本。

  02# 解决方案:搭建接口管理全 生命周期的一体化协作平台

  针对这些问题,我们计划建立一个接口全生命周期的一体化协作平台,目标是提升接口信息质量,降低接口使用成本,并确保所有相关活动基于同一份接口契约在同一系统中完成,实现“一套系统、一份数据、一次编写、多地执行”的优秀实践。  

  2.1 以全局视角,搭建统一的接口管理平台

  分层管理模型:对接口进行多层次管理,包括业务线、应用和接口的管理  

  业务线:顶层管理单元,涵盖多个应用,确保接口和服务的连贯性和统一性。

  应用:每个应用对应一个Git项目,包含多个接口,是业务实现的具体模块。

  接口和用例:每个接口隶属于应用,支持版本跟踪和优先级管理,包含关联的测试用例。

  分级权限控制:确保系统资源安全与高效管理,提供基于业务线、应用和接口的细颗粒度权限控制

  细颗粒度权限:确保授予相应权限的人员才能访问和管理特定资源。

  权限配置灵活:管理员可配置权限策略,满足不同团队需求。例如,只公开某些接口给特定成员。

  全局智能检索:优化信息查找,提高团队工作效率

  全局检索:通过智能搜索快速找到接口、错误码、数据结构及自动化用例等信息。

  跨业务线和应用访问:减少信息查找时间,避免在多个文档和平台间切换。

  2.2 统一接口文档规范,主推OpenAPI 3.0标准

  规范统一:采用 OpenAPI 3.0,提供高度结构化和标准化的格式。

  内容详尽可扩展:支持详细描述请求、响应、参数、认证和错误码,允许自定义扩展内容。

  自动化支持:结合CI/CD工具实现文档自动生成和实时更新,避免文档遗漏问题。

  2.3 提供配套的研发提效工具

  接口调试和辅助定位

  一键调试:依托接口文档,使用定义好的参数进行接口调用并查看结果。

  CURL命令生成:在调试界面中提供生成CURL命令,方便本地使用。

  辅助定位:调试与测试请求自带Trace信息,可以查询服务响应和错误日志,精准问题定位。  

  接口mock

  文档即 Mock:平台自动生成格式正确、取值随机的 Mock 数据,并提供接口专属 Mock 地址。

  调试结果转 Mock:调试通过的结果可转存为Mock数据,前端开发无需硬编码Mock结果。

  自定义 Mock:支持定义不同的Mock结果,模拟各种场景。

  自动更新:后端接口变更时,依赖接口文档的Mock数据自动更新,确保一致性。

  2.4 构建零门槛的自动化测试能力

  为了提高测试效率、降低技术门槛,并加速项目交付,我们提供了一系列强大的自动化测试功能:

  1. 可视化界面:

  零代码编排接口请求和数据断言,通过拖拽和配置参数实现用例编写,并立即查看执行结果。

  零代码基础快速写用例,使业务线随项目进展同步完成自动化测试。

  2. 高效复用:

  调试通过的结果可转存为自动化测试用例,减少重复工作。

  用例支持在不同环境和角色间的复用,显著提升ROI,一次编写,多次使用。

  3. 智能校验和智能脚本:

  自动校验接口响应与文档一致性,减少断言编写工作量,提高准确性。

  一键生成接口响应校验断言。

  智能生成测试脚本,使编写过程更简便高效。

  4. 持续集成与复用:

  无缝对接持续集成系统,通过通知和报告实时反馈错误信息,确保问题及时发现和解决。

  一键筛选和编排自动化测试用例,通过CI流水线和定时任务实现持续测试。

  5. 脚本管理:

  模块化、标准化和分层管理,确保高效复用,降低维护成本,提升开发效率和交付质量。

  2.5 提供分支模型管理接口和用例

  分支管理:支持接口与用例的分支管理,不同分支互不影响。

  版本控制:精细管理接口和测试用例版本,方便回溯和优化。  

  通过构建接口管理全生命周期的一体化协作平台,我们能够实现:

  接口契约驱动文档生成和维护:所有活动基于统一接口契约,减少手动操作和人为错误,确保接口信息一致且高效。

  测试驱动开发和自动化测试:利用接口契约快速生成测试用例,贯穿项目生命周期,提高测试覆盖率和效率。这种全面管理和协作方式,将大幅降低接口管理维护成本,提高企业应对复杂业务场景时的响应速度和竞争力。

  03# 优秀实践

  基于以上问题和解法,我们将一个项目迭代划分为接口设计、开发、测试和上线四个阶段,每个阶段的优秀实践如下:

  3.1 接口设计阶段:文档先行,代码即文档

  平台通过自动化流水线实现高效、准确和持续更新的接口文档维护流程:

  集成接口文档到代码库:在开发项目中接入Swagger工具,开发人员在编写代码时,通过使用Swagger的注解来编写接口注释。这些注释将直接嵌入源代码中,与代码版本一起管理

  使用插件自动生成文档:增加swagger编译插件,在代码编译期间自动导出Swagger的JSON格式文档

  接入CI/CD部署:在CI/CD流水线中加入自动同步步骤,每次代码提交或更新时,自动将编译产出的Swagger文档投递到平台

  提供可视化文档平台:平台按照接口分组和接口目录树结构展示最新的文档,并提供搜索、浏览及权限管理功能

  版本控制和历史追踪:记录每次接口的变动历史,维护接口的各个分支版本,支持多分支接口的并行维护、查看与对比

  3.2 接口开发阶段:前后端并行开发,工具辅助提效

  后端开发:根据接口文档进行自测调试,利用Trace进行辅助定位。

  前端开发:获取自动生成的Mock数据,替换请求链接,或根据调试结果生成自定义Mock数据。

  接口修改:接口字段修改后,代码同步到Git,自动触发文档更新并通知相关人员,同时,Mock数据也会自动更新。

  3.3 接口测试阶段:用例随项目完成,高效复用和迭代

  自动化用例随项目测试完成:

  项目测试阶段,测试根据接口文档进行API调试,调试成功后可将参数保存为测试用例,完成用例新增。

  导入历史用例进行回归测试,并根据项目改动调整历史用例的参数和断言,完成历史用例维护。

  智能生成:使用大模型智能生成测试断言和脚本,确保用例执行的稳定性和断言的有效性,扩大测试覆盖范围。

  回归测试:功能测试通过后,将用例编排为回归测试任务,一键执行二次验收。

  高效复用:研发自测的用例可以提供给测试复用,无需再次调试接口;测试用例也可以提供给研发自测调试,保证提测质量。

  3.4 接口上线阶段:测试用例即监控用例,实现持续监控

  线下环境:将合并的用例加入线下环境DailyRun任务和CI任务中,提前暴露问题,减少人工干预

  线上环境:切换执行环境与数据,将线下环境积累的用例转换为线上监控用例,配置定时任务即可实现持续监控

  04# 平台收益

  为了解决以上接口管理与质量保障的问题, 我们开发了Atlas平台,提供了接口管理全生命周期一体化协作解决方案。经过半年的持续实践与迭代,我们已经取得了显著的成效:

  项目提效:

  接口文档维护时间下降为零

  简单用例编写时间下降50%,复杂用例编写时间下降80%

  项目提质:

  多个业务建立了从0到1的自动化流水线

  多个业务核心逻辑自动化覆盖率达到100%,并召回大量有效问题

  平台整合:

  下线多个自动化平台与测试框架,团队间平台与工具维护成本下降70%

  总体而言,Atlas平台帮助业务实现了高效低成本的接口管理方案,并有效提升业务质量,为未来的持续发展打下了坚实的基础。我们将继续优化平台功能,进一步提升各业务线的协作效率和产品质量,为用户提供更优质的服务。

0
相关文章