Windows系统Python+Appium自动化测试环境搭建与实战指南
1. 项目概述与核心价值
最近几年,移动应用测试的自动化需求越来越旺盛,无论是为了提升回归测试效率,还是为了进行大规模的功能验证,一个稳定可靠的自动化环境都是基础。很多朋友一听到“Appium自动化”就觉得头大,感觉要装一堆东西,配置一堆环境变量,动不动就报错。确实,我刚开始接触的时候也踩了不少坑,从JDK版本不兼容到Appium Server启动失败,再到真机连接不上,每一步都可能是个“拦路虎”。但一旦你把环境搭通了,后面写脚本、跑用例就会顺畅很多,本质上它就是一个“桥梁”,让你的Python代码能够指挥手机里的App进行各种操作。
这个“保姆级”指南,就是要把我从无数次失败中总结出来的经验,一步步拆解给你看。我们的目标很明确: 在Windows系统上,从零开始,搭建一个能稳定运行Python+Appium的自动化测试环境,并最终实现一个最简单的自动化操作——比如打开手机上的计算器App并完成一次计算。 这个过程会涵盖所有必要的组件:Python环境、Appium Server、Android SDK、以及连接真机或模拟器的驱动。我会尽量把每个步骤的“为什么”讲清楚,而不仅仅是告诉你“怎么做”,这样即使你未来遇到新版本或者不同型号的手机,也能自己举一反三去解决问题。适合所有对移动端自动化感兴趣的测试工程师、开发人员甚至是业务人员,只要你有一点Python基础,就能跟着做下来。
2. 环境搭建全景图与核心组件解析
在动手之前,我们得先搞清楚我们要搭建的这个“环境”到底由哪些部分组成,它们各自扮演什么角色。如果把整个自动化过程比作一场木偶戏,那么:
- Python + 测试框架(如pytest/unittest) :你就是幕后的编剧和导演,用代码写好剧本(测试用例)。
- Appium Server :它是核心的提线人,负责接收导演(Python脚本)的指令,并将其翻译成手机能听懂的语言。
- Appium Client 库(如Appium-Python-Client) :这是导演和提线人之间的专用对讲机,让Python代码能够用特定的协议和Appium Server通信。
- 手机/模拟器 + 待测App :这就是舞台上的木偶和道具,是最终执行操作的对象。
- Android SDK(主要是adb) :这是提线人(Appium Server)与木偶(手机)之间的物理连接线和基础控制工具。adb(Android Debug Bridge)是调试桥梁,没有它,电脑根本认不出手机。
对于iOS环境,还需要Xcode和相关的开发者证书,过程更为复杂。考虑到大多数人的学习和工作环境,本指南将聚焦于 Android 平台。 一个常见的误区是认为装了Appium Desktop就万事大吉,其实Appium Desktop只是一个带图形界面的Server,它底层依然严重依赖JDK和Android SDK。
2.1 工具选型与版本控制心得
工具版本是环境搭建中最容易出问题的地方,不兼容的版本组合会让你在莫名其妙的错误上浪费大量时间。以下是我基于当前(可长期稳定的)主流版本给出的建议:
- Python :选择 Python 3.8 到 3.10 之间的版本。Python 3.11+ 有时会遇到一些第三方库的兼容性问题。我推荐使用 3.8.10 或 3.9.13 ,这两个版本非常稳定,社区支持度极高。
- JDK (Java Development Kit) :Appium Server 是基于Node.js的,但其底层驱动(特别是对于Android)需要Java环境。务必安装 JDK 8 (1.8) 。更高版本的JDK(如JDK 11, 17)可能会导致
uiautomator2等驱动运行异常。记住,不是JRE,是JDK。 - Node.js :Appium Server 的运行环境。安装 Node.js 的 LTS(长期支持)版本 即可,比如 18.x。安装时注意勾选“自动安装必要的工具”选项(不建议,最好手动配置),并确保npm包管理器随之安装。
- Android SDK :谷歌官方已不再提供独立的SDK安装包,推荐通过 Android Studio 来安装和管理SDK。我们主要需要其中的 SDK Tools (包含adb, aapt等)和 Platform-Tools 。
- Appium Server :有两种选择。
- Appium Desktop :图形化界面,适合新手入门和元素定位(内置Inspector)。但从自动化脚本的角度,我们更常将其作为Server后台运行。
- Appium Server 命令行版 :通过npm安装,更轻量,更适合集成到CI/CD流水线。本指南会同时介绍两种方式的安装。
重要心得 :我强烈建议在电脑上创建一个专门的文件夹,例如
D:\AutomationEnv,将所有工具的安装路径都规划在这里。清晰的路径管理会为后续的环境变量配置减少大量麻烦。
3. 分步详解:手把手搭建环境
接下来,我们进入实操环节。请严格按照顺序操作。
3.1 第一步:安装Python并配置环境变量
- 下载安装 :前往Python官网,下载上述推荐的版本(如3.9.13)的Windows安装程序。运行安装程序时, 务必勾选最下方的 “Add Python 3.9 to PATH” 选项,这样安装程序会自动为你添加用户级别的环境变量。然后将安装路径改为我们规划的目录,例如
D:\AutomationEnv\Python39。 - 验证安装 :打开命令提示符(CMD)或 PowerShell,输入
python --version和pip --version。如果能正确显示版本号,说明安装成功。 - 配置pip镜像源(国内加速) :为了后续安装库时速度更快,建议配置国内镜像。在用户目录(
C:\Users\你的用户名\)下创建pip文件夹,里面新建一个pip.ini文件,内容如下:
这样,以后使用[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cnpip install命令时就会从清华镜像站下载,速度飞起。
3.2 第二步:安装JDK 8
- 下载安装 :搜索“Oracle JDK 8”或使用OpenJDK版本(如AdoptOpenJDK)。下载Windows x64安装包。安装时,同样将路径改为规划目录,如
D:\AutomationEnv\Java\jdk1.8.0_xxx。 - 配置环境变量 :这是关键步骤,很多问题都出在这里。
- 新建系统变量
JAVA_HOME,值为你的JDK安装路径,例如D:\AutomationEnv\Java\jdk1.8.0_341。 - 编辑系统变量
Path, 新建 两条记录:%JAVA_HOME%\bin%JAVA_HOME%\jre\bin
- 新建系统变量
- 验证安装 :打开新的CMD窗口,输入
java -version和javac -version。应能正确显示Java 1.8相关的版本信息。
3.3 第三步:安装Node.js与Appium Server
- 安装Node.js :从官网下载LTS版本的Windows安装包。安装过程简单,一路下一步即可,安装路径可以设为
D:\AutomationEnv\nodejs。安装程序会自动将Node和npm添加到Path。 - 验证Node.js :CMD中输入
node -v和npm -v。 - 安装Appium Server命令行版 :通过npm全局安装。在CMD中运行:
如果速度慢,可以设置npm淘宝镜像:npm install -g appiumnpm config set registry https://registry.npmmirror.com - 安装Appium Desktop(可选但推荐) :从Appium官网的Releases页面下载最新的
.exe安装包。安装它主要是为了使用其内置的 Appium Inspector 工具,这个工具对于定位应用元素(如按钮、输入框的ID)至关重要。
3.4 第四步:安装Android SDK(通过Android Studio)
这是步骤最多的一环,请耐心操作。
- 下载安装Android Studio :从官网下载安装程序。安装时,同样建议将路径改到规划目录,如
D:\AutomationEnv\AndroidStudio。SDK的安装位置会随后设置。 - 首次运行与SDK配置 :启动Android Studio,在欢迎界面选择“More Actions” -> “SDK Manager”。
- 在 SDK Platforms 标签页:至少选择一个Android版本进行安装,例如 Android 11.0 (R) 。选择你手机或模拟器对应的API Level。
- 在 SDK Tools 标签页:勾选以下必选项:
- Android SDK Build-Tools (选择最新的一个版本,如33.0.0)
- Android SDK Platform-Tools (包含adb,必选)
- Android SDK Tools (Obsolete) (旧版工具,有时需要,建议勾选)
- Android Emulator (如果你要用模拟器)
- 注意看下方的 Android SDK Location ,这就是你的SDK根目录。我建议将其设置为
D:\AutomationEnv\AndroidSDK。点击“Apply”开始下载安装。
- 配置Android环境变量 :
- 新建系统变量
ANDROID_HOME,值为你的SDK根目录,例如D:\AutomationEnv\AndroidSDK。 - 编辑系统变量
Path, 新建 以下两条记录:%ANDROID_HOME%\platform-tools(这是adb所在目录)%ANDROID_HOME%\tools(和tools\bin,一些旧工具可能需要)
- 新建系统变量
- 验证adb :打开新的CMD,输入
adb version。应能显示adb的版本信息。
3.5 第五步:连接真机与必备驱动安装
- 真机准备 :
- 在手机上进入“设置”->“关于手机”,连续点击“版本号”7次,开启“开发者选项”。
- 在“开发者选项”中,开启 “USB调试” 。部分手机还需要开启“USB调试(安全设置)”或“允许通过USB安装应用”。
- 连接电脑 :用USB数据线连接手机和电脑。在CMD中输入
adb devices。如果一切正常,你会看到设备列表中出现你的设备序列号,后面跟着device字样。如果显示unauthorized,需要在手机上弹出的授权对话框中点击“允许”。 - 安装Appium驱动 :Appium通过不同的驱动来支持不同平台。对于Android,我们需要安装
uiautomator2驱动,它是目前最稳定和主流的Android自动化驱动。在CMD中运行:
同样,如果你需要测试iOS,可以安装appium driver install uiautomator2xcuitest驱动(需在macOS环境下):appium driver install xcuitest
至此,所有基础环境已经准备就绪。你可以通过 appium -v 和 appium driver list 来验证Appium及其驱动是否安装成功。
4. 第一个自动化脚本实战:操控手机计算器
环境搭好了,我们来点实际的,写一个脚本让手机自动打开计算器,计算“9+5=”。这里我们使用最常用的 Appium-Python-Client 库和 uiautomator2 驱动。
4.1 创建项目与安装客户端库
在你喜欢的位置创建一个项目文件夹,例如 D:\MyAppiumProject 。在该文件夹打开CMD或PowerShell,或者使用VSCode打开此文件夹。
- 安装客户端库 :
这个库提供了所有与Appium Server交互的Python方法。pip install Appium-Python-Client - 可选但推荐:安装pytest :
虽然第一个脚本我们可以用简单的Python文件,但后续构建测试套件,pytest是更专业的选择。pip install pytest
4.2 使用Appium Inspector定位元素
在写代码之前,我们需要知道计算器App里“数字9”、“加号”、“数字5”、“等号”这些按钮在App里的“身份证”(即元素定位信息)。这就是Appium Inspector的用武之地。
- 启动Appium Desktop,点击“Start Server”启动服务(默认地址
http://127.0.0.1:4723)。 - 点击“Start Inspector Session”按钮。
- 会弹出一个配置窗口(Desired Capabilities),这是Appium会话的核心配置。我们需要填写一组键值对来描述我们的测试设备和应用。你可以点击左下角保存这组配置方便下次使用。一个连接真机计算器App的基础配置如下:
{ "platformName": "Android", "platformVersion": "11", // 你的手机安卓版本 "deviceName": "你的设备名", // 通过`adb devices`查看,或自定义一个 "appPackage": "com.android.calculator2", // 计算器包名,可能因手机品牌而异 "appActivity": "com.android.calculator2.Calculator", // 计算器主活动 "automationName": "UiAutomator2", "noReset": true // 不重置应用数据 }- 如何获取
appPackage和appActivity?- 确保手机已连接并解锁,计算器App在前台打开。
- 在CMD中运行:
adb shell dumpsys window | findstr mCurrentFocus - 输出类似:
mCurrentFocus=Window{... u0 com.android.calculator2/com.android.calculator2.Calculator} - 斜杠前是
appPackage,后是appActivity。
- 如何获取
- 点击“Start Session”。Appium会在你的手机上打开计算器App,同时电脑上Inspector窗口会加载出当前页面的UI层次结构。
- 在Inspector中,点击“元素选择”工具,然后去点击手机屏幕上的数字“9”。右侧会显示该按钮的所有属性,如
resource-id,text,content-desc,class等。我们通常优先使用resource-id,因为它通常是唯一的。记录下resource-id(可能是com.android.calculator2:id/digit_9)。同理,找到“+”、“5”、“=”的定位信息。
4.3 编写并运行Python自动化脚本
在项目文件夹中创建一个Python文件,如 first_test.py 。
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
# 1. 定义Desired Capabilities,与Inspector中配置一致
desired_caps = {
"platformName": "Android",
"platformVersion": "11", # 改为你的安卓版本
"deviceName": "MI_9", # 可自定义,但adb devices里要有对应设备
"appPackage": "com.android.calculator2",
"appActivity": "com.android.calculator2.Calculator",
"automationName": "UiAutomator2",
"noReset": True
}
# 2. 连接Appium Server
# 确保Appium Server正在运行(http://127.0.0.1:4723)
driver = webdriver.Remote('http://127.0.0.1:4723', desired_caps)
# 给App一点启动时间
time.sleep(2)
try:
# 3. 使用定位到的元素信息进行操作
# 点击数字 9
# 这里使用resource-id定位,这是最可靠的方式
btn_9 = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/digit_9")
btn_9.click()
# 点击加号 +
# 如果加号没有id,可以用 accessibility_id (content-desc) 或 XPath
# 假设加号的 resource-id 是 `com.android.calculator2:id/op_add`
btn_plus = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/op_add")
btn_plus.click()
# 点击数字 5
btn_5 = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/digit_5")
btn_5.click()
# 点击等号 =
btn_equals = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/eq")
btn_equals.click()
# 4. 获取结果并验证
# 结果通常显示在一个TextView里,我们获取其文本
result_element = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/result")
actual_result = result_element.text
print(f"计算结果显示为: {actual_result}")
# 简单的断言(这里只是打印,实际测试中会用assert)
if actual_result == "14":
print("测试通过!9 + 5 = 14")
else:
print(f"测试失败!预期 14,实际得到 {actual_result}")
# 等待几秒,方便观察
time.sleep(3)
except Exception as e:
print(f"执行过程中出现错误: {e}")
# 可以在这里截图保存错误现场
# driver.save_screenshot('error_screenshot.png')
finally:
# 5. 无论如何,最后都要关闭会话
print("测试结束,关闭驱动会话。")
driver.quit()
运行脚本:
- 确保你的手机已通过USB连接,
adb devices能看到设备,且屏幕已解锁。 - 确保Appium Server正在运行(无论是通过Desktop启动的,还是命令行用
appium命令启动的)。 - 在终端中,进入你的脚本所在目录,运行:
python first_test.py
如果一切配置正确,你将看到手机上的计算器被自动打开,并依次点击9、+、5、=,最终在控制台打印出结果。
5. 环境与脚本调试:常见问题与解决方案实录
即使按照步骤操作,也难免会遇到问题。下面是我总结的几个高频问题及排查思路。
5.1 环境类问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
‘adb’ 不是内部或外部命令 |
Android SDK环境变量未正确配置。 | 1. 检查 ANDROID_HOME 变量值是否正确指向SDK根目录。 2. 检查Path中是否添加了 %ANDROID_HOME%\platform-tools 。 3. 重启CMD或IDE ,使环境变量生效。 4. 在CMD中直接 cd 到 platform-tools 目录下再执行 adb 命令,验证adb本身是否可用。 |
‘java’ 不是内部或外部命令 |
JDK环境变量未正确配置。 | 1. 检查 JAVA_HOME 变量,路径必须指向JDK安装目录(有bin文件夹的那一层)。 2. 检查Path中是否添加了 %JAVA_HOME%\bin 。 3. 同样,需要重启终端。 |
appium 命令找不到 |
Node.js或npm安装问题,或非全局安装。 | 1. 检查Node.js是否安装成功 ( node -v )。 2. 尝试用 npm list -g appium 查看全局安装列表。 3. 如果未找到,重新全局安装: npm install -g appium 。 |
| Appium Server启动失败,端口被占用 | 4723端口被其他程序(可能是之前未关闭的Appium实例)占用。 | 1. 在CMD中运行 `netstat -ano |
5.2 连接与脚本执行类问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
adb devices 列表为空 |
手机USB调试未开启;驱动问题;数据线问题。 | 1. 确认手机“开发者选项”和“USB调试”已开启。 2. 换一条质量好的数据线,并尝试电脑上不同的USB接口。 3. 在设备管理器中查看手机是否被识别为“Android ADB Interface”,如有感叹号则需安装驱动。 4. 手机连接时弹出的“允许USB调试吗?”对话框要点“确定”。 |
| Appium Inspector无法启动会话 | Desired Capabilities配置错误;设备未连接;appPackage/Activity错误。 | 1. 核对 platformVersion 必须与手机系统版本一致(设置-关于手机中查看)。 2. deviceName 可以自定义,但建议与 adb devices 列出的设备名一致。 3. 重点检查 appPackage 和 appActivity 是否准确。不同品牌手机的计算器包名可能不同(如华为可能是 com.huawei.calculator )。 4. 可以先通过 adb shell am start -n com.android.calculator2/com.android.calculator2.Calculator 命令测试能否手动启动。 |
脚本报错 NoSuchElementException |
元素定位信息错误或过时;页面未加载完成;元素在iframe或WebView中。 | 1. 最常用方法 :使用 driver.page_source 打印当前页面XML源码,在其中搜索你预期的 resource-id 或 text ,看是否存在且唯一。 2. 在操作前增加显式等待,等待元素出现再操作: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((AppiumBy.ID, “id”))) 3. 尝试其他定位方式,如 AppiumBy.ACCESSIBILITY_ID (对应content-desc), AppiumBy.XPATH 。 |
| 脚本执行时手机无反应 | Appium Server未启动;Desired Capabilities中设备信息错误;脚本中Remote的URL错误。 | 1. 确认Appium Server正在运行,并检查日志有无报错。 2. 确认脚本中 webdriver.Remote 的URL与Server地址一致(默认 http://127.0.0.1:4723 )。 3. 在Appium Desktop的Server日志中查看,当运行脚本时,是否有新的会话创建请求。这是判断连接是否成功的关键。 |
5.3 独家避坑技巧
- 环境变量Path的优先级 :系统Path变量中,上方的路径优先级高于下方。如果你安装了多个Python或Java版本,请确保你想要的版本路径在靠前的位置。修改Path后, 必须关闭所有CMD、IDE,重新打开 才能生效。
- 使用
appium-doctor诊断环境 :安装这个工具可以一键检查环境配置问题。运行npm install -g appium-doctor,然后执行appium-doctor,它会给出详细的检查和修复建议。 - 真机比模拟器更稳定 :对于初学者,我强烈建议使用真机进行学习和调试。Android模拟器(尤其是非x86架构)可能会遇到性能、兼容性和网络方面的问题,增加学习复杂度。
- 养成看日志的习惯 :Appium Server的控制台输出(日志)是排查问题的金钥匙。任何错误信息都会在其中体现。遇到问题时,第一反应应该是查看Appium日志。
- 元素定位策略优先级 :
resource-id>accessibility_id>xpath。resource-id是首选,因为它通常是唯一的且性能最好。尽量避免使用绝对XPath,它非常脆弱,UI稍有改动就会失效。
6. 项目进阶与脚本优化思路
成功运行第一个脚本只是起点。要让自动化测试真正有用,还需要考虑更多。
6.1 封装与设计模式
直接把所有代码写在一个文件里会很快变得难以维护。常见的优化有:
- 封装Capabilities :将设备配置信息单独放在一个配置文件(如
config.yaml或config.ini)或类中,方便管理多设备测试。 - 封装基础操作 :将常用的操作(如查找元素、点击、输入、滑动)封装成独立的函数或类方法,提高代码复用性。
- 使用Page Object模式 :这是UI自动化测试的核心设计模式。为每个App页面创建一个类,页面的元素定位符和操作作为这个类的方法。测试脚本只包含业务逻辑,不直接包含元素定位。这极大提升了代码的可读性和可维护性。
6.2 等待机制
上面的脚本用了 time.sleep() ,这是一种“强制等待”,效率低下且不稳定。应该使用“显式等待”。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待最多10秒,直到元素可点击
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((AppiumBy.ID, “some_id”))
)
element.click()
6.3 测试报告与断言
使用 pytest 或 unittest 框架来组织测试用例,它们提供了丰富的断言方法和测试报告生成功能(如 pytest-html 插件可以生成漂亮的HTML报告)。
6.4 连接多设备与并行测试
当你有多个设备需要测试时,可以为每个设备启动一个独立的Appium Server实例(使用不同的端口,如4723, 4724, 4725),然后在你的测试框架中(如 pytest-xdist )配置多进程同时运行测试脚本,每个进程连接不同的Server端口和设备。这需要对测试框架和脚本结构有更高的规划。
环境搭建是自动化测试的基石,虽然过程繁琐,但每一步都有其意义。我个人的体会是,第一次成功搭建并运行脚本的成就感,足以抵消之前遇到的所有挫折。把这个环境当成你的“自动化工作台”,把它搭建得稳固、清晰,后续所有复杂的测试项目都将从这个坚实的基础上生长出来。如果在搭建过程中卡住了,别急着到处问,先回头仔细检查每一步,尤其是环境变量和版本兼容性,并学会阅读Appium Server的日志,你遇到的问题,十有八九都能在日志里找到线索。
更多推荐
所有评论(0)