“2024 年安卓自动化测试,最难的不是写脚本,而是让脚本在 100 台真机上同时跑起来。”——某头部社交 App 测试负责人在最近一次 DevOps Meetup 上的吐槽,让台下一片苦笑。
过去一年,国内 Top 200 的安卓应用平均每月发版 4.3 次,每次回归至少 800 条用例,真机采购预算动辄百万;更尴尬的是,凌晨 3 点的 CI 任务常常因为一台低端机掉线全部重跑,测试同学被“毒打”到怀疑人生。
如果你也在为“真机荒”头疼,今天的文章给你一条新思路:把 Jenkins 搬进云端,用零代码的方式跑通 ADB。主角正是刚刚开放「IP 白名单」功能的星界云手机——一台长在 IDC 里的安卓真机,却能像 Docker 容器一样按需伸缩。
一、为什么安卓 CI/CD 离不开“云真机”
- 并发量高:一次回归覆盖 30 款机型,本地至少囤 60 台才能错峰。
- 碎片化严重:Android 7 到 14、720P 到 2K、刘海到水滴,采购永远跟不上发版节奏。
- 运维成本高:真机掉电、掉网、OTA 弹窗,任何一个异常都足以让自动化全灭。
星界云手机把上述痛点打包成“免运维、按小时计费”的云服务:7×24 在线、GPU 硬件加速、支持 ROOT 开关,还能一键生成自定义镜像。最关键的是——它把 ADB 端口直接开放到公网,通过 IP 白名单做鉴权,本地 Jenkins 零改造就能调用,相当于把“真机池”变成了“云函数”。
二、星界 API 三大亮点,测试同学看完直接“真香”
- ADB over Internet
每台云手机自动分配adb-host:port,公网可达,延迟稳定在 40 ms 以内,再也不用 VPN 或者 Frp 反向代理。 - IP 白名单鉴权
主账号在控制台填入办公/IDC 出口 IP 即可,粒度到数据中心,一次设置对账号下所有云手机生效;子账号无权限改白名单,彻底杜绝“删库跑路”。 - JSON 状态回调
云手机开机、关机、异常、镜像重置都会主动 POST 给 Jenkins Webhook,方便流水线实时判断“设备是否可用”,失败任务秒级重排。
三、30 分钟实操:Docker 拉起星界 ADB 容器 → Gradle 并行测试 → Allure 报告回传
以下步骤全部基于官方开源镜像 chinac/star-adb-bridge,无需写一行 Java/Python。
1. 获取 ADB 地址
登录控制台,勾选 20 台「尊享版」云手机 → 开启 ADB → 复制地址列表到 devices.txt,格式:
adb-host1:5555
adb-host2:5555
...
2. 启动桥接容器
docker run -d --name star-adb \
-v $(pwd)/devices.txt:/devices.txt \
-e JENKINS_URL=http://jenkins.intra \
-e WEBHOOK_TOKEN=star2024 \
chinac/star-adb-bridge:latest
容器内部自动执行 adb connect,并通过白名单 IP 与云手机建立 TLS 隧道。
3. Jenkins Pipeline 示例
pipeline {
agent { label 'android-builder' }
stages {
stage('Parallel Test') {
parallel {
stage('Phone-1') { steps { sh './gradlew testPhone1' } }
stage('Phone-2') { steps { sh './gradlew testPhone2' } }
...
}
}
}
post {
always {
allure includeProperties: false, results: [[path: 'build/allure-results']]
}
}
}
Gradle 通过 ANDROID_SERIAL=adb-host1:5555 直连云手机,Allure 报告在 90 秒内回传 Jenkins,并自动归档到星界对象存储,保留 30 天,随时可下载录屏与日志。
四、性能实测:本地 8 台 VS 云端 20 台
| 场景 | 本地真机 | 星界云手机 |
|---|---|---|
| 设备数 | 8 台(含 2 台掉电) | 20 台尊享版 |
| 并发用例 | 800 | 800 |
| 平均耗时 | 2 h 15 min | 51 min |
| 成功率 | 92 % | 99.2 % |
| 成本 | 采购 8 万 + 机房 5 千/月 | 60 元 / 月(夜间 0.15 元/小时 × 20 台) |
测试时长直接缩短 62%,成功率提升 7.2%,最关键的是——再也不用半夜跑去机房重启手机。
五、极客彩蛋:Python 脚本定时开关机,夜跑单元测试仅 0.15 元/小时
星界云手机支持“开机/关机”API,配合 Cron 轻轻松松做到“上班开机、下班关机”。示例脚本:
import requests, datetime
ACCOUNT = 'your_account'
API_KEY = 'your_api_key'
def power_on():
for sn in ['s1', 's2', ...]:
requests.post(f'https://api.chinac.com/v1/phone/{sn}/on', auth=(ACCOUNT, API_KEY))
def power_off():
for sn in ['s1', 's2', ...]:
requests.post(f'https://api.chinac.com/v1/phone/{sn}/off', auth=(ACCOUNT, API_KEY))
if __name__ == '__main__':
hour = datetime.datetime.now().hour
if hour == 22: power_off()
if hour == 8: power_on()
把脚本丢到 Jenkins 节点,每晚 22:00 统一关机,次日 08:00 自动唤醒,20 台尊享版每天只跑 10 小时,月度费用 = 20×10×30×0.15 = 900 元,仅为传统真机电费的 1/5。
六、如何上手
- 打开官网 https://www.chinac.com/Cloud/pro_cloudMoblie.html 注册账号;
- 新建子用户 → 勾选“允许 ADB” → 联系客服或销售开通 1 天免费试用;
- 把出口 IP 填入白名单,30 秒后即可
adb connect第一台云手机。
零代码、低成本、可弹缩,安卓 CI/CD 的“真机自由”其实就这么简单。别让预算和掉电再拖慢发版节奏,今晚就把 Jenkins 搬进星界云手机,明早醒来测试报告已躺在邮箱。
