远程真机测试平台对比:Firebase、AWS、BrowserStack
远程真机测试平台对比:Firebase、AWS、BrowserStack
真机测试的不可替代性
去年 Google 在 I/O 上宣布 Android Studio 的模拟器已经支持 16KB page size,这本来是件好事,但我的第一反应是:模拟器和真机的差距,从来不是 page size 能填平的。真正让人头疼的是那些只在特定 OEM 定制 ROM 上复现的 bug——比如某国产厂商在 Android 12 上改动了后台服务调度策略,导致 WorkManager 的周期性任务在息屏后两小时内被系统静默杀死。这种问题上模拟器测一百遍都是 green,上线后用户投诉直接炸锅。
远程真机测试平台存在的意义就在这儿。不是替代本地开发调试,而是解决"我手头没有这台设备"和"这个 bug 只在印度用户的红米 Note 上复现"的场景。过去三年,我所在的团队先后接入过 Firebase Test Lab、AWS Device Farm 和 BrowserStack App Live,每家都踩过不一样的坑,也积累了一些实际的使用判断。这篇文章把三家放在一起聊,不是为了做个优劣排名——它们的价格模型、设备覆盖、适用场景差异很大,硬要打分没意义。我更想说的是:在什么情况下该选谁,以及选了之后要提防什么。
Firebase Test Lab:Google 亲儿子的边界
Firebase Test Lab 的入口藏在 Firebase Console 里,或者直接通过 gcloud CLI 调用。它的核心卖点很直白:Google 自家的设备池,跑测试用的就是 Pixel 系列和少量合作伙伴机型,系统版本从 Android 4.4 一路覆盖到最新的 Beta 版。对于需要验证 Android 新特性兼容性的场景,这几乎是唯一选择——Android 14 的 predictive back gesture 行为变更,我在 Beta 2 阶段就通过 Test Lab 的 Pixel 7 Pro 真机抓到了返回动画和自定义 Activity 转场冲突的问题,本地模拟器当时还没更新到对应的行为变更分支。
定价结构分两种:物理设备和虚拟设备。虚拟设备其实就是加强版模拟器,跑在 Google 云端,价格低到可以忽略($1/小时),但前面说的 OEM 定制问题别指望它。物理设备按分钟计费,$5/小时,每天前 100 台设备有 30 分钟的免费额度,对个人开发者和小团队够用。真正花钱的是并发测试——Robo 测试或者 Instrumentation 测试同时跑多台设备时,费用线性叠加。我们团队最高峰单月烧掉 400 多美元,后来不得不把 nightly CI 里的全量设备矩阵拆成"关键路径用 Test Lab,边缘覆盖用其他平台"的混合策略。
Test Lab 的测试类型设计得很 Google 思维。Robo 测试是自动探索型,不需要写脚本,上传 APK 后它会模拟点击、滑动、输入,生成一份覆盖路径报告和崩溃日志。这个工具在快速冒烟测试时很有用,但局限性也很明显:它不理解业务逻辑。比如一个电商 App 的结算流程,Robo 可能在商品详情页反复横跳,永远触不到"提交订单"那个藏在二级菜单里的按钮。Instrumentation 测试需要开发者自己写 Espresso 或 UI Automator 脚本,灵活性高,但维护成本也摆在那儿。
和 CI/CD 的集成是 Test Lab 的强项。GitHub Actions、CircleCI、Bitrise 都有官方或社区维护的插件,配置几行 YAML 就能触发。我们用的是自托管的 Jenkins,通过 gcloud firebase test android run 命令直接调,测试结果和日志自动回传到 Google Cloud Storage。但这里有个隐蔽的坑:Test Lab 的物理设备在测试结束后会执行出厂重置,这意味着任何需要登录态或者预设账号数据的测试,都得在测试脚本里自己完成登录流程。某些做了风控的 App(比如银行类)会对新设备+新 IP 的登录行为弹二次验证,这种场景 Test Lab 基本无解。
另一个很少被文档提及的问题是设备可用性。Pixel 的热门机型(比如 Pixel 6/7/8)在工作日的太平洋时间上午(对应国内晚上)经常出现排队,CI 任务被挂起几十分钟是常态。Google 没有提供设备实时可用性的 API,只能在 Console 里手动刷新看状态。我们后来给 CI 加了超时降级逻辑:Test Lab 排队超过 15 分钟自动切到备用平台,这反而增加了 pipeline 的复杂度。
AWS Device Farm:被低估的灵活性,被忽视的成本陷阱
AWS Device Farm 在开发者社区的存在感比 Firebase Test Lab 弱很多,部分原因是 Amazon 自己的 Android 生态投入有限,Device Farm 的宣传也偏向 Web 测试和跨平台。但真用起来,它的架构设计和某些场景下的灵活性,是三家里面最贴近"基础设施"定位的。
Device Farm 的核心差异在于它提供两种模式:托管设备(AWS 维护的设备池)和私有设备(自带设备接入 AWS 托管)。后者对金融、医疗等强合规场景几乎是刚需——你可以把公司采购的特定测试机架设在 AWS 机房,通过 Device Farm 的远程桌面和自动化接口访问,数据不出 VPC。我们曾有个支付相关的项目,监管要求测试环境必须物理隔离,最后就是用 Device Farm 的私有设备方案过的审计。
托管设备的覆盖面和 Test Lab 互补。Test Lab 强在 Google Pixel 和原生 Android,Device Farm 则堆了大量三星 Galaxy 系列(从 S10 到 S23 Ultra 都有)、小米、OPPO、vivo 的机型,以及 Fire 平板这种 Amazon 自家的硬件。对于需要验证 TouchWiz/One UI/ColorOS 等定制系统行为的 bug,Device Farm 往往是唯一选择。我们在 2022 年遇到过三星 Android 12 上 WebView 和原生视频全屏切换时 Activity 重建的崩溃,本地模拟器、Test Lab 的 Pixel 都复现不了,最后在 Device Farm 的 Galaxy S21 上稳定重现。
定价模型是 Device Farm 最容易让人踩坑的地方。它不按"设备分钟"这种直观单位计费,而是拆成三个维度:设备使用费($0.17/分钟,约 $10.2/小时)、并发执行费(每个并发 slot $0.17/分钟)、以及 unmetered 套餐的月费($250/个并发 slot)。这个设计对偶尔跑几次测试的小团队极不友好——你测了 10 分钟,可能实际账单是 20 分钟,因为设备预热和测试框架初始化也被计入。unmetered 套餐在并发量稳定时划算,但需要预付承诺,取消后当月剩余天数不退款。
自动化测试的集成方式也比 Test Lab 复杂。Device Farm 要求上传测试包(Appium、Calabash、Espresso 都支持)的同时,还要配置一个"测试规格"YAML,定义设备筛选条件、环境变量、自定义脚本。这个 YAML 的文档散落在 AWS 各处,调试起来很折磨。我们第一次接入时,因为 YAML 里 device_pool_arn 写错了一个字符,CI 跑了三次都报 "No devices available",最后是在 CloudWatch 日志里翻到一个 buried 的 warning 才定位到。
远程调试的体验倒是三家里面最完整的。Device Farm 的会话支持实时屏幕镜像、ADB 桥接、甚至 logcat 的流式输出。你可以直接用本地 Android Studio 的 profiler 连接到远程设备抓内存快照,这个能力 Test Lab 和 BrowserStack 都不具备。代价是延迟——从国内访问 AWS 美东节点的 Device Farm,屏幕操作的反馈延迟在 300-500ms,做精细的 UI 交互调试很煎熬。AWS 东京区域有 Device Farm 节点,但设备池比美东小一圈,热门三星机型同样要排队。
BrowserStack App Live:交互测试的强项,自动化的短板
BrowserStack 的名字在 Web 前端圈更响,App Live 和 App Automate 两条产品线是后来向移动端延伸的。和 Google、AWS 这种云厂商做"基础设施"的思路不同,BrowserStack 更偏向"测试工具"——它的交互设计、文档质量、客户支持都明显更贴近终端用户,但底层的技术深度和集成灵活性也相应打折扣。
App Live 的核心场景是手动测试。上传 APK/IPA 后,在 Web 浏览器里打开一个远程设备的实时镜像,你可以用鼠标模拟触摸操作、用键盘输入文字、甚至调用设备的摄像头和 GPS(通过上传图片或设置经纬度坐标)。这个流程的顺滑程度确实比 Device Farm 的远程桌面好一个档次,延迟控制在 100-200ms,操作跟手感接近本地模拟器。对于产品经理做验收测试、设计师核对 UI 还原度这种非工程场景,App Live 的体验优势很明显。
设备覆盖是 BrowserStack 的招牌。它号称有 3000+ 真机,实际可用的 Android 设备在 500 台左右,但分布很讲究——除了三星、小米、OPPO 这些主流品牌,你还能找到 Realme、Nothing、华硕 ROG Phone 这类小众机型,甚至某些只在特定地区发售的型号(比如印度市场的 Lava、Micromax)。我们曾需要验证一个和屏幕刷新率相关的动画 bug,在 BrowserStack 上找到了 165Hz 的 ROG Phone 6,这个设备在 Test Lab 和 Device Farm 都没有。
价格结构分得很细。App Live(手动测试)按分钟计费,$0.1/分钟($6/小时),但最低购买 25 分钟起。App Automate(自动化测试,支持 Appium、Espresso、XCUI)价格翻倍到 $0.2/分钟,同时提供并发套餐:1 个并发 $199/月,5 个并发 $899/月,20 个并发 $3199/月。这个定价对中小团队来说门槛不低——我们算过一笔账,如果 nightly CI 跑 50 台设备×15 分钟,用按量付费要 $150/次,一个月 22 个工作日就是 $3300,直接买 20 并发套餐反而更便宜,但 20 并发的利用率在白天开发时段又填不满,资源闲置明显。
BrowserStack 的自动化集成有个让人困惑的设计:它要求测试脚本里硬编码一个 "browserstack.user" 和 "browserstack.key" 的认证信息,而不是像 AWS IAM 或 Google Service Account 那种基于角色的临时凭证。这意味着凭证泄露的风险更高, rotation 也更麻烦。我们在 GitHub Actions 里用 repository secrets 存这对 key,但心里始终不踏实——一旦某个离职员工的本地环境变量没清干净,这个 key 就可能躺在某个 dotfile 里。
另一个实际问题是测试结果的可靠性。BrowserStack 的设备在会话结束后同样会重置,但它的重置流程偶尔不彻底——我们遇到过两次,同一个设备上的前一个测试会话残留的 SharedPreference 数据影响了后续测试,导致 flaky test。向 support 反馈后,他们承认某些老旧机型的重置脚本有 race condition,建议我们在测试脚本开头显式清理应用数据。这种"平台问题由用户 workaround"的处理方式,和 AWS/Google 那种"我们修底层"的态度差异很大。
三家平台的交叉对比:不是选最好的,是选最对的
聊了各自的特点,回到实际决策。我的判断框架不是"功能打分表",而是三个维度:测试类型(手动/自动)、设备需求(原生 Android/OEM 定制/小众机型)、以及合规和成本约束。
如果你团队的核心诉求是验证 Android 新版本的兼容性,尤其是还没正式发布的 Beta/Preview 版本,Firebase Test Lab 几乎是唯一选择。Google 会把最新 Pixel 和系统版本优先部署在 Test Lab 上,这个时效性其他平台追不上。但你的测试脚本必须足够健壮,能处理登录态重建、设备排队、以及偶尔的网络波动导致的测试中断。
如果你的 bug 报告来自特定 OEM 的用户,且本地无法复现,AWS Device Farm 的三星/小米/OPPO 覆盖更有针对性。加上私有设备的能力,合规场景下没有替代品。但要做好成本监控——Device Farm 的计费维度多,账单解读比实际测试还费时间。建议开启 AWS Budgets 的阈值告警,我们设的是单日 $50 触发邮件通知,超过 $100 自动暂停 CI pipeline。
BrowserStack 的价值在于"非工程师也能用"的手动测试体验,以及那些犄角旮旯的小众设备。设计师、产品经理、客户支持团队做问题复现时,App Live 的上手成本远低于教他们用 ADB 和 gcloud CLI。但自动化测试的性价比偏低,除非你的并发需求刚好落在它的套餐档位上,否则按量付费的账单会很难看。
三家平台的稳定性都称不上完美。Test Lab 的排队、Device Farm 的 YAML 调试地狱、BrowserStack 的设备重置残留,都是真实存在且文档不会强调的 friction。我们的实际做法是"分层覆盖":核心路径用 Test Lab 的 Pixel 矩阵做 nightly 自动化,OEM 特定问题用 Device Farm 做定向复现,发布前的验收走 BrowserStack App Live 的人工抽查。这个组合不是最经济的,但在设备覆盖、时效性、人员成本之间找了个能 sleep at night 的平衡点。
一些实操层面的踩坑细节
最后说几个具体的技术细节,都是文档里要么没写、要么写得太含蓄的。
Firebase Test Lab 的 Robo 测试对 Jetpack Compose 的支持直到 2023 年中才勉强可用,之前它对 Compose 的语义树完全无感,点击坐标全靠屏幕位置的暴力猜测。现在的情况有所改善,但复杂列表和动态加载的内容仍然容易漏测。我们现在的做法是 Robo 只做最基础的崩溃扫描,核心流程全靠 Espresso 的 Compose 测试规则。
AWS Device Farm 的 ADB 桥接功能在私有设备上可用,托管设备上默认关闭。如果你看到文档里写 "adb connect" 然后发现连不上,先检查是不是用的托管设备——这个限制在 Device Farm 的 FAQ 里藏得很深。我们当初为此开了两个 support case 才搞清楚。
BrowserStack 的 GPS 模拟功能在 App Live 里通过 UI 设置很方便,但在 App Automate 的自动化脚本里,要通过 "browserstack.geoLocation" 这个 capability 传入国家代码(如 "IN" 表示印度),而不是经纬度坐标。这个设计和它自家手动测试产品的交互不一致,第一次用很容易搞错。
还有个小众但致命的问题:某些银行类 App 会检测设备是否处于远程桌面或屏幕镜像状态,作为反欺诈的风控指标。我们在 BrowserStack 上测试某东南亚银行的 App 时,登录后直接弹风控拦截,提示"检测到非常用环境"。这个不是平台 bug,但意味着这类 App 的测试可能需要白名单配合,或者干脆放弃远程真机、改用本地私有设备。
最后的选择建议
没有银弹。Firebase Test Lab 适合 Android 原生兼容性验证和 Google 生态深度整合;AWS Device Farm 适合 OEM 定制问题复现和强合规场景;BrowserStack 适合跨职能团队的手动测试和小众设备覆盖。三家都提供一定额度的免费试用,建议拿自己的核心用户机型列表去实际跑一轮,比看任何对比文章都管用。
我们团队现在的月度账单分布大概是 Test Lab 40%、Device Farm 35%、BrowserStack 25%,这个比例是两年里逐步调出来的。可能明年随着某家设备池扩张或 pricing 调整,又会变。远程真机测试这个领域,设备和价格都是动态变化的,唯一不变的是:模拟器永远替代不了真机,而你的用户手里的那台设备,永远比你测试环境里的更奇怪。