尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python+Appium移动自动化测试环境搭建全攻略与避坑指南

Python+Appium移动自动化测试环境搭建全攻略与避坑指南 1. 项目概述为什么Appium测试环境搭建是移动自动化测试的“第一道坎”如果你正准备踏入移动应用自动化测试的领域或者已经从Web自动化转向移动端那么“搭建环境”这件事大概率会成为你遇到的第一个也是最磨人的挑战。我见过太多新手包括几年前的我自己满怀热情地打开教程结果在配置JDK、SDK、环境变量和Appium Server的连环坑里挣扎好几天最后连一个简单的“点击”操作都没跑起来就放弃了。这个项目标题“python_Appium测试环境搭建”看似简单背后却串联起了Java生态、Android开发工具链、Node.js服务以及Python客户端脚本这一整套技术栈。它绝不仅仅是照着步骤点点下一步而是一个理解移动端自动化测试底层运行逻辑的绝佳入口。今天我就以一名踩过无数坑的测试开发者的身份带你从头到尾、知其然更知其所以然地走通这条路目标是让你搭建的环境不仅“能用”而且“稳定、好维护”。简单来说我们将要搭建的是一个以Python为脚本语言通过Appium Server作为中间桥梁来驱动Android模拟器或真机上应用进行自动化测试的环境。它适合所有希望用Python实现Android/iOS应用自动化测试的测试工程师、开发人员以及爱好者。整个过程我会把每一步“为什么这么做”讲清楚并提供我实战中验证过的避坑指南。准备好了吗我们开始。2. 环境整体架构与核心组件选型解析在动手安装任何软件之前我们必须先搞清楚我们要搭建的究竟是个什么东西各个部件之间如何协同工作。这能让你在后续遇到问题时有清晰的排查思路而不是盲目地重装。2.1 Appium自动化测试的核心工作原理你可以把Appium想象成一个“翻译官”或者“中间人”。我们的Python测试脚本使用Appium-Python-Client库是用一种人类和机器都容易理解的高级语言写的指令比如“点击登录按钮”。但手机无论是Android还是iOS只听得懂它自家操作系统特定的“方言”对于Android主要是UIAutomator2或Espresso框架提供的协议。Appium Server的工作就是接收来自Python脚本的、基于WebDriver标准协议的HTTP请求然后将这些请求“翻译”成手机能听懂的原生测试框架命令并发送给手机执行。最后再把手机的响应结果“翻译”回标准的WebDriver响应返回给我们的Python脚本。这个架构决定了我们的环境必须包含以下几个部分测试脚本层Python侧需要Python运行环境以及Appium-Python-Client这个专门用来和Appium Server“对话”的库。通信与翻译层Appium Server一个用Node.js编写的HTTP服务器。它才是Appium的核心负责协议转换。我们通常通过npmNode.js的包管理器来安装和启动它。移动端平台层对于Android需要Java环境因为Android SDK的部分工具是Java写的以及Android SDK特别是adb工具和platform-tools等用于和手机或模拟器建立连接、安装应用、发送指令。对于iOS需要Xcode及相关的命令行工具本文主要聚焦更通用的Android环境。被测设备层可以是Android模拟器如Android Studio自带的AVD、第三方模拟器如夜神、MuMu或者真实的Android手机。2.2 关键组件版本选型背后的考量版本兼容性是环境搭建中最隐形的“杀手”。这里我给出经过大量项目验证的、兼容性较好的组合建议并解释原因。Python推荐使用Python 3.8 到 3.11之间的版本。Python 3.12有时可能会遇到一些第三方库尚未完全适配的问题。选择3.8以上的版本能保证获得良好的性能和语法支持。为什么不是最新版在软件开发和测试领域“求稳”往往优先于“求新”。最新版本可能引入未知的兼容性问题而3.8-3.11是一个被广泛验证、生态成熟的区间。Java JDK强烈推荐使用JDK 8 或 JDK 11 (LTS版本)。这是Android开发工具链长期兼容的版本。高版本的JDK如17可能导致adb等工具出现奇怪错误。实操心得很多公司内部的老项目甚至强制要求JDK 8。安装时选择Oracle JDK或OpenJDK均可我个人习惯用OpenJDK例如AdoptOpenJDK更轻量开源。Node.js 与 npmAppium 2.x 需要Node.js 14及以上版本。推荐安装最新的Node.js 18 LTS版本。npm会随Node.js一同安装。注意事项尽量避免使用操作系统自带的可能过旧的Node.js。从官网下载安装包能确保版本可控。Appium Server我们安装Appium 2.x的最新稳定版。Appium 2 进行了架构重大升级将不同平台的驱动如UIAutomator2, XCUITest作为独立插件安装更模块化也更清晰。与1.x的区别Appium 1.x是“大而全”的安装包。Appium 2.x是“核心插件”你需要什么就安装什么减少了不必要的依赖冲突。Android SDK由于Google不再提供独立的SDK安装包我们通过安装Android Studio来获取SDK但可以不用它做IDE。我们主要使用它附带的SDK Manager和AVD Manager。核心工具我们需要的是SDK中的adbAndroid调试桥、aapt资源打包工具以及对应Android版本的platform-tools和build-tools。理清了架构和选型我们就有了清晰的“作战地图”。接下来我们进入具体的实操安装环节。3. 步步为营核心组件安装与配置详解这一部分我们将严格按照依赖关系从底层到上层进行安装。请务必跟随步骤并重点关注配置环节这是成功的关键。3.1 第一阶段搭建基础运行时环境Java Python3.1.1 安装与配置Java JDK下载访问Adoptium官网或Oracle官网下载JDK 8或JDK 11的安装包如.msifor Windows,.pkgfor Mac,.tar.gzfor Linux。安装运行安装程序记住安装路径。例如在Windows上我通常安装到C:\dev\java\jdk-11。配置环境变量这是重中之重JAVA_HOME新建系统变量变量值是你的JDK安装目录的根路径例如C:\dev\java\jdk-11。注意不是bin目录。Path在系统变量Path中添加%JAVA_HOME%\bin。验证打开新的命令行终端CMD或PowerShell输入java -version和javac -version。如果正确显示版本号说明配置成功。注意修改环境变量后必须关闭所有已打开的命令行窗口重新开一个新的新的环境变量才会生效。这是新手最常忽略的一点导致后续命令失败。3.1.2 安装与配置Python下载从Python官网下载3.8-3.11之间的安装包。建议使用64位版本。安装运行安装程序。务必勾选“Add Python X.X to PATH”这个选项Windows。在安装界面底部通常有个复选框。勾选后安装程序会自动帮你配置环境变量省去手动配置的麻烦。验证与pip升级打开新的命令行终端输入python --version和pip --version。确认版本无误后建议立即升级pip到最新版pip install --upgrade pip。实操心得在国内pip安装可能会很慢或失败。可以立即配置一个国内的镜像源例如清华源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple3.2 第二阶段安装Node.js与Appium Server3.2.1 安装Node.js下载从Node.js官网下载18.x LTS版本的安装包。安装一路下一步即可安装程序会自动将node和npm添加到系统Path。验证新开终端输入node -v和npm -v应显示版本号。3.2.2 安装Appium Server (Appium 2.x)Appium 2.x的安装方式与1.x不同它通过npm安装核心包再按需安装驱动。安装Appium核心包在命令行中执行以下命令进行全局安装。npm install -g appium常见问题如果遇到权限错误尤其在Mac/Linux可以在命令前加上sudo。在Windows上可以尝试用管理员身份运行命令行。安装Appium驱动插件Appium 2.x需要单独安装驱动。对于Android自动化我们需要安装uiautomator2驱动。appium driver install uiautomator2安装Appium桌面客户端可选但推荐Appium Inspector是一个独立的图形化工具用于定位应用元素非常方便。可以从Appium官网的“Downloads”部分下载安装。为什么推荐在编写脚本时你需要获取元素的resource-id,xpath等定位信息。Appium Inspector比原生的uiautomatorviewer更强大且与Appium 2.x兼容性更好。验证安装执行appium --version和appium driver list --installed。你应该能看到Appium的版本号以及已安装的uiautomator2驱动。3.3 第三阶段配置Android开发环境SDK这是最复杂的一步但我们避开Android Studio作为IDE的复杂性只把它当作SDK的下载和管理器。下载并安装Android Studio从官网下载安装。安装过程中在“选择组件”页面确保勾选Android SDKAndroid SDK PlatformPerformance (Intel® HAXM) 或 Hypervisor如果你的CPU支持用于加速模拟器Android Virtual Device 其他如Android Studio本体可以取消勾选但我们还是需要安装它来启动SDK Manager。启动SDK Manager安装完成后第一次启动Android Studio会进入引导界面。选择“More Actions” - “SDK Manager”。或者如果你找不到SDK的安装目录下通常有一个tools/bin/sdkmanager命令行工具但图形化界面更直观。安装必要的SDK Packages在SDK Manager中切换到“SDK Platforms”标签页。勾选你计划测试的Android版本例如Android 13.0 (Tiramisu)或Android 11.0 (R)。建议至少安装一个主流版本。点击右下角“Show Package Details”确保该版本下的“Android SDK Platform XX”被勾选。切换到“SDK Tools”标签页勾选以下关键工具同样点开“Show Package Details”Android SDK Build-Tools(选择最新的稳定版如34.0.0)Android SDK Platform-Tools(包含adb,fastboot等必选)Android Emulator(如果你要用AVD模拟器)Android SDK Command-line Tools (latest)(重要包含sdkmanager等) 点击“Apply”或“OK”开始下载安装。配置ANDROID_HOME环境变量找到你的Android SDK安装路径。默认通常在Windows:C:\Users\你的用户名\AppData\Local\Android\SdkMac:/Users/你的用户名/Library/Android/sdkLinux:/home/你的用户名/Android/Sdk新建系统变量ANDROID_HOME值为上述SDK根目录路径。在系统变量Path中添加以下三条请根据你的实际路径调整%ANDROID_HOME%\platform-tools(这是adb所在目录最重要)%ANDROID_HOME%\tools%ANDROID_HOME%\tools\bin验证adb打开新的命令行终端输入adb version。如果显示版本信息则成功。3.4 第四阶段准备测试设备与Python客户端库3.4.1 准备Android设备模拟器推荐对于学习和初期开发模拟器更方便。我们可以使用Android Studio自带的AVD Manager创建。打开Android Studio选择“More Actions” - “AVD Manager”或者直接通过命令行sdkmanager工具管理。点击“Create Virtual Device”。选择一个设备定义如Pixel 5点击“Next”。选择一个系统镜像就是你之前在SDK Platforms中下载的版本点击“Next”完成创建。启动这个模拟器。确保它在adb devices命令中可见。实操心得首次启动模拟器可能很慢。启动后建议进入设置关闭窗口动画、过渡动画等可以显著提升自动化测试时的响应速度。3.4.2 安装Python客户端库在你的Python项目目录下或者全局环境中安装Appium的Python客户端库。pip install Appium-Python-Client这个库提供了所有与Appium Server交互的Selenium-like API。至此所有核心组件安装配置完毕。但我们离成功运行第一个脚本还差关键的“临门一脚”——启动服务和编写脚本。4. 实战演练编写并运行你的第一个Appium测试脚本环境搭好了我们来点实际的让代码跑起来。这个环节我们会创建一个完整的、可运行的测试用例。4.1 启动Appium ServerAppium Server必须在你的测试脚本运行之前启动。有两种方式命令行启动推荐便于观察日志打开一个独立的命令行终端输入appium默认会启动在http://127.0.0.1:4723。你会看到大量的日志输出保持这个终端窗口打开。使用Appium Desktop图形化打开Appium Desktop只需点击“Start Server”按钮即可同样默认在4723端口。4.2 编写Python测试脚本我们以打开Android系统自带的“计算器”应用并点击一个数字为例。创建一个名为first_appium_test.py的文件。from appium import webdriver from appium.options.android import UiAutomator2Options import time # 1. 定义设备能力和App信息 capabilities { “platformName”: “Android”, # 平台名称固定 “appium:platformVersion”: “13.0”, # 你的模拟器/真机的Android版本 “appium:deviceName”: “Android Emulator”, # 设备名称可自定义但用于日志识别 “appium:automationName”: “UiAutomator2”, # 自动化引擎必须与安装的驱动一致 “appium:appPackage”: “com.google.android.calculator”, # 计算器的包名 “appium:appActivity”: “com.android.calculator2.Calculator”, # 计算器的启动Activity # “appium:noReset”: True, # 可选不重置应用状态如已登录信息 } # 2. 将Capabilities字典转换为Appium 2.x推荐的Options对象 options UiAutomator2Options().load_capabilities(capabilities) # 3. 初始化驱动连接到Appium Server # 确保这里的URL和你的Appium Server地址端口一致 driver webdriver.Remote(‘http://127.0.0.1:4723’, optionsoptions) # 等待应用完全启动 time.sleep(2) # 4. 执行自动化操作这里尝试点击数字“5” # 我们需要先定位到这个元素。这里用resource-id来定位这是最稳定的方式之一。 # 如何获取这个id就需要用到之前提到的Appium Inspector。 try: # 不同的计算器UIid可能不同。这里是一个示例。 # 实际使用时请用Appium Inspector查看元素的确切属性。 digit_5 driver.find_element(byAppiumBy.ID, value“com.google.android.calculator:id/digit_5”) digit_5.click() print(“成功点击数字5”) except Exception as e: print(f“定位或点击元素失败{e}”) # 可以截屏帮助调试 driver.save_screenshot(‘error_screenshot.png’) # 5. 等待几秒观察结果 time.sleep(3) # 6. 关闭会话 driver.quit() print(“测试结束驱动已关闭。”)4.3 使用Appium Inspector定位元素脚本里的com.google.android.calculator:id/digit_5这个ID是怎么来的这就需要Appium Inspector。启动你的Android模拟器或连接真机。启动Appium Desktop确保Server已启动点击“Start Inspector Session”按钮。在弹出的窗口中输入与脚本中类似的Capabilities信息platformName,platformVersion,deviceName,automationName,appPackage,appActivity。特别注意需要额外添加一项Capability“appium:udid”: “你的设备ID”。设备ID可以通过命令行adb devices获取。点击“Start Session”。Appium Inspector会启动计算器应用并加载出UI树。在UI树中点击数字“5”的按钮右侧会显示这个元素的所有属性其中就有resource-id。把它复制到你的脚本中即可。4.4 运行脚本并观察确保模拟器/真机已就绪Appium Server正在运行。在命令行中进入你的脚本目录执行python first_appium_test.py观察模拟器计算器应用应该被自动打开并且数字“5”被点击一次。同时运行Appium Server的命令行终端会滚动大量的请求和响应日志。如果一切顺利恭喜你你的PythonAppium测试环境已经成功搭建并验证你完成了从环境搭建到脚本执行的全流程。5. 避坑指南与常见问题排查实录即使按照步骤操作也难免会遇到问题。这里我总结了一些最常见的“坑”和解决方法。5.1 环境变量配置失效症状命令行输入java,adb,appium等命令提示“不是内部或外部命令”。排查检查环境变量JAVA_HOME, ANDROID_HOME, Path是否拼写正确路径是否存在。最重要的一步修改环境变量后是否重新开启了命令行终端旧的终端会话不会加载新的环境变量。在PowerShell中有时需要以管理员身份运行。5.2 Appium Server启动失败或无法连接症状appium命令启动后立即退出或脚本报错urllib3.exceptions.MaxRetryError/ConnectionRefusedError。排查端口占用默认4723端口可能被其他程序占用。可以指定其他端口启动appium -p 4724并在脚本中修改连接URL。驱动未安装运行appium driver list --installed确认uiautomator2已安装。如果没有执行appium driver install uiautomator2。Node.js版本问题确保Node.js版本符合要求。可以尝试卸载重装。查看详细日志启动Appium时加上--log-level debug可以输出更详细的日志帮助定位问题。5.3 adb devices 找不到设备症状执行adb devices列表为空或者设备状态是unauthorized。排查模拟器未启动确认AVD模拟器已完全启动进入主界面。真机未授权如果是真机首次连接需要在手机上弹出的“允许USB调试”对话框中点击确认。如果错过了可以重启adb服务adb kill-server然后adb start-server。多设备冲突如果连接了多个设备/模拟器需要在脚本的Capabilities中通过udid指定具体设备。驱动问题Windows部分手机需要安装特定的USB驱动。5.4 脚本报错无法找到应用或Activity症状脚本启动后Appium日志显示无法启动appPackage和appActivity。排查包名/Activity名错误获取正确的包名和Activity名。对于系统应用可以网上搜索。对于自己开发的应用询问开发。也可以通过以下命令获取当前前台应用的包名和Activityadb shell dumpsys window | findstr mCurrentFocus # Windows adb shell dumpsys window | grep mCurrentFocus # Mac/Linux应用未安装确保应用已经安装在目标设备上。5.5 元素定位失败症状脚本执行到find_element时超时或报NoSuchElementException。排查等待时间不足页面元素尚未加载出来。使用显式等待是更佳实践替代time.sleep。from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.appiumby import AppiumBy wait WebDriverWait(driver, 10) # 最多等10秒 element wait.until(EC.presence_of_element_located((AppiumBy.ID, “some-id”)))定位符错误用Appium Inspector重新检查元素属性。resource-id是最优选择其次是accessibility-idcontent-desc最后才考虑不稳定的xpath。上下文Context问题如果应用内有WebView混合应用需要先切换到WebView上下文才能定位网页内元素。使用driver.contexts和driver.switch_to.context。5.6 性能与稳定性问题模拟器卡顿关闭模拟器的图形特效“设置 - 关于手机 - 多次点击版本号开启开发者选项 - 返回设置进入开发者选项 - 关闭窗口动画缩放、过渡动画缩放、动画程序时长缩放”。脚本运行慢减少不必要的sleep多用显式等待。确保电脑有足够的内存分配给模拟器。会话意外断开检查设备是否休眠可以在Capabilities中设置“appium:newCommandTimeout”: 60来延长命令超时时间。搭建环境的过程本质上是一个系统性的调试过程。遇到报错不要慌仔细阅读终端输出的错误信息从下往上找关键线索并善用搜索引擎。你遇到的绝大多数问题社区里都有解决方案。
返回列表