移动应用测试自动化:从零开始动手做项目
大家好,我是小陈,一名211高校计算机专业的研二学生。平时除了搞科研,我也喜欢写技术博客,帮助刚入门的同学少走弯路。最近有不少学弟学妹问我:“移动开发这么火,怎么保证App质量?手动点来点去太累了!”这让我想起自己当初学的时候——每天重复点击几十次相同流程,手都快抽筋了,直到接触了测试自动化,才真正解放双手。
今天这篇教程,就是专门为完全零基础的同学准备的。我会用最通俗的语言,带你一步步搭建环境、理解概念,并完成一个真实的自动化测试项目。更特别的是,我们会把区块链、爬虫这些热门技术巧妙地融合进来,让你看到它们在测试场景中的实际价值。别担心,即使你连“Appium”都没听过,也能跟着做完!
一、测试自动化到底是什么?
简单说,移动应用测试自动化就是让电脑代替你,自动操作手机App,验证功能是否正常。
比如:你开发了一个登录页面,传统做法是每次改代码后,手动输入账号密码、点击登录、看是否跳转成功。而自动化则是写一段脚本,告诉电脑:“打开App → 输入用户名‘test’ → 输入密码‘123456’ → 点击登录按钮 → 检查是否出现首页”。之后每次运行脚本,它就自动完成整套流程。
✅ 好处:省时、可重复、不易出错
❌ 误区:不是所有测试都能自动化!UI频繁变动的功能就不适合。
我当初以为自动化能解决一切问题,结果一个UI大改版,我的脚本全废了……所以记住:自动化适合稳定、高频、核心路径的测试。
二、环境准备:5步搞定开发工具链
我们使用业界主流的 Appium + Python 组合。Appium 是开源的移动端自动化测试框架,支持 iOS 和 Android;Python 语法简单,适合新手。
步骤 1:安装 Python(3.7+)
- 官网下载:https://www.python.org/downloads/
- 安装时勾选 “Add to PATH”
- 验证:终端输入
python --version,看到版本号即成功
步骤 2:安装 Android SDK(仅需命令行工具)
- 下载 Android Command Line Tools:官方链接
- 解压到
C:\android-sdk(Windows)或~/android-sdk(Mac/Linux) - 设置环境变量:
# Mac/Linux 用户在 ~/.zshrc 或 ~/.bashrc 中添加 export ANDROID_HOME=~/android-sdk export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools - 验证:终端输入
adb devices,如果返回设备列表(或空列表但无报错),说明 adb 已就绪
步骤 3:安装 Appium Server
npm install -g appium
提示:需先安装 Node.js(官网下载即可)
启动 Appium:
appium
看到 [Appium] Welcome to Appium v2.x.x 表示启动成功(默认监听 http://127.0.0.1:4723)
步骤 4:安装 Python 客户端库
pip install Appium-Python-Client selenium
步骤 5:准备测试 App
我们可以用一个简单的 APK 文件。这里推荐使用官方示例 App ApiDemos.apk:
- 下载地址:https://github.com/appium/appium/raw/master/sample-code/apps/ApiDemos-debug.apk
- 将其放到项目目录下,比如
./apps/ApiDemos-debug.apk
📌 避坑指南:
- Windows 用户注意路径分隔符用
/或\\- 若
adb devices找不到手机,请开启“USB调试模式”
三、核心概念:3个关键词搞懂自动化
1. Desired Capabilities(能力配置)
这是告诉 Appium “你要测什么设备、什么App”的配置字典。
caps = {
"platformName": "Android",
"deviceName": "emulator-5554", # 通过 adb devices 查看
"app": "./apps/ApiDemos-debug.apk",
"automationName": "UiAutomator2"
}
| 参数 | 说明 |
|---|---|
| platformName | 平台:Android / iOS |
| deviceName | 设备名称(模拟器或真机) |
| app | 本地 APK 路径 或 包名(已安装) |
| automationName | Android 推荐 UiAutomator2 |
2. 元素定位(如何“找到”按钮?)
就像网页用 XPath/CSS,App 也有自己的定位方式:
from appium import webdriver
driver = webdriver.Remote("http://127.0.0.1:4723", caps)
# 方式1:通过 ID(最稳定)
login_btn = driver.find_element("id", "com.example.app:id/login")
# 方式2:通过文本(适合中文按钮)
ok_btn = driver.find_element("xpath", "//*[@text='确定']")
# 方式3:通过 Accessibility ID(开发者需提前设置)
search_box = driver.find_element("accessibility id", "搜索框")
💡 建议:优先用 ID,其次 accessibility id,最后才用 XPath(易受 UI 变动影响)
3. 断言(如何判断测试成功?)
自动化不只是操作,更要验证结果!
# 点击登录后,检查是否跳转到首页
driver.find_element("id", "login_btn").click()
# 断言:首页标题是否存在
try:
home_title = driver.find_element("id", "home_title")
assert home_title.text == "欢迎回来!"
print("✅ 登录测试通过")
except:
print("❌ 登录失败")
四、实战项目:用自动化验证区块链钱包交易
现在,我们来做个有意思的项目:自动化测试一个模拟区块链钱包 App 的交易功能。
🎯 项目目标:
- 启动钱包 App
- 输入接收方地址和金额
- 发起转账
- 从区块链浏览器(通过爬虫)验证交易是否上链
第一步:准备模拟 App
由于真实区块链钱包较复杂,我们用 ApiDemos 模拟一个“转账页面”:
- 进入
Views → Controls → Light Theme - 假设:
- EditText (ID:
edit1) 是接收地址 - EditText (ID:
edit2) 是金额 - Button (文本: "Send") 是发送按钮
- EditText (ID:
第二步:编写自动化脚本
# test_blockchain_transfer.py
import time
from appium import webdriver
import requests
from bs4 import BeautifulSoup
# 1. 启动 App
caps = {
"platformName": "Android",
"deviceName": "emulator-5554",
"app": "./apps/ApiDemos-debug.apk",
"automationName": "UiAutomator2",
"appPackage": "io.appium.android.apis",
"appActivity": "io.appium.android.apis.view.ControlsLight"
}
driver = webdriver.Remote("http://127.0.0.1:4723", caps)
try:
# 2. 输入转账信息
address_field = driver.find_element("id", "edit1")
amount_field = driver.find_element("id", "edit2")
address_field.send_keys("0xAbC123...def456") # 模拟区块链地址
amount_field.send_keys("1.5")
# 3. 点击发送
send_btn = driver.find_element("xpath", "//*[@text='Send']")
send_btn.click()
time.sleep(2) # 等待操作完成
# 4. 模拟:生成一个交易哈希(真实项目中由App返回)
fake_tx_hash = "0x" + "a"*64 # 如 0xaaaaaaaa...
# 5. 用爬虫验证交易是否上链(模拟区块链浏览器)
tx_valid = check_transaction_on_blockchain(fake_tx_hash)
if tx_valid:
print("✅ 区块链交易已确认!")
else:
print("❌ 交易未上链")
finally:
driver.quit()
第三步:集成爬虫验证交易
这里我们模拟从区块链浏览器(如 Etherscan)抓取交易状态:
def check_transaction_on_blockchain(tx_hash):
"""
模拟爬取区块链浏览器,验证交易是否存在
真实项目中替换为实际 API 或 HTML 解析
"""
# 示例:假设我们有一个 mock API
mock_api_url = f"https://mock-blockchain-api.com/tx/{tx_hash}"
try:
response = requests.get(mock_api_url, timeout=5)
data = response.json()
return data.get("status") == "confirmed"
except:
# 模拟:随机返回 True/False(教学用途)
import random
return random.choice([True, False])
🔍 为什么结合爬虫?
在真实测试中,App 只显示“发送成功”,但钱是否真的到账?我们需要从链上数据验证。这时,用爬虫或 API 查询区块链浏览器就成了关键一环!
第四步:运行项目
- 启动 Android 模拟器(或连接真机)
- 终端运行 Appium Server:
appium - 运行测试脚本:
python test_blockchain_transfer.py
你会看到模拟器自动打开 App、输入内容、点击按钮,并输出验证结果!
五、新手常见问题 & 解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
adb devices 找不到设备 |
USB调试未开启 / 驱动未装 | 开启开发者选项 → USB调试;Windows 安装手机驱动 |
| Appium 启动报错 “session not created” | Desired Capabilities 配置错误 | 检查 appPackage 和 appActivity 是否正确(可用 adb shell dumpsys window windows | grep -E 'mCurrentFocus' 查看) |
| 元素找不到(NoSuchElementException) | 页面未加载完 / ID 写错 | 加 time.sleep(2) 等待;用 driver.page_source 打印当前页面结构 |
| 脚本运行一次后无法再次运行 | App 未卸载,缓存干扰 | 在 caps 中加 "noReset": False,每次重装 App |
| 爬虫被反爬 | 请求频率过高 / 无 User-Agent | 添加 headers,降低请求频率 |
💬 我踩过的坑:
有一次我用 XPath 定位按钮//button[@text='Login'],结果 App 更新后按钮变成<div>标签,脚本全挂。从此以后,我坚持要求开发同事给关键元素加testID!
六、下一步学习建议
恭喜你完成了第一个自动化测试项目!但这只是起点,接下来你可以:
深入学习 Appium 高级功能
- 多设备并行测试
- 图像识别(处理验证码等)
- 自定义手势操作(swipe, pinch)
结合 CI/CD 实现持续测试
把脚本接入 Jenkins/GitHub Actions,每次代码提交自动运行测试。探索更多技术融合场景
- 用 区块链 存储测试结果(不可篡改的日志)
- 用 爬虫 监控竞品 App 的 UI 变化,自动更新测试脚本
尝试其他框架
- iOS 测试:XCTest + WebDriverAgent
- 跨平台:Detox(React Native 专用)
🌟 最后鼓励:
自动化测试不是“写一次就永远不用管”,它需要维护。但当你看到几百条测试用例在几分钟内跑完,而别人还在手动点击时,你会觉得一切都值得!
如果你觉得这篇教程有帮助,欢迎关注我的博客,我会持续更新移动端开发与测试的实战内容。有问题也欢迎留言,我们一起进步!

评论 0