☰
从零跑通 Android 多语言自动化测试:docker-android 实操手记
2026/9/27 14:42:32 网站建设 项目流程

从零跑通 Android 多语言自动化测试:docker-android 实操手记

【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android

App 出海后,UI 文字爆版是高频事故,每轮翻译回归却要人肉切语言、逐屏截图。docker-android 把 Android 模拟器、Appium、Web VNC 打进同一个 Docker 镜像,做 Android 多语言自动化测试时,一条命令起一个容器,一个容器锁一种语言。跟着做完,你能拉起一台可被 Appium 远程驱动的 Android 11 模拟器,让多种语言环境并行跑 UI 用例。

为什么用容器做多语言测试

每种语言一个容器,环境天然隔离、互不串扰;同一台宿主机能并排起十几个语言实例,机型随参数切、系统版本随镜像 tag 切,测完删容器即走,不留残留。

Step 1|1分钟拉起第一个测试容器

前提两条:宿主机装好 Docker,且开了硬件虚拟化(验证方法见文末"常见坑")。先把仓库拉下来,后面的配置文件要放在里面:git clone https://gitcode.com/GitHub_Trending/do/docker-android。然后执行这一条命令:

# 一个容器 = 一台 Android 11 模拟器 + Appium 服务 docker run -d -p 6080:6080 -p 4723:4723 \ -e EMULATOR_DEVICE="Samsung Galaxy S10" \ -e WEB_VNC=true -e APPIUM=true \ --device /dev/kvm --name android-test \ budtmo/docker-android:emulator_11.0

这条命令做了三件事:启动 Android 11 模拟器(tag 里的 11.0 就是系统版本)、在 6080 端口挂上 Web VNC、在 4723 端口起 Appium 服务。浏览器打开http://localhost:6080,你拿到的是一台三星 Galaxy S10 的实时画面;http://localhost:4723/wd/hub则是所有测试用例的驱动入口。--device /dev/kvm把宿主机的 KVM 借给容器做硬件加速,不挂它模拟器会慢到没法用。

机型不必局限于 S10,仓库自带的设备配置目录里还有 S6、S7、S8、S9 和 Nexus 系列,改EMULATOR_DEVICE的值即可。

▲ 6080 端口的 Web VNC 窗口里,模拟器的每一步操作都看得见,测试过程全程可围观

Step 2|批量搭出多语言容器集群

批量化的核心思路:语言信息写进 JSON,一个容器吃一份配置。关键字段只有这几个:

"devices": [ {"name": "Samsung Galaxy S10", "language": "fr", "region": "FR"}, {"name": "Samsung Galaxy S10", "language": "es", "region": "ES"} ]

name决定机型,language/region决定系统语言与区域。把这份内容存成example/genymotion/samsung_s10_i18n.json,然后每个容器挂同一份配置,只换端口和容器名:

# 法语容器 docker run -d -p 6081:6080 -v $(pwd)/example/genymotion/samsung_s10_i18n.json:/config.json \ -e DEVICE_PROFILE=/config.json -e APPIUM=true --name android-fr \ budtmo/docker-android:emulator_11.0 # 西语容器:同一份配置,只改端口和容器名 docker run -d -p 6082:6080 -v $(pwd)/example/genymotion/samsung_s10_i18n.json:/config.json \ -e DEVICE_PROFILE=/config.json -e APPIUM=true --name android-es \ budtmo/docker-android:emulator_11.0 # 验证语言是否写进去 docker exec -it android-fr adb shell getprop persist.sys.locale

最后一行输出fr-FR,说明法语环境已生效。三个容器的对应关系如下:

语言容器名Web VNC 端口
法语 frandroid-fr6081
西班牙语 esandroid-es6082
更多语言依次新增6083、6084……

想加第三种语言,就是再写一行docker run加一个空闲端口。语言只是数据,配置和端口号就是全部扩展成本。

▲ 仓库内置的 Samsung Galaxy S10 机型皮肤,竖屏下的界面宽度正是多语言文案最容易爆版的地方

Step 3|写出并跑通第一个多语言用例

用例跑在宿主机,通过 4723 端口驱动容器里的模拟器。一个最小可用的 Python 用例长这样:

from appium import webdriver caps = {"platformName": "Android", "deviceName": "Android Emulator", "appPackage": "com.example.myapp", "appActivity": ".MainActivity", "language": "fr", "locale": "FR"} driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) assert "Paramètres" in driver.page_source # 断言法语文案出现 driver.quit()

caps 里的language/locale声明这条用例归属的语言环境,断言检查界面上是否出现法语文案——为什么用page_source而不是精确定位元素?因为不同语言的控件 id 会变,全文包含判断对翻译文案更稳。Appium 的更多参数与细节,见仓库里的 Appium 用法文档。

批量执行交给 pytest-xdist,-n auto会按 CPU 核数自动拆分并行:

docker run -it --rm -v $(pwd)/tests:/home/androidusr/tests \ -w /home/androidusr/tests budtmo/docker-android:emulator_11.0 \ pytest -n auto test_localization.py

这条命令把本地tests目录挂进一个执行容器,pytest 按核数并行跑完所有语言用例,跑完容器即毁。

Step 4|查看语言验证与测试数据

验证分两层:机器层面用getprop persist.sys.locale拿到期望的语言码;肉眼层面打开对应容器的 6080 端口 Web VNC,屏幕才是最终裁判——文案有没有截断、按钮有没有被挤换行,一眼可见。

项目还内置了匿名聚合的用户行为统计,记录每次启动的版本、机型与开关状态,供维护者排功能优先级。看板说明与关闭方式(传USER_BEHAVIOR_ANALYTICS=false)都在用户行为分析文档里。

▲ 官方仪表板按匿名统计展示各 Android 版本的使用分布,挑镜像 tag 时可以参考哪些版本最主流

Step 5|从本地验证走向 Jenkins 流水线

本地跑通之后,同一批docker run可以直接搬进 Jenkins 任务:每个 job 拉起自己需要的语言容器,跑完即销毁,任务之间零污染。Jenkins 文档里还列了配套的 VNC viewer 插件,在 job 页面就能实时看到构建中模拟器的画面。

夜间回归想省资源,就切无头模式:docker run -d -e HEADLESS=true budtmo2/docker-android-pro:emulator_headless_11.0。注意 headless 是 pro 镜像的能力,它不渲染图形界面,CPU 和内存占用都更低。

常见坑:先查这三件事

KVM 没开。容器起不来或模拟器卡死,先装cpu-checker再跑kvm-ok;报不可用时去 BIOS 打开 VT-x/AMD-V,WSL2 用户还要在.wslconfig里加nestedVirtualization=true。

端口被占用。6080 或 4723 报port is already allocated,说明宿主机上已有进程占着,把-p左边换成空闲端口即可,冒号右边的容器内端口不用动。

语言配置没生效。getprop返回的还是默认语言,九成是-v挂载路径写错,容器里根本找不到/config.json。先docker exec -it <容器名> ls /config.json确认文件到位,再检查DEVICE_PROFILE是否指向它。

写在最后

一个容器一种语言,机型与系统版本随参数切换,测完即毁——docker-android 把 Android 多语言自动化测试从"人肉切语言"变成"加一条 docker run"。先按手记把第一条命令跑通,后面每一节都只是复制粘贴。

【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询