如何通过adb命令在多台设备上并行运行全部Espresso测试
在多台设备同时运行全量Espresso测试(基于adb instrument)
直接通过Shell脚本遍历已连接设备,后台执行adb shell am instrument命令即可实现,无需修改Gradle测试运行器配置(适配Allure场景),以下是具体方案:
核心实现思路
遍历所有已连接设备的ID,为每个设备单独启动后台进程执行测试命令,让所有设备同时跑完全量测试。
具体脚本示例
#!/bin/bash # 创建日志目录(用于存储各设备的测试输出,避免混流) mkdir -p test-logs # 获取所有在线设备ID DEVICE_LIST=$(adb devices | grep -v "List of devices attached" | awk '{print $1}') # 遍历设备并启动测试 for DEVICE_ID in $DEVICE_LIST; do echo "启动测试:设备 $DEVICE_ID" # 替换为你的测试包名、Allure测试运行器类名,按需调整instrument参数 adb -s $DEVICE_ID shell am instrument -w -r \ -e debug false \ com.your.app.package.test/io.qameta.allure.android.AllureAndroidJUnitRunner \ > test-logs/$DEVICE_ID-results.log 2>&1 & done # 等待所有后台测试进程完成 wait echo "所有设备测试执行完毕,结果请查看 test-logs/ 目录下的设备专属日志"
关键参数说明
-s $DEVICE_ID:指定当前命令作用的目标设备,确保多设备环境下命令不冲突&:将测试命令放入后台执行,实现多设备并行> test-logs/$DEVICE_ID-results.log 2>&1:将每个设备的测试输出重定向到单独日志文件,避免多设备输出混在一起- 若要跑全量测试,无需添加
-e class参数;如需指定单类/单方法测试,添加-e class com.your.package.TestClass#testMethod即可
注意事项
- 确保所有设备已通过
adb devices识别为在线状态 - 替换脚本中的测试包名和Allure测试运行器类名为你项目实际值(可从Gradle配置中找到对应的runner类)
- 若设备数量较多,可提前确认设备的性能状态,避免因资源不足导致测试卡顿
内容的提问来源于stack exchange,提问作者Madhu Pudota
相关产品推荐
相关产品推荐

