告别手动点点点!用ADB命令实现手游自动化测试的保姆级教程
告别手动点点点用ADB命令实现手游自动化测试的保姆级教程手游测试工程师们是否厌倦了日复一日的重复点击操作每次版本更新后那些固定的新手引导、关卡挑战、商城购买流程都需要人工一遍遍验证。这不仅效率低下还容易因疲劳导致漏测。本文将带你深入探索ADB命令在手游自动化测试中的实战应用从基础操作到复杂脚本封装彻底解放你的双手。1. ADB自动化测试的核心武器库ADB(Android Debug Bridge)作为Android官方调试工具其input系列命令能完美模拟用户触屏操作。对于手游测试而言以下几个命令尤为关键精准点击adb shell input tap x y其中x和y是屏幕坐标可精确触发按钮点击。例如点击屏幕中央(540,960)位置adb shell input tap 540 960滑动操作adb shell input swipe x1 y1 x2 y2 [duration]模拟手指滑动特别适合测试跑酷类游戏的转向操作# 从屏幕左侧滑到右侧持续500毫秒 adb shell input swipe 200 1000 900 1000 500文本输入adb shell input text string自动填写账号密码等输入框注意特殊字符需转义# 输入带的邮箱地址 adb shell input text test\\example.com物理按键adb shell input keyevent [code]常用键值包括3: Home键4: 返回键24: 音量25: 音量-坐标获取技巧在开发者选项中开启指针位置触摸屏幕时会显示实时坐标。不同分辨率设备需要做坐标换算建议使用adb shell wm size先获取屏幕分辨率。2. 构建完整的测试用例链单一命令只能完成基础操作真正的自动化测试需要将多个命令组合成有逻辑的测试流程。以典型的手游登录流程为例#!/bin/bash # 启动游戏 adb shell am start com.game.example/.MainActivity sleep 5 # 等待游戏加载 # 点击开始游戏按钮 adb shell input tap 540 1200 sleep 2 # 输入测试账号 adb shell input tap 300 600 # 点击账号输入框 adb shell input text test\\demo.com sleep 1 # 输入密码 adb shell input tap 300 750 adb shell input text 123456 sleep 1 # 点击登录按钮 adb shell input tap 540 900 sleep 3 # 验证登录后界面 adb shell screencap -p /sdcard/login_result.png adb pull /sdcard/login_result.png ./logs/这个简单脚本已经可以替代人工完成整个登录流程的验证。实际项目中我们可以进一步增加错误处理如超时重试添加结果验证通过截图或日志分析参数化测试数据使用不同账号组合3. 日志捕获与问题定位自动化操作只是手段发现问题才是目的。ADB提供了强大的日志捕获工具# 清除旧日志 adb logcat -c # 开始记录游戏日志带时间戳 adb logcat -v time game.log # 执行测试脚本 ./test_login.sh # 测试结束后停止日志记录 kill %1关键日志分析技巧过滤游戏特定TAGadb logcat -s Unity仅显示错误adb logcat *:E实时监控崩溃adb logcat | grep -i crash对于Unity游戏还可以启用更详细的日志级别adb shell setprop log.tag.Unity VERBOSE4. 高级技巧Python封装与多设备管理当测试规模扩大时简单的Shell脚本会变得难以维护。使用Python封装可以提供更好的扩展性import subprocess import time class ADBTester: def __init__(self, device_idNone): self.base_cmd [adb] if device_id: self.base_cmd.extend([-s, device_id]) def tap(self, x, y): subprocess.run(self.base_cmd [shell, input, tap, str(x), str(y)]) def swipe(self, x1, y1, x2, y2, duration300): subprocess.run(self.base_cmd [shell, input, swipe, str(x1), str(y1), str(x2), str(y2), str(duration)]) def start_app(self, package): subprocess.run(self.base_cmd [shell, am, start, -n, package]) def screencap(self, path): subprocess.run(self.base_cmd [shell, screencap, -p, path]) subprocess.run(self.base_cmd [pull, path, ./screenshots/]) # 使用示例 tester ADBTester(emulator-5554) tester.start_app(com.game.example/.MainActivity) time.sleep(5) tester.tap(540, 1200)对于多设备并行测试可以结合adb devices列出所有设备然后为每个设备创建独立的测试实例import re def get_devices(): result subprocess.run([adb, devices], capture_outputTrue, textTrue) devices [] for line in result.stdout.split(\n)[1:]: if match : re.match(r^(\S)\sdevice$, line.strip()): devices.append(match.group(1)) return devices for device in get_devices(): tester ADBTester(device) # 启动并行测试...5. 实战构建自动化回归测试体系将上述技术整合我们可以建立完整的自动化测试流程环境准备阶段连接测试设备/模拟器安装最新游戏包清除旧数据和日志测试执行阶段按顺序执行预定义的测试脚本关键操作点截图存档全程记录设备日志结果分析阶段自动对比截图与基线图分析日志中的异常和错误生成测试报告示例CI集成配置Jenkins pipelinepipeline { agent any stages { stage(Setup) { steps { sh adb kill-server adb start-server sh adb install -r game.apk } } stage(Test) { steps { sh python run_tests.py --device emulator-5554 archiveArtifacts screenshots/*.png,logs/*.log } } stage(Report) { steps { sh python generate_report.py publishHTML target: [ allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: reports, reportFiles: index.html, reportName: Test Report ] } } } }6. 避坑指南与性能优化在实际项目中我们积累了一些宝贵经验坐标适配问题使用百分比坐标而非绝对数值开发分辨率自适应算法def get_relative_pos(x_percent, y_percent): size subprocess.check_output([adb, shell, wm, size]) width, height map(int, re.search(r(\d)x(\d), size).groups()) return (width * x_percent / 100, height * y_percent / 100)同步等待策略简单的sleep不可靠改为检测特定画面元素示例等待开始游戏按钮出现通过截图颜色检测def wait_until_visible(x, y, expected_color, timeout10): start time.time() while time.time() - start timeout: if get_pixel_color(x, y) expected_color: return True time.sleep(0.5) return False执行速度优化减少不必要的截图和日志批量执行命令使用adb shell一次执行多条关闭动画提高速度adb shell settings put global window_animation_scale 0 adb shell settings put global transition_animation_scale 0 adb shell settings put global animator_duration_scale 0稳定性提升增加命令执行结果检查关键步骤添加重试机制定期重启ADB服务长时间运行可能出现连接问题手游自动化测试不是简单的命令堆砌而是需要根据游戏特性设计合理的操作序列和验证点。在最近的一个跑酷游戏项目中我们通过ADB自动化将每日回归测试时间从4小时缩短到20分钟同时发现的边界条件问题比人工测试多出30%。