vivo流量录制回放平台实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 2021 vivo开发者大会
互联网技术专场
vivo平台产品系统架构师
2. 2021.12.16 vivo开发者大会-互联网技术专场
3. 2021.12.16 vivo开发者大会-互联网技术专场
4. vivo业务情况
应用商店 浏览器 视频
游戏中心 vivo钱包 vivo官网
音乐
天气
业务
种类多 流量大
系统
复杂度高 可靠性
要求高
JOVI
… …
2021.12.16 vivo开发者大会-互联网技术专场
5. • 测试用例编写难。
• 用户真实操作行为不容易模拟。
• 代码执行逻辑通过脚本难验证。
测试痛点
• 测试用例设计易遗漏。
• 测试覆盖率难以把控。
• 测试环境维护成本高。
• 测试脚本维护成本高。
2021.12.16 vivo开发者大会-互联网技术专场
6. 2021.12.16 vivo开发者大会-互联网技术专场
7. 解决方案
零使用成本
无侵入可插拔
通用可扩展
• 学习成本低 • 应用系统无侵入 • 易于扩展
• 使用成本低 • 随启随停 • 灵活多变
• 接入成本低
2021.12.16 vivo开发者大会-互联网技术专场
8. 流量录制回放
生产
机器
测试
机器
回放
结果
无需编写测试用例
通过丰富的流量容
易形成高覆盖率
录制
流量
回放
流量
录制流量完美模拟 对象对比效率高、
用户真实行为 验证更齐全
2021.12.16 vivo开发者大会-互联网技术专场
9. 2021.12.16 vivo开发者大会-互联网技术专场
10. 用户层
网关层
平台架构
应用配置 任务配置 录制任务 回放任务 定时任务
插件配置 系统配置 任务启动 任务停止 任务通知
任务巡检
心跳检测
运行监控
业务层
数据储存 数据查询 数据去重 调用链 安全系统
数据分析 流量聚类 报表统计 工单系统 权限系统
V消息
短信
邮件
异常统计
....
系统通知
数据层
2021.12.16 vivo开发者大会-互联网技术专场
11. 业务回归
Java Agent核心架构
测试赋能
数据分析
录制回放 插件管理 用例管理 覆盖率分析 脚本生成 压测模型
定时任务 链路对比 持续集成 …… 安全分析 精准化
参数分析
依赖治理
异常分析
依赖梳理 拓扑关系
性能分析 ...
Dubbo
基
础
能
力
层
HTTP
基
础
依
赖
层
基
础
容
器
层
插件管理 录制插件 回放插件 数据Mock 链路采集 心跳管理 时间回流
依赖分析 异常模拟 环境同步 字节码插桩 内存防护 对象对比 配置加载
数据分析 数据存储
流量去重 链路分析
报表统计 ...
作业管理 作业权限
作业执行 Agent文件
sh脚本 作业查询
...
Hession
TTL
Jvm Agent
LogBack
Asm
Fastjson
无侵入式AOP解决方案
Guava
2021.12.16 vivo开发者大会-互联网技术专场
12. 入口流量
字节码拦截
入口流量
HTTP
调用记录
业务Service
流量录制过程
存储服务
子调用
子调用
DB
数据加密
子调用
字节码拦截
子调用
Dubbo
序列化
......
业务Service
外围依赖调用
Method(Dubbo、Redis、HTTP)
调用拦截
Before调用拦截
After 调用拦截
调用拦截
方法调用入参、返回值
调用记录
Throws调用拦截
外部介质
2021.12.16 vivo开发者大会-互联网技术专场
13. 流量录制难点和方案
•
•
•
•
严格限制并发录制数量。
限制单条流量子调用数量。
对录制过程进行监控、异常降级。
对相同录制子调用合并。
• 业务系统进行数据上下文传递
• 利用Agent对业务线程池进行动态修饰。
• 利用公司的调用链进行上下文数据标识传递。
• 录制数据脱敏。
• 严格控制流量查看权限。
• 对录制的数据进行储存加密。
• 依靠请求参数去重。
• 依靠调用链路进行去重。
2021.12.16 vivo开发者大会-互联网技术专场
14. 发起调用
回放器
入口流量
HTTP/Dubbo
调用记录
业务Service
流量回放过程
回放器 回放服务
回放结果 比对服务
子调用
字节码拦截
Dubbo
反序列化
DB
......
业务Service
外围依赖调用
Method(Dubbo、Redis、HTTP)
Mock返回
参数对比
Before调用拦截
选择子调用
子调用
调用记录
外部介质
2021.12.16 vivo开发者大会-互联网技术专场
15. 流量回放难点和方案
• System.currentTimeMillis()
native方法动态替换
• LocalDateTime Mock时间调用函数。 • 生产配置中心数据动态替换测试环境配
置数据。
• 生产和测试环境内存型数据同步。
• 支持全局降噪字段。
• 支持接口级别降噪字段。
• 支持应用级别降噪字段。 • 支持自定义脚本。 • 对不同子调用制定不同匹配策略。
• 优先进行调用栈比对。
• 调用栈相同寻找差异最小调用。
2021.12.16 vivo开发者大会-互联网技术专场
16. 丰富的协议
平台已经支持的录制和回放协议
组件类型 组件描述 录制 回放 入口流量
HTTP HTTP服务端 √ √ √
Dubbo-Provider Dubbo服务端 √ √ √
Tars-Server Tars服务端 √ √ √
Dubbo-Consumer Dubbo客户端 √ √ ×
MyBatis MyBatis组件 √ √ ×
Ibatis Ibatis组件 √ √ ×
Redis Redis客户端 √ √ ×
Hibernate Hibernate组件 √ √ ×
OkHTTP OkHTTP组件 √ √ ×
Apache-HTTP-Client Apache-HTTP组件 √ √ ×
Guava-Cache Guava缓存 √ √ ×
Eh-Cache EhCache缓存 √ √ ×
Caffeine-Cache Caffeine缓存 √ √ ×
Tars-Client Tas客户端 √ √ ×
Elasticsearch Es客户端 √ √ ×
Spring-Mongo Spring-Mongo客户端 √ √ ×
2021.12.16 vivo开发者大会-互联网技术专场
17. 管理平台
文件平台
业务机器
数据服务
选择应用
查询应用
录制回放任务启动过程
通过Java Agent Attach机制
保证零侵入、可插拔、随启随停
任
务
执
行
时
序
图
创建任务
执行任务
任务请求
请求校验
脚本和资源文件下发
Agent文件安装
脚本启动Agent
加载任务配置
加载配置
返回配置
Agent初始化
持续心跳/数据上报
保存数据
数据查询
查询数据和任务状态
2021.12.16 vivo开发者大会-互联网技术专场
18. 流量回放详情
2021.12.16 vivo开发者大会-互联网技术专场
19. 2021 vivo开发者大会
互联网技术专场
可视化的执行过程
可视化的回放执行过程,便于分析失败问题
2021.12.16 vivo开发者大会-互联网技术专场
20. 回归代码覆盖率
利用JaCoco计算的流量回归代码覆盖率展示
2021.12.16 vivo开发者大会-互联网技术专场
21. 2021 vivo开发者大会
互联网技术专场
定时录制与回放
定时任务批量执行,提高操作效率
2021.12.16 vivo开发者大会-互联网技术专场
22. 2021.12.16 vivo开发者大会-互联网技术专场
23. 核心指标
0代码10min
接入完成
10k+次
录制回放
核心业务
200+应用
问题发现
多数回归测试
场景提效
2021.12.16 vivo开发者大会-互联网技术专场
24. 其他方面应用
流量压测
问题定位
安全分析
通 过分 析录制 流 流 量回 放重现 线 分 析流 量识别 安
量生成压测模型。 上问题。 全风险
录 制指 定流量 排
查问题。
2021.12.16 vivo开发者大会-互联网技术专场
25. 2021.12.16 vivo开发者大会-互联网技术专场
26. 其他方面应用
精准化测试 DevOps结合 异常模拟
• 代码变更影响分析 • 结 合 DevOps 做 • 系统资源依赖分析
• 回归测试用例推荐
自动回归测试
• 强弱依赖判断
2021.12.16 vivo开发者大会-互联网技术专场
27. 开源共创
插件贡献
Guava插件
Caffeine插件
Ok-HTTP插件
Apache-HTTP插件
EhCache插件
【共创地址】 https://github.com/alibaba/jvm-sandbox-repeater
2021.12.16 vivo开发者大会-互联网技术专场
28. 2021 vivo开发者大会
互联网技术专场
刘延江 | vivo平台产品系统架构师
相关技术文章后续
将在公众号发布
敬请关注