首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
虚拟化.超融合.云计算
›
公有云
›
SAAS
›
UI自动化框架appium工作原理
返回列表
发新帖
UI自动化框架appium工作原理
[复制链接]
发表于
昨天 18:41
|
显示全部楼层
|
阅读模式
一、框架组成
Appium由三个主要模块构成:Client端、Server端和移动端。
Client端:就是发起command的一端,狭义可以理解为java/python编写的
自动化测试脚本
或者自动化测试脚本实行的呆板。
Server端:即
启动的appium进程
。
Server端作为信息中转站,接收Client端发送的请求,并根据请求类型和目标平台,将相应的控制命令转发到被测应用的移动端上。Server端启动时会创建一个HTTP服务,监听特定端口(如默认的4723端口)。
移动端:
移动端是真正实行自动化测试的地方。在Android装备上,通常有一个名为bootstrap.jar的中间件;在iOS装备上,则是一个名为bootstrap.js的脚本。这些中间件负责监听来自Appium Server的命令,并在移动装备上实行相应的UI自动化操作。
焦点思想:WebDriver 协议 + 客户端-服务器架构
Appium 的焦点设计哲学非常巧妙,可以概括为两点:
遵照 WebDriver 协议
:Appium 没有自己创造一套新的标准,而是扩展了
Selenium WebDriver
用于自动化浏览器的协议(称为 JSON Wire Protocol 及其后继者 W3C WebDriver)。这意味着任何兼容 WebDriver 的客户端库(如 Java、Python、JavaScript、Ruby 等)都可以直接用来写 Appium 脚本。
客户端-服务器架构
:Appium进程是一个
HTTP Server
。测试脚本(客户端)通过 HTTP 请求向 Appium Server 发送命令(如“点击”、“查找元素”),Appium Server 接收到命令后,负责将其翻译成移动装备(iOS/Android)能够理解的原生指令并实行。
二、appium的几个重要概念
client
:就是发起command的一端,狭义可以理解为java/python编写的自动化测试代码或者自动化测试代码实行的呆板。
appium server
:即
启动的appium进程
,专门用于监听来自client端的请求,转发请求并转为移动端能识别的command(WebDriver协议),然后发送给移动端装备进行操作,等候操作效果,将操作效果发送给client端。
默认开启并监听4723端口。
Appium通过HTTP协议进行Client与Server之间的通信
。Client端发送请求到Appium Server的特定端口,并使用JSON格式的数据交换测试信息和实行效果。
在移动装备端,中间件(如bootstrap.jar或bootstrap.js)通过socket连接与Appium Server进行通信
。中间件接收来自Appium Server的命令,并在移动装备上实行相应的操作,然后将实行效果反馈回Appium Server。
WebDriver协议在Appium中起到了桥梁的作用,使得Client端能够与移动装备进行交互,实现自动化测试。
Desired Capabilities
:这是启动 Appium 会话的“设置清单”,是一个 JSON 对象,用于告诉 Appium Server 你希望如何启动和实行会话。例如:启动浏览器还是移动装备?启动Android还是iOS?启动Android时,app的包名是什么;app的activity是什么。
session
:session就是一个会话,在appium中,所有工作都是在session start后才可以进行。启动session需要传入Desired Capabilities获取一个全局唯一的session id,这个id指定了实行自动化测试的浏览器或者移动装备。
三、appium工作流程
工作流程的几个关键步骤:
启动会话 (Session)
:你的测试脚本(客户端)通过向 Appium Server 发送一个包含 Desired Capabilities(装备名、应用路径、自动化引擎等)的 HTTP 请求来启动一个会话。Appium 会根据这些设置初始化对应的自动化框架(如 UiAutomator2/XCUITest),并在装备上安装一个特殊的“服务器署理”(Android 上是 bootstrap.jar,iOS 上是 WebDriverAgent)。
实行命令
:
自动化脚本(client)发送一个命令(如 find_element 查找元素)。
Appium Server 接收到这个标准的 WebDriver 命令。
Appium Server 通过之前创建的连接,将这个命令转发给装备上正在运行的“服务器署理”(Bootstrap/WebDriverAgent)。
这个“服务器署理”负责调用平台原生的自动化框架(UiAutomator2/XCUITest)。
原生框架最终在装备的 UI 层级中实行真正的操作(如查找、点击、滑动)。
返回响应
:操作实行后的效果(成功或失败信息)会沿着原路返回,最终以 HTTP 响应的形式送达你的测试脚本。
四、焦点原理:“不重新编译”与“跨平台”
Appium 官方标语是 "
Cross-platform, don't recompile your app
"。它通过以下两个关键技能点实现了这一目标:
1. 不重新编译你的应用
传统自动化框架(如 Apple 的 UIAutomation)需要将自动化库编译到待测应用中。
Appium 不需要对被测应用做任何修改或重新编译。它利用了各平台官方提供的
底层自动化框架
来驱动应用:
Android
对于 4.2+ 版本:使用
UiAutomator2(现在主流)
。UiAutomator2 是 Google 提供的官方测试框架,可以获取屏幕内容并实行操作。
对于更老版本:使用 Selendroid(基于 Instrumentation)。
iOS
对于 9.3+ 版本:使用
XCUITest(现在主流)
。XCUITest 是 Apple 提供的官方 UI 测试框架。
对于更老版本:使用 UIAutomation(已废弃)。
简单来说,
Appium 就像一个“翻译官”和“中间商”
。它接收标准的 WebDriver 命令,然后“调用”装备上这些官方的自动化框架来实行实际的操作。因为使用的是官方框架,所以不需要修改应用本身。
2. 跨平台
由于 Appium 在服务器层为 iOS 和 Android 提供了不同的“翻译”实现(即不同的“驱动”,如 XCUITestDriver 和 UiAutomator2Driver),但
对客户端暴露的是同一套 WebDriver API
。这意味着可以用同一套编程语言、几乎相同的代码结构来为 iOS 和 Android 编写自动化测试,大大进步了代码的复用性。
五、总结
Appium 的原理可以精炼为:
协议标准化
:接纳并扩展 WebDriver 协议,使客户端编写标准化。
架构清楚
:接纳 C/S 架构,职责分离,客户端只需关注业务逻辑,服务器负责翻译和实行。
借力官方
:不造轮子,
直接调用各平台官方的底层自动化框架(UiAutomator2/XCUITest)来驱动装备
,因此无需修改被测应用。
跨平台同一
:通过在服务器端为不同平台提供不同的“驱动”实现,对上层提供同一的 API,从而实现真正的跨平台自动化。
六、附录
1.在Android装备的详细工作过程:
Appium server将监听到的4723端口的指令,转发给中间件Bootstrap.jar,Bootstrap.jar是用Java编写的,安装在Android手机上;
Bootstrap监听4724端口并接收Appium server的指令;
Bootstrap再通过调用UIautomator的命令来实现具体的command操作。
最后Bootstrap将实行的效果返回给Appium server。
2.参考资料
appium工作原理
APP自动化测试系列之Appium介绍及运行原理
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
浏览过的版块
时序数据库
信创/国产替代
PLM
Nosql
备份
南七星之家
+ 我要发帖
×
登录参与点评抽奖,加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表