去哪儿网接口自动化测试探索实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 去哪儿网接口自动化测试平台
灭霸的探索实践
李晓悦
去哪儿网基础研发技术总监
2.
3. • 灭霸诞生背景
• Case智选
• 测试环境治理
• 录制回放模式落地
• 其他探索
• 总结
4. 旅游业务复杂度
• 业务复杂
• 版图大/品类多
• 出行/住宿
• 景点
• 业务发展
• 服务/包装/套餐
• 定向服务/推荐
• 新玩法/业务融合
5. 举例:机票业务演进
• 基础信息
• 舱位/航程/航司
• 起降时间
• 航站楼/经停
• 价格
6. 举例:机票业务演进
• 商旅套餐
• 附加服务
• 退改套餐
• 灵活退改策略
• 低价退改费用
• 极速出票
• 临时起意
• 机酒套餐
• 一站式服务
7. 举例:机票系统复杂度升高
8. 机票业务数据复杂
9. • 敏捷开发
• 小步快跑
• OKR
• MVP/milestone
• 交付速度
• 改动影响范围
• 是否要回归
• 回归多少
• 时间成本/漏测
回归成本高
10. 依赖熵——上下游依赖
• 依赖熵
• 下游不稳定/无数据
• 下游消耗资金
• 灰度/仿真测试下游
有写操作
• 构造数据更加复杂
• 接口/db/redis
11. 依赖熵——流程依赖
• 复杂流程测试
• 流程间依赖
• 搜索->booking-
>生单->支付->
售后
• 单独流程难剥离
• 测生单依赖搜索
和booking
12. 故障数据分析
13. 测试痛点分类
14. 灭霸:随机消灭一半bug
15. •
灭霸诞生背景
• Case智选
• 测试环境治理
• 录制回放模式落地
• 其他探索
• 总结
16. 测试维度固化/笛卡尔积生成checklist
17. Case生成数据来源
• checklist->case
• 数据来源:
• ELK业务日志
• 与排查问题共享数据
• checklist漏斗
• 覆盖问题:量vs质
• agent标准化记录请
求入参打印日志
• 时效性
18. 测试维度自动更新
• 太少?新增业务分支
• 生成用例的同时,发现新的业
务分支的取值
• 自动
vs 手动补充
• 太多?叉乘出不合理的业务分支
• 某取值消失
• 有效精简:统计测试维度覆盖
率,⻓期无覆盖的进行精
19. Case生成策略
• 用户触发测试时生成的case
• 实效高
vs 速度慢/有遗漏
• 定时补充的case(定向)
• 固化case,提高稀有case覆盖
• 早中晚生成case
• 合理利用机器资源,削峰填谷
20. Case校验
• 巡检校验case的新鲜度/有效性
• 主要针对固化的
• 用户配置的断言规则
• 某些节点不能为空
• 无效case处理
• 剔除
• 挽救:数据偏移
21. 入参单一问题
• 条件:订单号
• checklist?业务语义?
• 内容:订单详情
• 隐性条件:订单的部分属性
• 维度在过程中
• 维度在结果中
22. • 灭霸诞生背景
• 灭霸Case智选
• 测试环境治理
• 录制回放模式落地
• 其他探索
• 总结
23. 测试流程
• 流水线
• 需求->开发->测试...
• CICD流水线触发自动化
测试
• 单一环境抢占
• 多项目(PMO)竞争
• 非代码变更竞争
24. 环境池
• 按需(热度)分配
• 好处
• 提高并行度
• 降低测试竞争和阻塞
• 坏处
• 不好量化评估
• 难以动态调整
• 多应用大环境资源损耗
25. 软路由
26. 配置文件变更
27. • 灭霸诞生背景
• 灭霸Case智选
• 测试环境治理
• 录制回放模式落地
• 其他探索
• 总结
28. 自动化测试的两个维度
• Level I:接口diff
• Level II:录制回放
• 下游不稳定
• 下游无数据
• 下游消耗资金
• 下游有写操作
29. 录制回放组件选型
30. jvm-sandbox-repeater结构
• 控制面
• 下发
• 录制/回放
• 数据面
• 沙箱核心实现
• 录制回放插件
• 数据中心
• 数据上报
• 存储/读取
31. • 控制面
• 灭霸中控
• case录制/回放/筛选
• 数据面
• 新插件
• ES管理索引
• case筛选
• Hbase原始数据
• case执行
二次封装
32. 出现预期差异时排查难度大
• 数据不同
• 结果diff
• 入参diff
• 流程不同
• 方法调用链路不同
• 排查难度增加
33. 最后一公里的问题
• 日志
• debug
• arthas
34. • 流程不同
最后一公里的问题
• 宏观:系统间链路不同
• 靠链路trace
• 微观:方法调用链路不同
• 因为代码改动,原来A->B->C
,现在A->B->D
• 如何感知?
• 参考异常栈(开发经常查异常
的时候依靠异常栈信息)
35. JVM链路梳理
36. • 灭霸诞生背景
• 灭霸Case智选
• 测试环境治理
• 录制回放模式落地
• 其他探索
•
总结
37. 测试生态构建
38. 测试生态构建——全链路压测
39. 测试生态构建——全链路压测
40. 结合混沌工程
41. 结合混沌工程
42. 强弱依赖标记——混沌工程
43. 结合混沌工程
44. 公共组件/jar包升级/dubbo升级
• dubbo升级社区版
• tcdev
x.x升级
• 痛点
• 意愿低
• 回归成本
• bug/故障
45. 底层基础设施重大变更
• kvm迁移容器
• 容器镜像升级
• 基建修改
tomcat/jdk升级
• noah环境业务检查
46. • 灭霸诞生背景
• 灭霸Case智选
• 测试环境升级
• 录制回放模式落地
• 其他探索
• 总结
47. 数据分析
• 业务测试数据
• 项目维度(PMO):53055次
• 应用维度(微服务):59094次
• 接口维度:218538次
• 测试不通过次数:53498
• 测试通过次数:165040次
• 24.48%的代码问题通过测试平台发现,规避了潜在的线上故障
48. 数据分析
• 业务测试数据
• 节省PD数:162*0.5pd(单应用所有接口测试case数50)
• 年化收益:2000*250*162*0.5=40500000元
49. 数据分析
• 配合演练数据
• 1200次强弱依赖演练
• 接口依赖3000+个
• 五一演练发现问题136个
50.
51.