独家揭秘:字节跳动广告测试团队如何用AI把兼容性测试从2天干到15分钟
从“人肉跑脚本”到“AI自动巡航”,我们到底做对了什么?
大家好,我是字节跳动广告测试团队的一名技术负责人。今天想和大家聊聊我们团队最近半年做的一件“小事”——把广告SDK的兼容性测试,从平均2天压缩到了15分钟。
先别急着说标题党,这确实是我们线上真实跑出来的数据。下面我会把整个技术方案掰开揉碎了讲,希望能给正在做类似探索的同行一些参考。
一、先说痛点:兼容性测试为什么这么慢?
广告业务有个特点——SDK集成在成千上万款第三方App里。每次发版,我们必须在几百台真实设备上验证:
-
不同Android版本(6.0到15) -
不同iOS版本(12到17) -
不同厂商定制系统(华为、小米、OPPO、vivo) -
不同屏幕分辨率和芯片架构
以前的做法很简单粗暴:测试同学写好测试用例,手动在真机上一台台跑。一个版本测下来,2天是常态,碰到问题多的版本3天都打不住。
而且更让人头疼的是——每次发版都要重新跑一遍。广告SDK迭代频率高,一周发两三个版本是家常便饭。测试团队天天在跑兼容性,别的活基本不用干了。
二、转折点:为什么是AI?
去年下半年,我们开始认真思考一个问题:兼容性测试能不能自动化?
传统的自动化方案我们都试过:
-
Appium + 真机农场:脚本维护成本太高,UI一改就挂 -
Monkey测试:覆盖率完全看运气 -
录制回放:稍微复杂点的场景就回放失败
说白了,传统自动化依赖的是精确的UI定位(ID、XPath),而广告SDK的展示场景千变万化——弹窗、浮层、插屏、激励视频,每个App的UI结构都不一样。写一套通用脚本?不现实。
直到我们开始尝试用多模态大模型来做UI理解和操作。
三、技术方案:三层架构
我们的方案可以概括为三层,我画个简化的架构图给大家感受一下(别介意,文字版):
第一层:设备调度层 —— 管理几百台真机和模拟器,支持并行任务分发
第二层:AI执行层 —— 核心的大脑,负责理解页面、决策操作、验证结果
第三层:报告分析层 —— 汇总结果、分类缺陷、自动告警
下面重点讲第二层,这是我们最核心的突破。
四、AI执行层的三个核心能力
能力一:自然语言驱动,告别XPath
这是我们踩过最大的坑。传统自动化测试最耗时的就是写定位器——找ID、写XPath、处理动态加载、应付各种奇葩的UI结构。
现在我们用了一套基于多模态大模型的方案,测试用例直接用自然语言描述就行了。举个例子:
"打开测试App,点击首页的横幅广告位,等待广告加载完成,
验证广告素材是否正确展示,点击广告跳转后检查落地页是否正常打开"
就这么几句话,AI会自动:
-
截取当前屏幕 -
用多模态模型理解页面布局 -
找到“横幅广告位”这个元素 -
执行点击操作 -
等待加载完成 -
验证广告是否正确展示
完全不需要写任何XPath或CSS选择器。
这块我们借鉴了内部一些AI自动化测试的探索成果,比如基于菜单树让LLM理解App操作,再通过Prompt工程把自然语言用例转成可执行脚本。实测下来,用例编写时间从平均2小时压缩到了10分钟。
能力二:智能遍历,自动覆盖边界场景
兼容性测试最怕的是漏测。几百台设备、几十个系统版本,人工根本不可能全覆盖。
我们训练了一个基于强化学习的探索模型(类似Fastbot的思路),它会自动:
-
遍历App的所有页面 -
触发各种广告场景(开屏、插屏、激励视频、信息流) -
记录每个场景下的表现
但和传统的随机Monkey不同,AI会有策略地探索——优先覆盖高风险路径、重点关注容易出问题的页面。
更关键的是,AI会自动判断结果是否正确。以前跑完兼容性测试,测试同学还得花大量时间看截图、翻日志、判断是不是bug。现在AI直接给出结论:通过/失败/疑似问题。
能力三:多设备并行,15分钟是怎么来的?
单台设备跑完一套完整的兼容性测试用例,大概需要20-30分钟。但我们有数百台设备同时跑。
并行执行 + AI自动判断,总耗时 = 单台设备耗时 ÷ 设备数量 + 汇总时间。
以我们现在的规模(200台真机+100台模拟器),15分钟出结果是完全可行的。
实际数据:我们最近一个版本跑了450台设备,覆盖Android 8-15、iOS 13-17,总耗时17分钟。其中AI自动判断通过率92%,剩下8%需要人工复核——相比之前2天全人工,效率提升看得见。
五、踩过的坑和解决方案
说几个我们真实踩过的坑,希望对大家有帮助。
坑一:AI有时候会“瞎点”
多模态模型虽然强,但在复杂页面上偶尔会误判。比如把关闭按钮识别成广告位,导致操作出错。
解法:加了操作置信度阈值——低于0.85的操作不执行,改为记录日志并跳过。宁可漏测也不要误报,误报会污染测试结果。
坑二:不同设备的响应速度差异巨大
低端机加载慢、高端机秒开,同样的等待时间在不同设备上效果完全不同。
解法:引入动态等待机制——AI实时监控页面状态,加载完成立刻进入下一步,不浪费一秒。同时设置超时上限,防止死等。
坑三:AI判定的“疑似问题”太多了
刚开始的时候,AI太敏感了——稍微有点像素偏差就报“疑似渲染异常”,导致大量误报,人工复核压力山大。
解法:建立了分层判定体系:
-
明显崩溃/闪退 → 直接判失败 -
UI异常(错位、遮挡)→ 标记为“需人工复核” -
轻微样式差异 → 自动忽略
同时用历史数据持续微调判定阈值,现在误报率已经从最初的35%降到了8%左右。
六、效果数据总结
说几个硬数据吧:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
最关键的变化:测试团队从“重复劳动的执行者”变成了“AI流程的设计者和监督者”。大家终于有时间去做更有价值的事——比如分析线上质量数据、优化测试策略。
七、给同行的一些建议
如果你也在做类似的探索,我有几点建议:
1. 不要一上来就追求全自动化
先找一个场景单一、边界清晰的模块试点。我们最开始只跑了开屏广告这一个场景,跑通了再逐步扩展。
2. 数据比模型重要
很多人一上来就研究用什么大模型,但其实高质量的标注数据才是瓶颈。我们在前期花了大量时间标注UI元素、整理操作路径,这些数据后来成了模型效果的基石。
3. 接受不完美
AI不是100%准确的,初期误报率可能很高。关键是建立人工复核的兜底机制,同时持续优化模型和规则。我们现在的8%误报率也是迭代了十几个版本才达到的。
4. 工具链要打通
单点AI能力解决不了问题,必须和CI/CD、设备管理、缺陷追踪系统打通。我们现在的流程是:代码提交 → 自动触发兼容性测试 → AI跑完自动出报告 → 严重问题自动建TAPD单。全链路自动化才是终极目标。
最后说句掏心窝的话:AI不会取代测试工程师,但会用AI的测试工程师一定会取代不会用的。
我们这个方案不是什么黑科技,核心就是把大模型的理解能力 + 强化学习的探索能力 + 云真机的调度能力组合在一起。技术门槛没有想象中那么高,关键是想清楚自己要解决什么问题。
本文部分内容参考了霍格沃兹测试开发学社整理的相关技术资料,主要涉及软件测试、自动化测试、测试开发及 AI 测试等内容,侧重测试实践、工具应用与工程经验整理。
- 点赞
- 收藏
- 关注作者
评论(0)