移动应用测试自动化实践:零基础入门教程
开篇:什么是移动应用测试自动化?

你有没有发现,每次打开一个APP,它都像被训练过一样能精准地完成任务?比如登录、浏览商品、下单购买,这些看起来很简单的操作背后,其实有很多复杂的代码在运行。
为了让这些功能一直稳定可靠,开发者们会写很多“自动测试脚本”,让程序自己去模拟用户的操作。这个过程就叫 移动应用测试自动化。
它能做什么?
- 自动执行点击按钮、输入文字等用户行为
- 检查页面是否正确显示
- 发现功能错误或崩溃(Bug)
- 提高开发效率,减少人工测试时间
环境准备:搭建你的第一个测试环境

我们先从最基础的工具开始,一步步搭建出可以运行自动化测试的环境。
🧰 本次使用的是 Android + Appium + Python 的组合,适合新手入门。
第一步:安装 Python
- 下载最新版 Python
- 安装时勾选
Add to PATH - 打开终端(Windows:cmd;Mac/Linux:Terminal),输入:
python --version
如果能看到类似 Python 3.11.x 的输出说明安装成功。
第二步:安装 Appium
Appium 是专门用于移动应用自动化测试的开源工具。
方法一(推荐):通过命令行安装
npm install -g appium
✅ 如果没有 npm,请先安装 Node.js
验证安装:
appium --version
你会看到类似 Appium v2.x.x 的版本信息。
第三步:安装 Appium 的 Python 库
pip install Appium-Python-Client
第四步:准备 Android 设备(真实机 or 模拟器)
你可以选择以下任意一种设备进行测试:
- 连接上电脑的真实安卓手机
- 使用 Android Studio 创建虚拟设备(AVD)
确保你的设备已经开启 USB 调试模式。
核心概念:理解测试中的“关键词”


为了让你更好地理解接下来要做的事,这里介绍几个常用术语:
1. 测试脚本(Test Script)
就是用编程语言(如 Python)写的“自动帮你点按钮”的程序。
2. 元素定位(Element Locator)
你想让程序点击“登录”按钮,但它怎么知道哪一个是“登录”按钮呢?这就需要用到元素定位。
常用方法有:
find_element_by_accessibility_id()find_element_by_id()find_element_by_xpath()
我们会结合具体代码来解释这些是什么意思。
3. Appium Server
你可以把它看作是电脑和手机之间的翻译官。你写的测试脚本发给 Appium Server,然后它再告诉手机该怎么做。
实战项目:编写你的第一个自动化测试脚本

我们将测试一个简单的 App —— 假设它有一个按钮,点击后弹出一段文字。
目标:
- 启动 App
- 点击按钮
- 验证是否出现指定文字
步骤一:启动 App 并连接 Appium
首先,我们要用 Python 编写一个脚本:
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': 'emulator-5554', # 可以用adb devices查看设备编号
'appPackage': 'com.example.myapp', # 替换为你App的实际包名
'appActivity': '.MainActivity' # 替换为你的主活动名称
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
📌 注意:
- 运行这段代码前,必须先手动启动 Appium Server。
- 替换好你的
appPackage和appActivity,可以通过 ADB 查看。
步骤二:找到按钮并点击它
我们假设按钮的 ID 是 click_me_button,你可以通过工具(如 uiautomatorviewer)找到元素 ID。
button = driver.find_element_by_id("com.example.myapp:id/click_me_button")
button.click()
步骤三:验证结果(判断是否有特定文本)
我们希望点击按钮后弹出一个提示:“Hello, Automation!”
text_element = driver.find_element_by_id("com.example.myapp:id/result_text")
assert text_element.text == "Hello, Automation!"
print("测试成功!")
最终整合脚本如下:
from appium import webdriver
def test_first_automation():
desired_caps = {
'platformName': 'Android',
'deviceName': 'emulator-5554',
'appPackage': 'com.example.myapp',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 点击按钮
button = driver.find_element_by_id("com.example.myapp:id/click_me_button")
button.click()
# 验证结果
result_text = driver.find_element_by_id("com.example.myapp:id/result_text")
assert result_text.text == "Hello, Automation!"
print("✅ 测试通过!")
driver.quit()
if __name__ == '__main__':
test_first_automation()
常见问题解答(FAQ)
Q1:找不到按钮怎么办?
可能的原因:
- 元素 ID 写错了
- APP还没加载出来,就去点击了
- 按钮不是可见状态
💡 解决建议:
- 使用
sleep()或wait()等待元素出现 - 用
uiautomatorviewer工具查看元素属性
示例等待写法:
import time
time.sleep(3) # 等待3秒
更专业的做法是使用 WebDriverWait:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, 'your_element_id')))
Q2:报错“Connection refused”
可能是 Appium Server 没有启动。
🔧 解决步骤:
- 打开终端,运行
appium - 确认输出中有一行类似:
Appium REST http interface listener started on 0.0.0.0:4723
Q3:找不到 App Package 和 Activity 怎么办?
可以用 adb 命令查看当前前台应用信息:
adb shell dumpsys window | grep mCurrentFocus
输出类似:
mCurrentFocus=Window{abcde u0 com.example.myapp/.MainActivity}
其中 com.example.myapp/.MainActivity 就是 package 和 activity。
Q4:为什么我的脚本跑完后 App 没退出?
因为我们在最后调用了 driver.quit(),如果你没看到这句,记得加上它:
driver.quit()
学习建议:下一步该学什么?
恭喜你完成了第一个移动自动化测试脚本!
接下来你可以尝试学习:
✨ 更高级的定位方式:
- XPath 表达式定位
- Accessibility ID 定位
- 通过文本查找元素
🔁 添加更多交互场景:
- 输入用户名密码
- 拖动滑块
- 处理 Toast 提示、Alert 弹窗
⏱️ 使用单元测试框架组织测试:
- 使用
unittest或pytest来管理多个测试用例 - 自动生成 HTML 报告
🤖 扩展 iOS 测试技能:
- 搭建 iOS 自动化测试环境(需要 Mac 机器)
- 学习 XCUITest 工具链
📊 接入 CI/CD(持续集成)系统:
- 与 GitHub Action / Jenkins 集成,实现每天自动跑测试
结语:坚持多写多练,成为自动化达人!
移动测试自动化是一项实用又有趣的技能。一开始可能会遇到各种坑,但只要跟着步骤一步步来,动手实践,你就一定能掌握它!
别忘了,每个高手都是从“Hello World”开始的 😊
📅 练习建议:
- 每天花 30 分钟复现实验
- 把自己常用的 App 拿来做测试对象
- 尝试为别人的应用写自动化脚本
欢迎你在评论区分享你的第一个自动化测试截图或心得!
🔚

评论 0