当前位置: 首页 > news >正文

Ubuntu 从零到一搭建 Appium+Python 自动化环境(含下厨房真机实战)—2025 版

Ubuntu 从零到一搭建 Appium+Python 自动化环境(含下厨房真机实战)—2025 版

适用读者:初级~中级测试工程师;适用系统:Ubuntu 20.04/22.04/24.04;时间:2025-08

本文手把手带你在 Ubuntu 上搭建移动自动化测试环境:JDK、Android SDK、Appium Server、Appium Driver(UiAutomator2)、Appium-Python-Client、Python、PyCharm、定位工具(Appium Inspector),并以 「下厨房」App 为例跑通第一条真机用例。文中包含常见坑位与排查清单,复制即用。


目录

  1. 环境准备与术语

  2. 系统更新 & 基础工具

  3. 安装 JDK(OpenJDK 17)

  4. 安装 Android SDK & 平台工具(ADB)

  5. 配置环境变量(ANDROID_HOME、PATH)

  6. 安装 Node.js(LTS)与 Appium Server(2.x)

  7. 安装 Appium Driver:UiAutomator2

  8. 使用 appium-doctor 体检与修复

  9. 安装 Python & 创建虚拟环境(解决 PEP 668)

  10. 安装 Appium-Python-Client

  11. 安装 PyCharm(两种方式)

  12. 安装与启动 Appium Inspector(定位)

  13. 真机连接与 USB 权限(udev 规则)

  14. 准备「下厨房」App(获取/安装 APK)

  15. 编写并运行第一条 Python 用例

  16. 常见问题(FAQ & 故障排查)

  17. 附:一键安装脚本 & requirements.txt 模板


1. 环境准备与术语

  • JDK:Java 开发工具包,Android 构建与部分工具依赖。

  • Android SDK:Android 平台工具(含 adb)与平台镜像,Appium 真机/模拟器都需要。

  • Appium Server 2.x:移动端自动化测试服务器,2.x 驱动与插件解耦。

  • UiAutomator2 Driver:Android 自动化首选驱动,稳定、社区活跃。

  • Appium-Python-Client:Python 客户端库,与服务端通信。

  • Appium Inspector:元素定位/录制工具。

  • PEP 668:Ubuntu 等发行版对系统 Python 依赖的保护策略;解决方案:虚拟环境

建议准备:一台 Ubuntu、1 条数据线、1 台已开启开发者模式 + USB 调试的 Android 真机。


2. 系统更新 & 基础工具

sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl unzip zip wget software-properties-common build-essential

3. 安装 JDK(OpenJDK 17)

JDK 11/17 均可,推荐 17,兼容性更好。

sudo apt install -y openjdk-17-jdk
java -version    # 确认输出 17

如需切换多版本:sudo update-alternatives --config java


4. 安装 Android SDK & 平台工具(ADB)

  1. 下载 Command-line Tools(无 GUI,轻量):

mkdir -p "$HOME/Android" && cd "$HOME/Android"
wget -O cmdtools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip cmdtools.zip -d cmdline-tools
# 为符合 sdkmanager 目录结构,重命名为 latest
mkdir -p "$HOME/Android/cmdline-tools/latest"
mv cmdline-tools/* "$HOME/Android/cmdline-tools/latest/"
  1. 先临时设置环境变量(后文会永久写入):

export ANDROID_HOME="$HOME/Android/sdk"
export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/tools/bin"
  1. 安装 SDK 组件(接受许可):

mkdir -p "$ANDROID_HOME"
yes | sdkmanager --licenses
sdkmanager --update
sdkmanager "platform-tools" \"platforms;android-34" \"build-tools;34.0.0"
# 如需模拟器:sdkmanager "system-images;android-34;default;x86_64" "emulator"
  1. 验证 ADB:

adb version

5. 配置环境变量(永久)

将以下内容追加到 ~/.bashrc~/.zshrc

echo 'export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"' >> ~/.bashrc
echo 'export ANDROID_HOME="$HOME/Android/sdk"' >> ~/.bashrc
echo 'export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/tools/bin"' >> ~/.bashrc
source ~/.bashrc

新开终端后,echo $ANDROID_HOME 应有值。


6. 安装 Node.js(LTS)与 Appium Server(2.x)

不建议用 apt install nodejs(版本可能过旧)。这里用 nvm 安装 LTS。

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 安装 LTS 版本(示例:v20 LTS)
nvm install --lts
node -v && npm -v
# 安装 Appium 2.x(全局)
npm install -g appium@latest
appium -v

启动服务(先别关):appium


7. 安装 Appium Driver:UiAutomator2

你已经走到这一步,这里给出完整命令与排查。

# 列出可用驱动
appium driver list --installed
# 安装/更新 uiautomator2
appium driver install uiautomator2
# 或指定版本:appium driver install --source=npm appium-uiautomator2-driver@latest
# 验证
appium driver list --installed

若安装失败,尝试:

npm config set registry https://registry.npmmirror.com   # 网络慢可换源
appium driver uninstall uiautomator2 || true
appium driver install uiautomator2

8. 使用 appium-doctor 体检与修复

npm install -g appium-doctor
appium-doctor --android

按提示补齐缺失的工具或环境变量。


9. 安装 Python & 创建虚拟环境(解决 PEP 668)

Ubuntu 近年默认 外部管理 Python(PEP 668),不要用 sudo pip 写系统环境。正确方式:虚拟环境。

sudo apt install -y python3 python3-venv python3-pip
cd ~/workspace && mkdir -p appium-demo && cd appium-demo
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip

若你已在项目目录(如 /home/pxr/xcf):

cd /home/pxr/xcf
python3 -m venv appium-env
source appium-env/bin/activate
python -m pip install --upgrade pip

10. 安装 Appium-Python-Client

pip install Appium-Python-Client pytest
# 可选:requests loguru allure-pytest 等
pip install requests loguru

11. 安装 PyCharm(两种方式)

方式 A:Snap(简单)

sudo apt install -y snapd
sudo snap install pycharm-community --classic
# 或专业版:sudo snap install pycharm-professional --classic

方式 B:JetBrains Toolbox(推荐管理多 IDE)

  • 从官网下载 Toolbox App(.tar.gz),解压运行 ./jetbrains-toolbox,按向导安装 PyCharm。

若网络受限,可用浏览器手动下载后传到服务器。


12. 安装与启动 Appium Inspector(定位)

方式 A:AppImage(官方发布)

# 以 2025.x 为例,去 GitHub Releases 下载对应 AppImage
chmod +x Appium-Inspector-*.AppImage
./Appium-Inspector-*.AppImage

方式 B:使用终端下载并运行

# 遇到 wget SSL 问题可改用 curl
curl -L -o inspector.AppImage "<GitHub_Release_AppImage_URL>"
chmod +x inspector.AppImage && ./inspector.AppImage

连接到 http://127.0.0.1:4723 的 Appium Server,选择平台 Android,勾选 automationName=UiAutomator2,填好 appappPackage/appActivity 后启动会话。


13. 真机连接与 USB 权限(udev 规则)

  1. 打开手机 开发者选项 → USB 调试

  2. 连接数据线,授权。

  3. 安装并验证 adb:

adb devices   # 看到 device 状态即成功
  1. 若状态为 unauthorizedno permissions,添加 udev 规则:

# 新建规则文件(示例包含常见厂商,可按需新增)
cat <<'EOF' | sudo tee /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"   # Google
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"   # HUAWEI
SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", MODE="0666", GROUP="plugdev"   # Xiaomi
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"   # Qualcomm/OPPO/OnePlus
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"   # Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"   # HTC
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -aG plugdev $USER
adb kill-server && adb start-server
adb devices

重插数据线;必要时重启。


14. 准备「下厨房」App(获取/安装 APK)

方案 A:已安装在真机 → 直接抓取并备份:

adb shell pm list packages | grep xiachufang
# 假设包名为 com.xiachufang(示例)
adb shell pm path com.xiachufang
# 输出形如:package:/data/app/~~xxx==/com.xiachufang-xxxx/base.apk
adb pull /data/app/~~xxx==/com.xiachufang-xxxx/base.apk ~/Downloads/xiachufang.apk

方案 B:未安装 → 自行获取官方渠道 APK,然后:

adb install -r ~/Downloads/xiachufang.apk

获取启动 Activity(用于 Desired Capabilities):

adb shell cmd package resolve-activity -c android.intent.category.LAUNCHER com.xiachufang
# 或启动一次后查看当前 Activity
adb shell monkey -p com.xiachufang -c android.intent.category.LAUNCHER 1
adb shell dumpsys activity activities | grep mResumedActivity

15. 编写并运行第一条 Python 用例

项目结构建议

/home/pxr/xcf
├── appium-env/                 # venv
├── cases/
│   ├── __init__.py
│   ├── base_case.py
│   └── test_xcf_home.py
├── requirements.txt
└── README.md

requirements.txt(示例)

Appium-Python-Client>=3.2.0
pytest>=8.0.0
requests>=2.31.0
loguru>=0.7.0

base_case.py(示例)

from appium import webdriver
from time import sleepclass BaseCase:def setup(self, caps: dict):self.driver = webdriver.Remote(command_executor="http://127.0.0.1:4723",desired_capabilities=caps,)self.driver.implicitly_wait(10)def teardown(self):sleep(2)self.driver.quit()

test_xcf_home.py(示例,真机+已装 App)

from cases.base_case import BaseCase# 按你的设备信息修改以下 3 项:platformVersion / deviceName / appPackage+appActivity
ANDROID_VERSION = "13"         # 示例:Android 13
DEVICE_NAME = "emulator-5554"  # 或 adb devices 看到的序列号
APP_PACKAGE = "com.xiachufang"  # 示例包名,按实际修改
APP_ACTIVITY = ".ui.activity.MainActivity"  # 示例入口,按实际修改class TestXCF(BaseCase):def test_launch(self):caps = {"platformName": "Android","platformVersion": ANDROID_VERSION,"deviceName": DEVICE_NAME,"automationName": "UiAutomator2","appPackage": APP_PACKAGE,"appActivity": APP_ACTIVITY,"noReset": True,"newCommandTimeout": 180,}self.setup(caps)# 示例:校验首页是否存在某个元素(替换成你的定位)# element = self.driver.find_element("xpath", "//*[@text='下厨房']")# assert element.is_displayed()self.teardown()

运行步骤

# 1) 启动 Appium Server(独立终端)
appium# 2) 激活虚拟环境(项目终端)
cd /home/pxr/xcf
source appium-env/bin/activate
pip install -r requirements.txt  # 首次# 3) 确认真机在线
a db devices# 4) 运行用例(保持在项目根目录)
PYTHONPATH=. python cases/test_xcf_home.py
# 或使用 pytest
pytest -q -s cases/test_xcf_home.py

小技巧:如果你在 cases/ 里直接运行脚本,务必在 cases/ 目录下也加上 __init__.py,或使用 PYTHONPATH=.. 运行,避免 ModuleNotFoundError: No module named 'cases'


16. 常见问题(FAQ & 故障排查)

Q1:pip install 报 PEP 668 / 要求 --break-system-packages

  • 原因:系统 Python 受保护。解决:使用 python3 -m venv venv 创建虚拟环境,再在 venv 内 pip install

Q2:ModuleNotFoundError: No module named 'appium'

  • 说明:依赖没装到当前 Python。解决:确认已激活 venv,pip install Appium-Python-Client,并用 venv 内的 python 运行。

Q3:adb devices 显示 unauthorizedno permissions

  • 解决:手机点授权;添加 udev 规则;adb kill-server && adb start-server;重插线/换口/换线。

Q4:Appium Inspector AppImage 下载报 SSL 错误?

  • 解决:改用浏览器/curl -L 直接从 GitHub 下载;避免第三方代理源;或临时 --no-check-certificate(仅测试)。

Q5:appium driver install uiautomator2 失败?

  • 解决:npm set registry 切换镜像;appium driver uninstall uiautomator2 后重装;确保 Node.js 版本为 LTS。

Q6:如何获取 appPackage / appActivity

  • 指令:adb shell pm list packages | grep 关键字adb shell cmd package resolve-activity -c android.intent.category.LAUNCHER 包名;或启动后 adb shell dumpsys activity activities | grep mResumedActivity

Q7:PyCharm 用 snap 安装提示找不到包?

  • 解决:sudo apt install snapd 后安装 pycharm-community --classic;或用 JetBrains Toolbox 安装。

Q8:跑用例时 Appium Server 报 Could not find adb

  • 解决:确认 ANDROID_HOMEPATH 包含 platform-tools,并在 Server 启动的终端中也能 adb version


17. 附:一键安装脚本 & requirements 模板

install_android_appium.sh(可按需裁剪)

#!/usr/bin/env bash
set -euo pipefailsudo apt update && sudo apt upgrade -y
sudo apt install -y git curl unzip zip wget software-properties-common build-essential \openjdk-17-jdk python3 python3-venv python3-pip# Android SDK
mkdir -p "$HOME/Android" && cd "$HOME/Android"
wget -O cmdtools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip -o cmdtools.zip -d cmdline-tools
mkdir -p "$HOME/Android/cmdline-tools/latest"
mv cmdline-tools/* "$HOME/Android/cmdline-tools/latest/" || true# ENV
{echo 'export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"'echo 'export ANDROID_HOME="$HOME/Android/sdk"'echo 'export PATH="$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/tools/bin"'
} >> ~/.bashrc
source ~/.bashrcmkdir -p "$ANDROID_HOME"
yes | sdkmanager --licenses
sdkmanager --update
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"# Node & Appium
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
npm install -g appium@latest appium-doctor
appium driver install uiautomator2# Python venv(示例项目路径)
PROJECT_DIR="$HOME/xcf"
mkdir -p "$PROJECT_DIR" && cd "$PROJECT_DIR"
python3 -m venv appium-env
source appium-env/bin/activate
pip install --upgrade pip
pip install Appium-Python-Client pytest requests loguruappium-doctor --android || trueecho "All done. Reopen terminal to ensure PATH is loaded."

保存为 install_android_appium.sh,赋权并执行:

chmod +x install_android_appium.sh
./install_android_appium.sh

requirements.txt(可直接用)

Appium-Python-Client>=3.2.0
pytest>=8.0.0
requests>=2.31.0
loguru>=0.7.0

结束语

到这里,你已经在 Ubuntu 上完成了 JDK → Android SDK → Appium Server 2.x → UiAutomator2 → Python Client → PyCharm → Inspector → 真机跑通用例 的全链路搭建。建议把本文收藏为你的环境手册,并将安装脚本与 requirements.txt 纳入团队仓库,保证环境一致性与可复用性。祝测试顺利!🚀

http://www.dtcms.com/a/354614.html

相关文章:

  • 导出wireshark的FLV RAW数据并进行分析
  • 第13集 当您的USB设备不在已实测支持列表,如何让TOS-WLink支持您的USB设备--答案Wireshark USB抓包
  • [数据结构] ArrayList与顺序表(下)
  • indexDB快速上手
  • 2015考研数学(二)真题
  • 让模糊物体变清晰的视频AI:快速提升画质指南
  • 51c大模型~合集175
  • pcl_案例2 叶片与根茎的分离
  • Redis发布订阅:实时消息系统的极简解决方案
  • MyBatis延迟加载
  • 云计算学习100天-第29天
  • Node.js 的模块化规范是什么?CommonJS 和 ES6 模块有什么区别?
  • Python DELL Logo
  • day1 ———C++———变量和字符串的使用
  • AI驱动企业数字化转型:解码未来三年的智能化变革密码
  • STAGEWISE实战指南:从集成到使用的完整解决方案
  • AI在商业领域的多元应用:从写作助手到精准运营,解锁AI商业工具新价值
  • 流程控制语句(3)
  • 操作系统中的死锁是什么意思
  • 农行广西区分行携手广西专精特新商会共探金融赋能专精特新企业新路径
  • 用KPI导航数字化转型:制造企业如何科学评估系统上线成效
  • 流程控制语句(2)
  • Java网络编程(UDP, TCP, HTTP)
  • 【Linux基础知识系列:第一百一十五篇】使用gzip与bzip2进行压缩
  • 从首次测试到采购40个机器人:Junior kühlk如何自动化协作机械臂矩阵
  • Linux学习-基于TCP实现群聊
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(三)
  • windows下查看别的服务器的端口是否通
  • [光学原理与应用-319]:激光器光路设计的主要输出文件的形式和内容
  • 解构与重构:“真人不露相,露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质