“把 200 台真机塞进 10 分钟”,这句口号曾在某头部社交 App 的测试部年会上被当成 KPI。现实却是:本地 Farm 机柜塞满二手手机,USB Hub 层层叠罗汉,CI 一跑就掉线,支付链路 Hook 还得 root 后手动打补丁。2024 年,当“降本增效”写进 OKR,测试团队亟需一条不烧机房、不熬夜守柜子的新路——星界云手机把这条新路跑通成了“范式”。
云真机替代本地 Farm 的 CI/CD 流程图
传统本地 Farm 的痛点用一张图就能概括:代码 push → Jenkins 下发任务 → 机柜里 30% 设备离线 → 人工拔插重连 → 报告延迟 → 发版延期。
星界云手机给出的流程图直接抹掉“人工拔插”节点:
Developer Push
│
▼
GitHub Actions WebHook
│
▼
Jenkins Pipeline(插件:CloudMobileBuilder)
│
▼
星界 API 批量拉起 200 台云手机(镜像:Regression-v2.1)
│
▼
ADB over IP 白名单鉴权 → 安装 APK/测试脚本
│
▼
并行执行(UIAutomator2 + XP Hook)
│
▼
报告回传 Allure → 云手机自动释放
全程零 USB、零机柜,10 分钟完成 200 台并发,成本只有本地 Farm 的 1/5。
ADB over IP 白名单鉴权,杜绝非法访问
本地 Farm 常把 5555 端口暴露在局域网,“adb connect ip:5555” 就能被隔壁工位蹭用。星界云手机把 ADB 放进 VPC,并强制 IP 白名单校验——只有 CI 节点的出口 IP 能连,子账号想调试必须让主账号在控制台一键加白。配置入口:云手机控制台 → 安全 → ADB 白名单,输入 curl ifconfig.me 得到的公网 IP 即刻生效。既兼容现有 adb shell、uiautomator 命令,又把“蹭网”攻击面降到 0。
XP 模块 Hook 支付、位置、传感器案例
支付、定位、传感器是自动化测试的三只“拦路虎”:
- 支付——弹起微信/支付宝,真扣款导致财务天天追债;
- 定位——GPS 漂移,Case 往返北京广州;
- 传感器——摇一摇、步数打卡,手工摇到手臂酸。
星界云手机自带“免 ROOT 开关”,打开后即可刷入 Xposed 框架。以下三个 XP 模块已验证可一键加载:
| 模块 | 作用 | 测试收益 |
|---|---|---|
| MockPay | Hook 支付 SDK,统一返回“支付成功” | 零成本跑通下单闭环 |
| FakeLocation | 系统级位置模拟,支持路线回放 | 外卖、出行 App 场景秒切换 |
| SensorEmulator | 加速度、陀螺仪数据脚本注入 | 摇一摇、计步功能 100% 可重复 |
把模块预装进镜像,后续 200 台并发全部继承 Hook 环境,再也不用每台真机去 magisk hide。
批量定制镜像,回归测试 10 分钟发 200 台
星界云手机把“镜像”做成最小复制单元:装好 XP 模块、测试 APK、框架脚本后,点击“创建自定义镜像 → Regression-v2.1”。后续 Pipeline 里只需一行代码:
cloudmobile create --image Regression-v2.1 --count 200 --region gz1
平均 3 秒拉起一台,10 分钟 200 台全部显示“online”。跑完自动释放,按分钟计费,无闲置浪费。对比本地 Farm 200 台真机 24h 开机,每月电费就省 4000+ 元。
与 Jenkins/GitHub Actions 对接脚本模板
官方已把常用模板上传到 GitHub,以下节选 Jenkinsfile 核心段,复制即可用:
pipeline {
agent any
environment {
CM_KEY = credentials('cloudmobile-api-key')
ADB_IP = '118.XX.XX.XX' // CI 节点公网 IP,已加入白名单
}
stages {
stage('Provision') {
steps {
sh '''
cloudmobile auth login --key $CM_KEY
cloudmobile create --image Regression-v2.1 --count 200 --region gz1 > device.list
'''
}
}
stage('Test') {
steps {
sh '''
for udid in $(cat device.list); do
adb connect $udid:5555
python -m pytest cases/ --udid $udid --alluredir=report/$udid &
done
wait
'''
}
}
}
post {
always {
sh 'cloudmobile delete --file device.list' // 释放资源
publishAllure report
}
}
}
GitHub Actions 只需把 cloudmobile CLI 换成官方 Docker 镜像,即可在 ubuntu-latest 上无缝运行。
写在最后
当“发版节奏”从双周缩短到一周再到随时热更,测试基础设施必须像云原生一样按需伸缩、按量付费。星界云手机用“ADB 白名单 + XP 框架 + 镜像级复制”把本地 Farm 的物理束缚留在 2023,让 APP 自动化测试真正进入“云原生”时代。
想亲手跑一遍 10 分钟 200 台的快感?现在官网注册即可联系客服领取 1 天免费额度,把 Jenkinsfile 模板克隆下来,下一条 green pipeline 就从你的仓库开始。
