CI+JUnit5 并发单测机制创新实践 | 京东物流技术团队
一. 现状·问题
针对现如今高并发场景的业务系统,“并发问题” 终归是必不可少的一类(占比接近 10%),每次出现问题和事故后,需要耗费大量人力成本排查分析并修复。那如果能在事前尽可能避免岂不是很香?
二. 分析原因
当前并发测试多数依赖测试人员进行脚本测试,同时还依赖了研发和产品识别出并发操作的场景用例。
对于并发测试,大概两条路子:
所有修改同样数据的命令式接口都测一遍?【耗费巨大测试成本】
保证黄金流程的接口,研发从头扒代码。【可能会遗漏,耗费一定研发成本】
🤔自我反思
作为研发,是不是在刚开发接口时候,识别到并发场景随着单元测试阶段同时进行并发测试,这样的成本是最小的,收益是最高效的!
三. 采取措施
并发测试前置
采用 CI 持续集成机制,依靠行云流水线,底层利用 junit5 单元测试框架并发 parallel 引擎,嵌入同步数据库的自定义 unit test 脚本,将每个并发 case 维护成单元测试,数据自我闭环,可重复执行!
将核心的并发场景进行及时的运行验证,最早洞察,最早验证,最小成本,最大保障!
四. 实践步骤
前提:配置 junit-platform.properties
单接口并发-@RepeatedTest
ManualCheckAppConcurrentTest 出库复核并发测试「单接口并发」-> 手动复核 10 个线程
👉 核心代码块
多场景并发-@Execution(CONCURRENT)
CheckAppConcurrentTest 出库复核并发测试「多场景并发」-> 手动复核|自动复核
👉 核心代码块
并发单测基类-@Transactional
ConcurrentTest 建议抽出并发测试基类(主要目的:准备数据、设置路由、数据清除、独立执行)
@Tag("parallel")分组: 并发测试用例,有助于单独执行套件!
👉 核心代码块
数据准备-@Sql
如何准备数据?
=> 新建一个专门单元测试/并发测试的空数据库
准备测试场景的前置数据 SQL 脚本
👉 源脚本
数据回滚-@ParameterizedTest
CI 自动同步数据库表结构: 测试环境数据库->单测数据库
利好:(研发无需被动维护 schema,自动与真实数据库结构同步)
只需要将下面单测 copy 到代码中,将 fromDb 和 toDb 参数修改成自己数据库即可!
👉 源代码
配置 CI-@行云流水线
建议在提测流水线增加,不要再日常 dev 流水线(集成测试相对耗时)
只执行并发单测用例-Dtest.mode 基于 junit5 @Tag
https://junit.org/junit5/docs/current/user-guide/#writing-tests-tagging-and-filtering
配置 IDEA-本地测试
—— 只运行并发测试用例
执行结果
单接口并发单测
多场景并发单测
五. 效能提升
5.1 需求交付效率提升
5.1.1 降低测试周期阶段时长
2022-02 月实践后
因为「并发测试」前置到「研发单元测试」环节,所以「测试阶段」时长缩短 (2.5 天 -> 1 天)
2022-Q1
2022-Q2
2022-Q3
2022-Q4
「测试周期」阶段停留时长和占比,呈下降趋势!
5.1.2 缩短需求交付全周期
2022-02 月实践后
因为「测试周期」缩短,研发单元测试成本几乎不变,所以「需求交付全周期」随之缩短(55 天 -> 35 天)!
5.2 人效提升
5.2.1 提升验证全面性
「case by case」 ,通过单元测试「断言机制」,最细粒度全方位验证!
在【开发阶段】识别到接口存在并发问题,及时编写单元测试进行验证,针对分布式锁和乐观锁等常用防并发手段,对应不同的 assert 方式:
数据库乐观锁:通过判断最终数据保证执行无问题
分布式友好锁:不会报错,会等待,最终所有请求处理成功
分布式冲突锁:直接报错,断言异常信息
......
5.2.2 降低测试人力成本
减少花大量时间专项测试 N 个接口并发测试成本,「最早发现,最早处理,最小成本」!
根据下图可见,从编码阶段、单元测试阶段、接口测试阶段、集成测试阶段、预发布阶段等软件生命周期中,越早发现问题,付出成本越小。
5.2.3 提升需求吞吐量
2022-02 月实践后
因为减少人力成本,所以会直接提升需求的吞吐量(200 个 -> 225 个)!
5.3 过程质量提升
5.3.1 降低问题的发生概率
「并发测试前置」 到研发单元测试环节,可减少缺陷数,降低问题发生概率!
5.3.2 减少线上问题数
👉 今年线上问题-并发问题 类别为 0
5.3.2 减少 Bug 数
👉过程质量中并发问题趋势逐步降低
作者:京东物流 周奕儒
来源:京东云开发者社区 自猿其说 Tech
版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/bb8214203730b550660447b20】。文章转载请联系作者。
评论