【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

网易 CI/CD 实践(下):测试自动化及 API 版本管理

  • 2020-10-23
  • 本文字数:1773 字

    阅读完需:约 6 分钟

网易CI/CD实践(下):测试自动化及API版本管理

在前面两篇文章中,我们详细介绍了网易轻舟的 CI 和 CD 实践,同时我们也知道在网易实践中,CI 和 CD 是分开的,但其实对用户而言,CI 和 CD 应该是一体的,如何解决这两者的矛盾呢?


网易轻舟的做法是通过流水线触发器中的 Pipeline 关联触发功能串联了 CI 以及 CD 流水线,用户可以预先在容器部署模块,创建对应的容器应用,然后在 CD 流水线中添加部署阶段,并选择对应的应用/部署进行更新升级。



需要注意的是,网易轻舟并没有在流水线这里提供太多的部署配置,仅提供了镜像升级。某些运维相关的配置项,比如部署策略、Service、环境变量等,依然需要到容器部署模块修改。这么做的目的,是为了限制流水线侧的权限范围,因为绝大多数情况下,持续集成面对的都是应用的更新场景,所以这么做也可以保证流水线可以长期稳定运行。

测试自动化

解决完 CI/CD 的连接问题,接下来我们就要关注测试的部分。梅光辉表示:“自动化测试是打通持续集成和持续交付的核心,没有有效的自动化测试保证,持续集成与持续交付就仅仅是一个没有灵魂的空壳。因此,网易轻舟在 CI/CD 中引入了对自动化测试的全方位支持。”


通常来讲,自动化测试分为单元测试自动化、接口测试自动化、集成(UI)测试自动化这三个层面。



自动化测试的三个层面的关系如上图所示,越往上越靠近 QA、业务和最终用户,但与此同时执行起来成本也越高、速度越慢、投入产出也越低。因此,业内最佳实践往往是加大最底层单元测试的占比(70%),再配合一定的接口自动化测试(20%)以及集成测试(10%)。


如果从 CI/CD 最佳实践来看,单元测试自动化一般在 CI 阶段就会 cover 掉,并作为代码合入的标准。而在发布过程中,则主要是接口测试自动化,以及最终的集成测试自动化。


针对接口自动化测试,CI/CD 在流水线中集成了网易内部的 GoAPI 接口自动化测试平台,如下图所示:



用户通过预先在 GoAPI 自动化平台配置接口测试执行集,然后在流水线中配置执行集,就可以在流水线执行过程中自动执行并产生测试质量报告了。


集成测试自动化一般是由 QA 或开发人员编写对应的自动化测试代码,来覆盖系统核心的使用流程,实现端到端的场景测试自动化。目前这方面技术最成熟的是 Java 生态,因此,网易轻舟内部技术选型采用较多的是 TestNG 等自动化测试框架,再结合 Retrofit、cucumber 等框架。


同时,CI/CD 中也提供了对 TestNG 工具的支持,用户在流水线部署阶段之后添加对应的集成测试阶段,然后配置相应的测试工程容器镜像,就可以在流水线执行过程中执行自动化测试了,并且也可以选择将生成的测试结果数据上传至对象存储或第三方平台,然后就可以在流水线执行页面提供相应的跳转链接查看测试结果了。

API 版本管理

无论是对于 API 的设计者,还是调用方,API 版本管理都是十分重要的。在实际应用中,随着业务的不断发展,API 也会不断变化,这时我们会常碰到的问题就是 API 的向后兼容性,当出现需求变更、考虑不全的情况,兼容性的实现就会变得复杂。


网易轻舟采用的是 RESTAPI 的设计风格,每个接口都对应着对一种资源的操作,版本信息直接放在 URL 中,表示每种资源都会有一个对应的版本。比如获取应用列表的 API 就是 GET /api/v1/applications 。一般情况下,在对应用的数据模型进行扩展和修改的同时,都会考虑数据的兼容性情况,比如某个字段的命名修改,在接口上会同时支持两个不同参数,而在实现上会将两个参数映射到同一个字段。同时在接口文档中,也会有说明告诉用户能够尽快做出修改。


如果应用对应的数据模型发生了无法兼容的变更,那就会将接口从 v1 升级到 v2,变为 GET /api/v2/applications。v1 版本的接口和 v2 版本的接口会同时提供对外服务,但是除了 bug 修复外,一般后续需求如果有对 API 的更新,都会在新版本中进行更新,用户如果想要使用新功能,需要主动迁移。


汪灿丰表示:“这种 API 管理方式是目前比较成熟的方式,当然,一般情况下都是会采用兼容的设计方案。”


采访嘉宾简介:


汪灿丰,网易杭州研究院高级产品开发工程师,专注于云原生以及 DevOps 领域,目前主要负责网易轻舟 CICD 的研发工作。


梅光辉,网易杭研究院高级服务端开发工程师,目前主要负责网易轻舟 CICD 研发工作,在云原生以及容器 DevOps 领域有过深入的研究和实践。


相关阅读:


网易CI/CD实践(上):CI系统的技术选型与部署流程


网易CI/CD实践(中):CD系统的部署架构与发布流程


2020-10-23 08:594653

评论

发布
暂无评论
发现更多内容

基于EasyCV复现DETR和DAB-DETR,Object Query的正确打开方式

阿里云大数据AI技术

深度学习 开源 自监督学习

【刷题记录】14.最长公共前缀

WangNing

7月月更

别再说你不知道函数递归了-入门知识

芒果酱

C语言 7月月更

【愚公系列】2022年07月 Java教学课程 06-常量

愚公搬代码

7月月更

在线XML转JSON工具

入门小站

工具

当转转严选订单遇到状态机

转转技术团队

架构 状态机

AWS Support Plan

冯亮

云计算 DevOps AWS 云计算架构师

TOGAF中的本手和妙手

涛哥 数字产品和业务架构

企业架构 TOGAF

数据结构与算法之树与二叉树(理论篇)

未见花闻

7月月更

zookeeper-zookeeper的应用场景

zarmnosaj

7月月更

用 Flutter 给小姐姐的照片调个颜色滤镜

岛上码农

flutter ios 前端 安卓开发 7月月更

Node.js基础入门

bo

前端 Node 7月月更

100 条 Linux vim 命令备忘单,收藏起来随时备用!

wljslmz

vim Linux 运维、 7月月更

使用 PixCap 和 ReadyPlayerMe 快速制作3D 模型动画

devpoint

3D 7月月更 pixcap readyplayerme

【MySql项目实战优化】复杂触发器案例分享

安逸的咸鱼

MySQL 实战 7月月更

在线随机抛硬币正反面统计工具

入门小站

工具

SQL 改写系列六:谓词推导

OceanBase 数据库

新星计划Day10【数据结构与算法】 排序算法

京与旧铺

7月月更

CnosDB 涅槃重生:弃用Go, 全面拥抱Rust

CnosDB

rust 物联网 时序数据库 开源社区 Go 语言

前端值得一看的ArkUI框架进度指示器

坚果

开源 HarmonyOS OpenHarmony Open Harmony 7月月更

关于Java&JavaScript中(伪)Stream式API对比的一些笔记

山河已无恙

Java stream JavaScrip

历史的坑,只能尽量填平

技术小生

事故复盘 7月月更

技术解析|Doris Connector 结合 Flink CDC 实现 MySQL 分库分表 Exactly Once精准接入

SelectDB

数据库 flink 数据仓库 Doris

微服务间的通信协议和消息格式

穿过生命散发芬芳

7月月更 微服务通信

数据要素

奔向架构师

数据资产 7月月更

SDL键盘事件

柒号华仔

7月月更

linux中的内部命令和外部命令

工程师日月

Linux 7月月更

【算法社区】十大排序算法详解

小明Java问道之路

数据结构 算法 排序 排序算法 7月月更

运营商的时代之旅:种下5.5G的魔豆,攀上数字化的天空花园

脑极体

闭会算法好题之2020ICPC澳门站签到A题

KEY.L

7月月更

Iptables的基本原理

阿泽🧸

iptables 7月月更

网易CI/CD实践(下):测试自动化及API版本管理_服务革新_田晓旭_InfoQ精选文章