一、移动端自动化测试工具对比
| 工具 | 平台支持 | 语言支持 | 特点 |
|---|---|---|---|
| Robotium | Android | Java | 不支持跨应用 |
| Macaca | PC、Android、iOS | Java、Python、Node.js | 支持跨端 |
| Appium | Android、iOS、Windows | 多语言(Java、Python、PHP等) | 开源、社区活跃、支持跨平台 |
二、Appium 特点
-
支持 Native App、Web App、Hybrid App
-
无需重新编译 App
-
Server 跨平台(macOS、Windows、Linux)
-
多语言支持
三、Appium 设计原理
-
C/S 架构:Client 发送 HTTP 请求,Appium Server 解析并转发到设备
-
Android:转发给 UIAutomator2(AppiumBootstrap.jar)
-
iOS:转发给 XCUITest / WebDriverAgent
-
Session:每个 Client 连接 Server 后创建一个 session,自动化操作围绕 session 进行
四、Android 自动化环境搭建
| 组件 | 说明 | 安装方式 |
|---|---|---|
| JDK | 1.8 版本 | 配置 JAVA_HOME 和 Path |
| Android SDK | 包含 adb、uiautomatorviewer | 配置 ANDROID_HOME 和 Path |
| Appium Server | 1.22.3 | 从 GitHub 下载安装 |
| 模拟器 | Mumu 3.x | 网易模拟器 |
| Appium-Python-Client | Python API 库 | pip install Appium-Python-Client |
五、ADB 常用命令
| 分类 | 命令 | 作用 |
|---|---|---|
| 设备连接 | adb devices |
查看设备列表 |
| 应用安装 | adb install xx.apk |
安装 App |
| 应用卸载 | adb uninstall 包名 |
卸载 App |
| 文件上传 | adb push 本地路径 手机路径 |
上传文件 |
| 文件下载 | adb pull 手机路径 本地路径 |
下载文件 |
| 查看日志 | adb logcat > log.txt |
保存日志 |
| 启动应用 | adb shell am start 包名/Activity |
启动 App |
| 停止应用 | adb shell am force-stop 包名 |
强制停止 |
| 查看内存 | adb shell dumpsys meminfo 包名 |
查看内存信息 |
| Monkey测试 | adb shell monkey -p 包名 -v 次数 |
稳定性测试 |
六、元素定位工具:UIAutomatorViewer
-
用于获取 App 元素属性(id、class、text、bounds 等)
-
使用前需连接设备/模拟器
-
常见问题:闪退(JDK版本问题)、连接失败(重置 adb)
七、Appium 基础 API
1. 应用操作
| 方法 | 说明 |
|---|---|
start_activity(appPackage, appActivity) |
跳转到其他应用 |
current_package / current_activity |
获取当前包名/界面名 |
close_app() |
关闭当前 App |
quit() |
关闭驱动 |
install_app(app_path) |
安装 App |
remove_app(app_id) |
卸载 App |
is_app_installed(app_id) |
判断是否安装 |
background_app(seconds) |
将 App 置于后台 |
2. 元素定位
driver.find_element(By.ID, "id值")
driver.find_element(By.CLASS_NAME, "class值")
driver.find_element(By.XPATH, "xpath表达式")
3. 元素操作
element.click() # 点击
element.send_keys("xx") # 输入
element.clear() # 清空
element.text # 获取文本
element.location # 获取位置
element.size # 获取大小
element.get_attribute("属性名") # 获取属性值
4. 获取一组元素
elements = driver.find_elements(By.ID, "id值")
八、手机操作 API
| 方法 | 说明 |
|---|---|
driver.get_window_size() |
获取分辨率 |
driver.get_screenshot_as_file("path") |
截图 |
driver.network_connection |
获取网络类型 |
driver.set_network_connection(类型) |
设置网络(如飞行模式) |
driver.press_keycode(键码) |
发送按键(如 HOME、返回) |
driver.open_notifications() |
打开通知栏 |
driver.close_notifications() |
关闭通知栏 |
九、高级手势 TouchAction
from appium.webdriver.common.touch_action import TouchAction
TouchAction(driver).press(el=None, x=None, y=None).wait(ms=1000).move_to(el=None, x=None, y=None).release().perform()
| 方法 | 说明 |
|---|---|
press() |
按下 |
release() |
抬起 |
wait(ms) |
等待 |
move_to() |
移动到目标位置 |
long_press() |
长按 |
perform() |
执行手势 |
十、PO 框架结构(Python + Appium + Pytest + PO)
├── pages/ # 页面对象
├── testcases/ # 测试用例
├── utils/ # 工具类(日志、读取配置等)
├── config/ # 配置文件
├── reports/ # 测试报告
├── conftest.py # pytest 配置
└── run.py # 执行入口
PO 优势:页面业务管理方便,无冗余操作,易于维护。
十一、Git 版本控制
1. Git 组成
- 工作区 → 暂存区 → 版本库(HEAD)
2. 常用命令
git init # 初始化仓库
git add . # 添加到暂存区
git commit -m "注释" # 提交到仓库
git clone 仓库地址 # 克隆仓库
git branch 分支名 # 创建分支
git checkout 分支名 # 切换分支
git merge 分支名 # 合并分支
git branch -d 分支名 # 删除分支
3. 冲突解决
- 两个开发修改同一区域 → 手动保留其一或合并
十二、Gitee 远程仓库
- 注册账号 → 创建仓库 → 配置 SSH 公钥 → 推送代码
git remote add origin 仓库地址
git push -u origin master
十三、Jenkins 持续集成
1. 启动 Jenkins
java -jar jenkins.war --httpPort=8888
2. Jenkins 配置步骤
-
源码管理:配置 Git 仓库地址
-
构建触发器 :定时任务(如
0 8 * * *每天8点) -
构建操作:执行 pytest 命令
-
构建后操作:配置 Allure 报告路径
-
邮件通知:配置 SMTP 服务器和邮件模板
3. 常见问题
-
测试报告无内容:在 Jenkins 管理页面执行:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")