Appium 自动化测试笔记

一、移动端自动化测试工具对比

工具 平台支持 语言支持 特点
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_HOMEPath
Android SDK 包含 adb、uiautomatorviewer 配置 ANDROID_HOMEPath
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 配置步骤
  1. 源码管理:配置 Git 仓库地址

  2. 构建触发器 :定时任务(如 0 8 * * * 每天8点)

  3. 构建操作:执行 pytest 命令

  4. 构建后操作:配置 Allure 报告路径

  5. 邮件通知:配置 SMTP 服务器和邮件模板

3. 常见问题
  • 测试报告无内容:在 Jenkins 管理页面执行:

    复制代码
    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
相关推荐
yy_xzz2 小时前
【Qt 开发笔记】能扛住断电、多线程的通用配置类(移植直接用)
笔记·qt
我不是懒洋洋3 小时前
AI的影响8
笔记
资深流水灯工程师3 小时前
FREERTOS的核心内容与核心组件
笔记
xian_wwq3 小时前
【学习笔记】GB/T 20986-2023 详解,10 类网络安全事件分类
笔记·学习·web安全
鱼鳞_4 小时前
Java学习笔记_Day27(Stream流)
java·笔记·学习
_李小白4 小时前
【OSG学习笔记】Day 42: OSG 动态场景安全修改
笔记·学习·安全
Kapibalapikapi4 小时前
思考笔记 | SSL证书过期的影响
笔记·加解密
扣脑壳的FPGAer4 小时前
数字信号处理学习笔记--Chapter 1.3 常系数线性差分方程
笔记·学习·信号处理
NULL指向我5 小时前
TMS320F28379D笔记1:主控-从核双核架构认识
笔记·单片机