文章目录
- 一、测试右移简介
- 二、测试右移的主要内容
-
- [1. 实践案例解析](#1. 实践案例解析)
- 三、监控系统搭建
-
- [1. 发布后的质量监控](#1. 发布后的质量监控)
- [2. 移动端监控技术](#2. 移动端监控技术)
- [3. 插桩技术分类](#3. 插桩技术分类)
- [4. 常见监控类型](#4. 常见监控类型)
- [5. 数据存储与展示平台](#5. 数据存储与展示平台)
一、测试右移简介
测试右移是指在真实的生产环境中执行测试、质量与性能评估的实践。其核心目标是确保应用程序在实际用户负载下,依然能保持高性能、高弹性与高可靠性。通过测试右移,DevOps 团队能够发现并修复那些在开发或预发布环境中难以预料的潜在问题,从而保障线上系统的稳定运行。
- 测试左移:强调在开发早期(Plan, Code, Build, Test)介入,确保软件符合设计。
- 测试右移 :强调在发布后(Deploy, Operate, Monitor)持续监控,确保软件在生产环境中的性能、韧性与可靠性。
二、测试右移的主要内容
- 应用监控:对应用运行状态进行实时监控。
- 综合监控:持续质量监控,全面掌握系统健康状况。
- A/B 测试:通过对比不同版本,评估新功能或改动的效果。
- 金丝雀发布:逐步向小部分用户发布新版本,验证无误后再全量推送。
- 线上真实用户监控(TIP线上测试):收集并分析真实用户在使用产品时的性能与体验数据。
- 故障注入与混沌工程:主动在生产环境中引入故障,以检验系统的容错与恢复能力。
1. 实践案例解析
-
百度前端性能监控 :通过在生产环境的页面中植入监控脚本,实时收集性能数据(如资源加载时间),以分析和优化用户端的访问体验。

-
App 崩溃监控:
-
全面监控 :对移动应用进行 24 小时实时监控与告警,覆盖 ANR(应用无响应)、崩溃(支持 iOS/Java/NDK)、卡顿等多种异常,并兼容 Cocos、Unity 等主流游戏引擎。

-
智能分析 :利用大数据分析能力,帮助开发者快速定位问题根因。具体功能包括:掌握每日 Top 异常、定位引入异常的版本、排查特定机型/系统的适配问题、快速诊断内存问题等。

-
成效对比 :多家游戏开发商(如 Gameloft, Pomelo Games, Tapps Games)通过采用 Crashlytics、Firebase 等工具,有效降低了崩溃率,提升了玩家会话时长、用户留存率和广告收入。

-
三、监控系统搭建
-
搭建目的:为了系统性地收集、分析和可视化测试与生产数据,为质量决策提供数据支撑。
-
常用架构 :
ELK ElasticStack是业界主流的日志分析解决方案。
- 架构流程 :多个业务服务(如 Shippo #1, #2, #3)的日志通过 Logstash 进行采集,统一汇入 Redis 作为消息队列进行缓冲。随后,Logstash 从 Redis 读取数据并进行处理,最终存储到 Elasticsearch 中。Kibana 则负责从 Elasticsearch 读取数据,提供强大的搜索与可视化能力。
- 即从日志采集(Logstash/Beats)、消息队列(Redis)、数据存储(Elasticsearch)到可视化(Kibana)的完整链路
- 应用架构 :在更复杂的场景中,Beats(如 Filebeat, Metricbeat)作为轻量级采集器部署在边缘节点,将数据发送至 Logstash。Logstash 处理后的数据写入由主节点、热数据节点、温数据节点构成的 Elasticsearch 集群。Kibana 作为独立的可视化层,与 Elasticsearch 交互,完成数据的最终呈现。

- 架构流程 :多个业务服务(如 Shippo #1, #2, #3)的日志通过 Logstash 进行采集,统一汇入 Redis 作为消息队列进行缓冲。随后,Logstash 从 Redis 读取数据并进行处理,最终存储到 Elasticsearch 中。Kibana 则负责从 Elasticsearch 读取数据,提供强大的搜索与可视化能力。
1. 发布后的质量监控
- 全流程监控:建立从"研发自测 -> 内部测试 -> 公测 -> 线上监控"的完整质量闭环。
- 监控维度:分析测试覆盖度、定位线上问题、监控功能使用人数及使用深度。
2. 移动端监控技术
- 数据采集 :
- 移动端插桩:在代码中植入监控逻辑。
- 埋点:通过硬编码方式收集特定事件数据。
- AOP 编程:使用 AspectJ 等框架实现无侵入式的数据采集。
- 插桩框架:利用 ASM、JavaAssist 等在编译期或运行期进行字节码修改。
- 数据传输:收集到的数据通过 Logstash、Kafka、Filebeat 等组件回传至后端。
3. 插桩技术分类
- 基于编译插桩:在代码从源码(如 Java/Kotlin)编译成字节码(.class 文件)的过程中,通过修改字节码来植入监控代码。这通常借助 ASM、JavaAssist 等字节码操作库,在 Gradle 构建流程中自动完成。
- 基于 Dex 插桩:这是在 Android 平台特有的一种技术。它发生在 Java 字节码被转换成 Android 可执行的 Dex 字节码之后,但在最终打包成 APK 之前。它直接操作 Dex 文件,修改其中的指令来植入代码。
- Hook 技术:在程序运行时,通过一些系统机制(如 Linux 的 ptrace、Android 的 zygote 进程、或 Java 层的反射)来劫持和替换函数的执行流程。当程序调用某个函数时,实际执行的是我们注入的"代理函数",从而实现对方法调用、参数、返回值的监控和修改。
-
技术对比
特性 基于编译插桩 基于 Dex 插桩 Hook 技术 介入时机 编译期 (源码 -> 字节码) 打包期 (字节码 -> Dex) 运行期 (App 运行时) 灵活性 低 (需重新打包发布) 中 (需重新打包) 极高 (动态注入) 性能开销 小 小 中到大 稳定性 高 高 依赖框架和系统环境 权限要求 无 (需要源码) 无 (需要打包环境) 通常需要 Root 典型代表 NewRelic, ASM Appetizer Xposed, Frida
4. 常见监控类型
- App 崩溃监控(如 Bugly):专门监控 App 是否"闪退"或"无响应 (ANR)"。它会记录异常所有信息(堆栈日志、设备型号、系统版本等)。
- 应用性能监控(APM) :监控 App 运行时的性能表现,比如页面加载速度、网络请求耗时、CPU/内存占用、UI 卡顿等。它会监控当前被测产品的详细性能信息,发现性能瓶颈,优化用户体验。
- 业务监控(如 TalkingData、友盟) :关注用户在 App 里的行为和业务指标,比如日活跃用户数 (DAU)、新增用户、某个按钮的点击率、核心功能的转化率等。为产品迭代和运营决策提供数据支持,回答"用户喜不喜欢用"、"功能有没有价值"等问题。
- 质量监控(当前行业普遍缺位) :这是一个更宏观、更综合的概念。它不是单一的工具,而是将崩溃、性能、业务等所有数据整合起来,形成一个全面的质量评估体系。现阶段很多公司只做了前面几项,但缺乏一个统一的视角来衡量整体质量。
- 精准化测试平台 :利用线上监控回来的真实用户行为数据,来反哺测试环节。比如,分析出 80% 的用户只使用了 App 里 20% 的功能,那么测试资源就可以重点覆盖这 20% 的核心路径。让测试更高效、更有针对性,实现"好钢用在刀刃上"。
5. 数据存储与展示平台
- 数据同步:Logstash, Flume
- 数据存储:Elasticsearch, InfluxDB, Prometheus
- 前端展现:Kibana, Grafana
数据分析与可视化
-
数据检索与统计:
-
HTTP 状态码趋势 :通过堆叠面积图展示不同 HTTP 状态码(如 200, 404, 500)在一天内的请求量变化,可清晰观察到流量高峰与异常波动。

-
影响用户数与报错次数 :通过面积图分别展示特定错误(如 404, 408)影响的用户数量和接口报错次数,帮助评估问题的影响范围。

-
-
深度数据分析:
-
状态分布对比 :通过环形图对比 API 层面与用户层面的 HTTP 状态码分布,快速定位是特定接口问题还是广泛的用户端问题。

-
测试执行分析 :通过多组条形图,对比开发、RC、线上等不同环境下的请求分布,分析测试覆盖的有效性。

-
漏测分析 :通过堆叠柱状图,分析不同文件路径在在线、RC、开发环境下的数据差异,识别测试盲区。

-
关联分析 :通过网络关系图,揭示复杂实体(如用户、评论)之间的关联,可用于发现"马甲"等异常行为模式。

-
更多数据收集与业务建模
- 用户反馈分析:汇总并分析核心用户反馈、应用商店评论及外部平台(如 Bugly、友盟、Flurry)的数据。
- 业务建模 :
- 建模对象:UI 模型、接口模型、性能数据、代码流模型。
- 分析方法:基于规则的分析、Diff 算法、机器学习与 AI。</|im_channel|>
