Appium 简介

Appium 是一个开源的移动应用自动化测试框架,用于测试原生应用(native)、混合应用(hybrid)和移动网页应用(mobile web)。它支持 iOS、Android 和 Windows 平台。

 https://www.bilibili.com/video/BV1R93szkEhi/?

App自动化测试:App测试Appium+UiAutomator2技巧、实战项目

核心特点

  1. 跨平台:同一套 API 可用于 iOS 和 Android

  2. 多语言支持:支持多种编程语言(Java, Python, Ruby, JavaScript, C#等)

  3. 开源免费:完全开源,无需授权费用

  4. 不依赖应用代码:不需要修改或重新编译应用

  5. 支持多种应用类型:原生、混合和移动网页应用

工作原理

Appium 采用客户端-服务器架构:

  • Appium 服务器:基于 Node.js 实现,负责与设备通信

  • 客户端库:各种语言的客户端库(如 Python 的 Appium-Python-Client)

  • 底层驱动

    • iOS: 使用 XCUITest(Apple 官方框架)

    • Android: 使用 UIAutomator2/Espresso(Google 官方框架)

基本使用流程

  1. 安装 Appium 服务器(npm install -g appium)

  2. 安装客户端库(如 Python: pip install Appium-Python-Client)

  3. 编写测试脚本

  4. 启动 Appium 服务器

  5. 运行测试脚本

简单 Python 示例

python

from appium import webdriverdesired_caps = {'platformName': 'Android','platformVersion': '11','deviceName': 'emulator-5554','app': '/path/to/your/app.apk','automationName': 'UiAutomator2'
}driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 执行测试操作
element = driver.find_element_by_id("com.example:id/button")
element.click()driver.quit()

主要功能

  1. 元素定位:支持 ID、XPath、类名等多种定位方式

  2. 手势操作:点击、滑动、拖拽、缩放等

  3. 上下文切换:在原生和 WebView 之间切换

  4. 设备控制:旋转屏幕、返回键、主页键等

  5. 并行测试:支持多设备同时测试

适用场景

  1. 移动应用 UI 自动化测试

  2. 回归测试

  3. 兼容性测试

  4. 功能测试

  5. 自动化演示

Appium 是移动应用自动化测试的主流选择之一,特别适合需要跨平台支持的测试场景。

是app自动化测试用的吗

是的,Appium 是专门用于 移动应用(App)自动化测试 的开源框架,支持 Android、iOS 和 Windows 平台上的原生应用(Native App)、混合应用(Hybrid App)和移动网页应用(Mobile Web App)的自动化测试。


Appium 的主要用途

  1. UI 自动化测试

    • 模拟用户操作(点击、滑动、输入等)

    • 验证界面元素是否正确显示

    • 检查交互逻辑是否符合预期

  2. 功能测试

    • 测试登录、注册、支付等核心业务流程

    • 验证 API 与 UI 的交互是否正确

  3. 回归测试

    • 每次发布新版本时,自动运行测试用例,确保旧功能不受影响

  4. 兼容性测试

    • 在不同设备、不同系统版本上运行测试,确保 App 兼容性

  5. 性能测试(结合其他工具)

    • 监测 App 启动时间、内存占用、CPU 使用率等


Appium 的核心优势

✅ 跨平台:同一套代码可测试 Android 和 iOS(减少维护成本)
✅ 支持多种语言:Python、Java、JavaScript、Ruby、C# 等
✅ 无需修改 App 代码:直接测试已安装的 App(无需重新编译)
✅ 支持真机和模拟器:可在真实设备或 Android 模拟器/iOS 模拟器上运行
✅ 丰富的定位方式:支持 ID、XPath、Accessibility ID、Class Name 等


Appium 的典型工作流程

  1. 启动 Appium 服务器(基于 Node.js)

  2. 编写测试脚本(如 Python + Appium-Python-Client

  3. 连接设备(真机/模拟器)

  4. 运行测试,生成报告

Python 示例(测试 Android App)

python

from appium import webdriver# 设备配置
desired_caps = {"platformName": "Android","platformVersion": "13","deviceName": "Pixel 6","app": "/path/to/your/app.apk","automationName": "UiAutomator2"
}# 连接 Appium 服务器
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)# 测试操作
search_box = driver.find_element("id", "com.example:id/search_box")
search_box.send_keys("Hello Appium!")
search_box.click()# 关闭会话
driver.quit()

Appium vs 其他移动自动化工具

工具支持平台语言支持是否需要源码适用场景
AppiumAndroid, iOSPython, Java, JS, C#❌ 不需要跨平台 UI 自动化
Espresso (Android)AndroidJava, Kotlin✅ 需要Android 原生测试
XCUITest (iOS)iOSSwift, Obj-C✅ 需要iOS 原生测试
SelendroidAndroidJava❌ 不需要旧版 Android 兼容测试
CalabashAndroid, iOSRuby✅ 需要跨平台 BDD 测试

适用人群

  • 测试工程师:做 App 的 UI 自动化测试

  • 开发人员:在 CI/CD 流程中集成自动化测试

  • DevOps:搭建自动化测试平台,提高发布质量

什么时候选择 Appium?

✔ 需要同时测试 Android 和 iOS
✔ 不想依赖 App 源码(测试已发布的 APK/IPA)
✔ 希望用 Python/Java/JS 等语言编写测试脚本

什么时候不推荐 Appium?

❌ 需要极高的执行速度(原生框架如 Espresso/XCUITest 更快)
❌ 测试游戏(推荐 Unity Test Framework 或 Appium + OpenCV)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913173.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

免费版安全性缩水?ToDesk、TeamViewer、向日葵、网易UU远程访问隐私防护测评

一、前言 在这个居家办公、远程技术支持成为常态的时代,我们经常需要把电脑控制权交给远方的同事或技术人员。但你想过没有,那些免费远程控制软件,真的能保护好你的隐私吗? 好用的远程软件通常会收费运营,投入经费去开…

nginx部署发布Vite项目

1 引言 在之前的文章《Ubuntu云服务器上部署发布Vite项目》中笔者使用了Vite提供的预览服务(npm run preview)来在云服务器上发布Web应用。这样做轻量应用是没问题的,不过遇到一些专业的问题就不行了,最好还是使用专业的HTTP服务器。除此之外&#xff0…

Unity文件夹标签 —— FolderTag

GitHub地址 FolderTag 下载之后解压,将FolderTag文件夹拖进Unity项目的Assets文件夹 选中文件夹,填上标签

【0基础开发油猴脚本】某漫画网站图片旋转

有朋友在用某漫画网站在线看漫画,但是那个网站会把漫画图片右旋90度,如图。于是,他就像我发起了求助,问我能不能写个脚本。我说,AI都发展到2025了,前端(脚本)这种东西还用自己写吗&a…

Vue Router 中,params参数的名称必须与路由配置中的动态路径参数名完全一致

路由配置与 params 参数的绑定关系 在路由配置中,使用 冒号(:) 定义动态路径参数: // router.js(路由配置) { path: /search/:keyword, // 这里的:keyword是动态路径参数 name: Search, component: S…

Spring Boot 应用开发实战指南:从入门到实战(内含实用技巧+项目案例)

📘 Spring Boot 应用开发实战指南:从入门到实战(内含实用技巧项目案例)🚀 你是否还在为 Spring 配置复杂、开发效率低下而苦恼?Spring Boot 早已成为 Java 后端开发的“标配”,本篇文章将带你全…

【NLP入门系列五】中文文本分类案例

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

【微信小程序】- 监听全局globalData数据

【微信小程序】- 监听全局globalData数据 数据劫持(Object.defineProperty)实现适用场景 数据劫持(Object.defineProperty) 实现 通过拦截 globalData 的属性读写实现自动监听,适合精确监听特定变量。 ​实现步骤​&…

高速公路闲置土地资源化利用:广西浦北互通3MW分布式光伏监控实践

摘要: 分布式光伏项目在清洁能源转型中扮演重要角色,其创新的空间利用模式有助于缓解能源开发与土地资源间的矛盾。广西大唐至浦北高速公路(浦北互通)项目,利用高速公路沿线闲置空地建设光伏电站,发挥了分布…

【Linux网络编程】网络基础

目录 计算机网络背景 初识协议 网络协议 协议分层 OSI七层模型 TCP/IP五层(或四层)模型 再识协议 为什么要有TCP/IP协议? 什么是TCP/IP协议? 重谈协议 网络传输基本流程 局域网传输流程 跨网络传输流程 Socket编程预备 理解源IP地址与目的…

BlenderBot对话机器人大模型Facebook开发

文章目录 🚀 BlenderBot 的关键特性🧪 版本与改进📊 应用实例 Blender是搅拌机,果汁机,混合机的意思。 BlenderBot 是由 Facebook AI Research (FAIR) 开发的一种先进的对话生成模型。它旨在通过融合多种对话技能&…

60天python训练计划----day59

在之前的学习中,我们层层递进的介绍了时序模型的发展,从AR到MA到ARMA,再到ARIMA。本质就是把数据处理的操作和模型结合在一起了,实际上昨天提到的季节性差分也可以合并到模型中,让流程变得更加统一。 季节性差分用S来…

学习日志05 python

我相信事在人为,人定胜天,现在还是在基础语法上面打转,还是会提出一些很低级的很基础的问题,不要着急,波浪式前进、螺旋式上升的过程吧,虽然现在的确是很绝望吧...... 今天要做一个练习:编写猜…

LiteHub中间件之gzip算法

gzip算法理论部分LZ777算法霍夫曼编码算法改进型的LZ777算法代码实现压缩对象gzip实现运行分析日志查看wireshark抓包查看后台管理界面查看理论部分 gzip是一种无损压缩算法,其基础为Deflate,Deflate是LZ77与哈弗曼编码的一个组合体。它的基本原理是&…

java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)

源代码数据库LW文档(1万字以上)开题报告答辩稿ppt部署教程代码讲解代码时间修改工具 技术实现 开发语言:后端:Java 前端:vue框架:springboot数据库:mysql 开发工具 JDK版本:JDK1.…

Qt Quick 与 QML(五)qml中的布局

QML布局系统主要分为三大类:锚布局、定位器布局、布局管理器。一、锚布局(Anchors)通过定义元素与其他元素或父容器的锚点关系实现精确定位,支持动态调整。核心特性属性‌‌作用‌‌示例‌anchors.left左边缘对齐目标元素anchors.…

【Java|集合类】list遍历的6种方式

本文主要是总结一下Java集合类中List接口的遍历方式&#xff0c;以下面的list为例&#xff0c;为大家讲解遍历list的6种方式。 List<Integer> list new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);文章目录1.直接输出2.for循环遍…

博弈论基础-笔记

取石子1 性质一&#xff1a;12345可以确定先手赢&#xff0c;6不论取那个质数都输&#xff0c;789 10 11可以分别取12345变成6 性质二&#xff1a;6的倍数一定不能取出之后还是6的倍数&#xff08;不能转换输态&#xff09; #include <bits/stdc.h> using namespace st…

多任务学习-ESMM

简介 ESMM&#xff08;Entire Space Multi-task Model&#xff09;是2018年阿里巴巴提出的多任务学习模型。基于共享的特征表达和在用户整个行为序列空间上的特征提取实现对CTR、CVR的联合训练 解决的问题 SSB&#xff08;sample selection bias&#xff09; 如下图1所示&am…