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", "")
相关推荐
freexyn4 小时前
Matlab自学笔记七十六:表达式的展开、因式分解、化简、合并同类项
笔记·算法·matlab
IT摆渡者6 小时前
linux 系统安全检查
运维·网络·经验分享·笔记
十安_数学好题速析8 小时前
【多选】曲线方程:四步避坑判断曲线类型
笔记·学习·高考
chase。10 小时前
【学习笔记】skrl: 模块化、灵活的强化学习库深度解析
笔记·学习
其实防守也摸鱼10 小时前
CSDN博客写什么?从0到1打造你的技术影响力
笔记·测试用例·博客·教程·ai写作·ai辅助·高质量
EQ-雪梨蛋花汤10 小时前
【Unity笔记】Unity 音游模板与免费资源:高效构建节奏游戏开发全指南
笔记·unity·游戏引擎
xian_wwq11 小时前
【学习笔记】多租户的 Agent 隔离设计
笔记·学习
互联网江湖11 小时前
腾讯AI的时代之问:姚顺雨是不是另一个张小龙?
笔记
深蓝海拓11 小时前
PySide6,图形按钮使用系统内置图标
笔记·python·学习·pyqt
chushiyunen12 小时前
npy文件笔记
笔记·python