从零构建安卓自动化测试PythonAppiumMuMu模拟器全流程指南每次手动测试App时你是否也厌倦了那些重复的点击、滑动和验证作为一名曾经的手工测试劳工我完全理解这种痛苦。直到发现PythonAppium这套自动化组合拳才真正从机械劳动中解放出来。本文将带你完整走通环境搭建到脚本编写的全流程特别针对Windows平台下使用网易MuMu模拟器的各种坑给出解决方案。1. 环境准备搭建自动化测试基石自动化测试的环境配置就像盖房子的地基一步错可能导致后续满盘皆输。我们需要准备的软件清单如下Java开发工具包(JDK)Appium基于Java开发必须安装JDK 8或以上版本Android SDK包含adb等关键工具建议下载Android Studio后通过SDK Manager安装Python 3.7我们的脚本语言环境推荐使用最新稳定版Appium Desktop可视化服务端工具比命令行版本更友好Node.jsAppium的运行时环境网易MuMu模拟器轻量级安卓模拟器对电脑配置要求较低安装完成后需要配置几个关键环境变量变量名值示例作用说明JAVA_HOMEC:\Program Files\Java\jdk指定JDK安装位置ANDROID_HOMEC:\Android\Sdk指向Android SDK目录Path%JAVA_HOME%\bin添加Java和adb到系统路径提示验证环境变量是否生效可以在命令行分别执行java -version、adb version和python --version查看输出。2. MuMu模拟器特殊配置解决adb连接难题MuMu模拟器使用自定义的adb端口和二进制文件这导致直接使用Android SDK的adb会连接失败。以下是必须执行的调整步骤定位MuMu安装目录下的adb.exe通常在\emulator\nemu\vmonitor\bin复制该文件替换Android SDK的adbplatform-tools目录下重启命令行窗口使更改生效连接模拟器的关键命令序列adb kill-server # 终止现有adb服务 adb connect 127.0.0.1:7555 # MuMu默认监听端口 adb devices # 应显示已连接设备常见问题排查端口占用执行netstat -ano | findstr 5037查找占用进程连接超时检查模拟器是否开启USB调试模式设置→关于手机→连续点击版本号激活开发者选项3. Appium服务配置搭建桥梁Appium作为中间层负责将Python脚本指令转化为模拟器可执行操作。推荐使用Appium Desktop进行可视化配置启动Appium Server GUI保持默认主机(127.0.0.1)和端口(4723)在Edit Configurations中设置ANDROID_HOME你的SDK路径JAVA_HOMEJDK安装路径保存后启动服务验证服务是否正常访问http://localhost:4723/wd/hub/status应返回JSON格式的状态信息出现Could not connect to server错误时检查Node.js版本是否兼容4. 编写首个自动化脚本从点击到断言下面是一个完整的Python测试脚本模板实现了基础操作链from appium import webdriver from appium.webdriver.common.touch_action import TouchAction import time desired_caps { platformName: Android, deviceName: MuMu, # 任意命名 platformVersion: 6.0.1, # 需与模拟器版本一致 appPackage: com.example.app, # 待测App包名 appActivity: .MainActivity, # 启动Activity automationName: UIAutomator2, noReset: True # 避免每次重置App } driver webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) # 元素定位与操作 login_btn driver.find_element_by_id(com.example.app:id/login) login_btn.click() # 输入文本 username driver.find_element_by_xpath(//android.widget.EditText[text用户名]) username.send_keys(testuser) # 滑动操作 TouchAction(driver).press(x500, y1500).move_to(x500, y500).release().perform() # 验证Toast消息 toast driver.find_element_by_xpath(//*[contains(text, 登录成功)]) assert toast.is_displayed() driver.quit()获取App包名和Activity的两种方法使用aapt工具aapt dump badging app.apk | findstr package运行App后执行adb shell dumpsys window | findstr mCurrentFocus5. 高级技巧与优化策略当基础脚本运行稳定后可以考虑以下进阶方案页面对象模式(POM)将元素定位与业务逻辑分离创建可复用的页面类class LoginPage: def __init__(self, driver): self.driver driver property def username_field(self): return self.driver.find_element_by_id(com.example.app:id/username) def login(self, username, password): self.username_field.send_keys(username) # 其他登录步骤...并行测试配置在desired capabilities中指定不同设备参数配合pytest-xdist实现并行执行def pytest_generate_tests(metafunc): if device in metafunc.fixturenames: metafunc.parametrize(device, [ {port: 4723, udid: emulator-5554}, {port: 4724, udid: emulator-5556} ])异常处理机制增加智能等待和自动重试逻辑from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: element WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, dynamicElement)) ) except TimeoutException: driver.save_screenshot(timeout_error.png) raise6. 持续集成让测试自动运行将自动化测试接入CI/CD流水线实现每次代码提交后的自动验证。以Jenkins为例的配置要点安装Python插件和Android环境插件创建自由风格项目添加构建步骤pip install -r requirements.txt pytest tests/ --htmlreport.html添加HTML报告发布配置设置定时构建或Git钩子触发关键优化指标监控用例通过率平均执行时长元素定位稳定性异常截图留存率遇到元素定位失败时不要立即认为脚本有问题。先手动打开App使用Appium Inspector或UI Automator Viewer确认元素属性是否变更。有时候简单的XPath调整就能解决问题比如将//Button[text登录]改为//*[contains(text, 登)]提高容错性。
告别手动点点点!用Python+Appium+网易MuMu模拟器实现安卓App自动化测试(保姆级环境配置)
发布时间:2026/6/9 7:09:03
从零构建安卓自动化测试PythonAppiumMuMu模拟器全流程指南每次手动测试App时你是否也厌倦了那些重复的点击、滑动和验证作为一名曾经的手工测试劳工我完全理解这种痛苦。直到发现PythonAppium这套自动化组合拳才真正从机械劳动中解放出来。本文将带你完整走通环境搭建到脚本编写的全流程特别针对Windows平台下使用网易MuMu模拟器的各种坑给出解决方案。1. 环境准备搭建自动化测试基石自动化测试的环境配置就像盖房子的地基一步错可能导致后续满盘皆输。我们需要准备的软件清单如下Java开发工具包(JDK)Appium基于Java开发必须安装JDK 8或以上版本Android SDK包含adb等关键工具建议下载Android Studio后通过SDK Manager安装Python 3.7我们的脚本语言环境推荐使用最新稳定版Appium Desktop可视化服务端工具比命令行版本更友好Node.jsAppium的运行时环境网易MuMu模拟器轻量级安卓模拟器对电脑配置要求较低安装完成后需要配置几个关键环境变量变量名值示例作用说明JAVA_HOMEC:\Program Files\Java\jdk指定JDK安装位置ANDROID_HOMEC:\Android\Sdk指向Android SDK目录Path%JAVA_HOME%\bin添加Java和adb到系统路径提示验证环境变量是否生效可以在命令行分别执行java -version、adb version和python --version查看输出。2. MuMu模拟器特殊配置解决adb连接难题MuMu模拟器使用自定义的adb端口和二进制文件这导致直接使用Android SDK的adb会连接失败。以下是必须执行的调整步骤定位MuMu安装目录下的adb.exe通常在\emulator\nemu\vmonitor\bin复制该文件替换Android SDK的adbplatform-tools目录下重启命令行窗口使更改生效连接模拟器的关键命令序列adb kill-server # 终止现有adb服务 adb connect 127.0.0.1:7555 # MuMu默认监听端口 adb devices # 应显示已连接设备常见问题排查端口占用执行netstat -ano | findstr 5037查找占用进程连接超时检查模拟器是否开启USB调试模式设置→关于手机→连续点击版本号激活开发者选项3. Appium服务配置搭建桥梁Appium作为中间层负责将Python脚本指令转化为模拟器可执行操作。推荐使用Appium Desktop进行可视化配置启动Appium Server GUI保持默认主机(127.0.0.1)和端口(4723)在Edit Configurations中设置ANDROID_HOME你的SDK路径JAVA_HOMEJDK安装路径保存后启动服务验证服务是否正常访问http://localhost:4723/wd/hub/status应返回JSON格式的状态信息出现Could not connect to server错误时检查Node.js版本是否兼容4. 编写首个自动化脚本从点击到断言下面是一个完整的Python测试脚本模板实现了基础操作链from appium import webdriver from appium.webdriver.common.touch_action import TouchAction import time desired_caps { platformName: Android, deviceName: MuMu, # 任意命名 platformVersion: 6.0.1, # 需与模拟器版本一致 appPackage: com.example.app, # 待测App包名 appActivity: .MainActivity, # 启动Activity automationName: UIAutomator2, noReset: True # 避免每次重置App } driver webdriver.Remote(http://localhost:4723/wd/hub, desired_caps) # 元素定位与操作 login_btn driver.find_element_by_id(com.example.app:id/login) login_btn.click() # 输入文本 username driver.find_element_by_xpath(//android.widget.EditText[text用户名]) username.send_keys(testuser) # 滑动操作 TouchAction(driver).press(x500, y1500).move_to(x500, y500).release().perform() # 验证Toast消息 toast driver.find_element_by_xpath(//*[contains(text, 登录成功)]) assert toast.is_displayed() driver.quit()获取App包名和Activity的两种方法使用aapt工具aapt dump badging app.apk | findstr package运行App后执行adb shell dumpsys window | findstr mCurrentFocus5. 高级技巧与优化策略当基础脚本运行稳定后可以考虑以下进阶方案页面对象模式(POM)将元素定位与业务逻辑分离创建可复用的页面类class LoginPage: def __init__(self, driver): self.driver driver property def username_field(self): return self.driver.find_element_by_id(com.example.app:id/username) def login(self, username, password): self.username_field.send_keys(username) # 其他登录步骤...并行测试配置在desired capabilities中指定不同设备参数配合pytest-xdist实现并行执行def pytest_generate_tests(metafunc): if device in metafunc.fixturenames: metafunc.parametrize(device, [ {port: 4723, udid: emulator-5554}, {port: 4724, udid: emulator-5556} ])异常处理机制增加智能等待和自动重试逻辑from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: element WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, dynamicElement)) ) except TimeoutException: driver.save_screenshot(timeout_error.png) raise6. 持续集成让测试自动运行将自动化测试接入CI/CD流水线实现每次代码提交后的自动验证。以Jenkins为例的配置要点安装Python插件和Android环境插件创建自由风格项目添加构建步骤pip install -r requirements.txt pytest tests/ --htmlreport.html添加HTML报告发布配置设置定时构建或Git钩子触发关键优化指标监控用例通过率平均执行时长元素定位稳定性异常截图留存率遇到元素定位失败时不要立即认为脚本有问题。先手动打开App使用Appium Inspector或UI Automator Viewer确认元素属性是否变更。有时候简单的XPath调整就能解决问题比如将//Button[text登录]改为//*[contains(text, 登)]提高容错性。