干货|app自动化测试之Appium 原理 与 JsonWP 协议分析

简介: 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析

想要使用 Appium 进行测试,那么就一定要先了解Appium的原理。Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为,例如通过会话安装和卸载 APP。

Appium 原理

823×396 76.8 KB

图中依赖关系解释:

  • 可以使用 Java、Python 语言编写测试脚本
  • 通过 Appium 服务去驱动不同设备执行自动化测试
  • Android APP 使用 UiAutomator 驱动,iOS APP 使用 WebDriverAgent 驱动
  • ADB 用来驱动 AdbServer
  • ChromeDriver 可以用来直接与 AdbServer 进行通讯,也可以远程调试 Chrome、WebView 及微信小程序
  • AppCrawler 开源框架也是利用 Appium Server 的服务来完成自动化遍历测试

JsonWP协议分析

JSON wire protocol(JSONWP)是 WebDriver 开发者编写的一种通信协议。这个通信协议是一个预定义的特殊设置,通过 RESTful API 暴露标准端口。

下面看一段 Appium 日志:

1080×141 102 KB

图中发送一个 POST 请求,请求格式为/session/{session id}/element,Webdriver 解析到需要定位的元素,就会转成手机端能够识别的定位元素的指令,去手机端定位到这个元素。

下面是一些用来连接移动应用 URI 模板:

1080×290 76.7 KB

更详细的模板信息可以参考下面的链接:

https://w3c.github.io/webdriver/

上表中的命令均可在移动端调用,比如使用 curl 命令手工模拟发送请求给 Appium,Session id 可以在浏览器访问http://127.0.0.1:4723/wd/hub/sessions,查看有哪些 session。

下面使用 curl 命令,在 Appium 上创建一个 session,然后利用这个 session 发送 find element 请求:

# 使用 curl 命令发送一个 http POST 请求, 带着 -d 后面的参数,也就是 Desired Capability 设置
# 创建一个Session
curl 'http://127.0.0.1:4723/wd/hub/session' \
-XPOST -H "Content-Type: Application/JSON" \
-d '{"capabilities":{value}}'
# 建立连接之后 获取 Session-id
session_id=$(curl 'http://127.0.0.1:4723/wd/hub/sessions' \
 | awk -F\" '{print $6}')
# 使用curl命令 模拟通过 id 定位
curl "http://127.0.0.1:4723/wd/hub/session/${session_id}/element" \
 -H "Content-Type: Application/JSON" \
-d  '{"using":"id","value":"user_profile_icon"}'

运行结果如下:

# 创建 Session
$ curl -l -H "Content-type: application/json" -X POST -d \
'{"desiredCapabilities":{"platformName": "Android",\
"deviceName": "192.168.56.101:5555","platformVersion": \
"6.0","appPackage": "com.xueqiu.android","appActivity": \
"com.xueqiu.android.common.MainActivity"}}'  \
'http://127.0.0.1:4723/wd/hub/session'
# 上面命令的结果
{"value":{"platform":"LINUX","webStorageEnabled":false,\
"takesScreenshot":true,"javascriptEnabled":true,\
"databaseEnabled":false,"networkConnectionEnabled":\
true,"locationContextEnabled":false,"warnings":{},\
"desired":{"platformName":"Android","deviceName":\
"192.168.56.101:5555","platformVersion":"6.0",\
"appPackage":"com.xueqiu.android","appActivity":\
"com.xueqiu.android.common.MainActivity"},"platformName":\
"Android","deviceName":"192.168.56.101:5555","platformVersion":\
"6.0","appPackage":"com.xueqiu.android","appActivity":\
"com.xueqiu.android.common.MainActivity","deviceUDID":\
"192.168.56.101:5555","deviceApiLevel":23,"deviceScreenSize":\
"1080x1920","deviceScreenDensity":420,"deviceModel":\
"Google Nexus 5X","deviceManufacturer":"Genymotion",\
"pixelRatio":2.625,"statBarHeight":63,"viewportRect":{\
"left":0,"top":63,"width":1080,"height":1731}},"sessionId":"1c0bda0f-1a60-4cab-8fe3-f7ee5a6c005b",\
"status":0}%
# 获取 Session id
$ session_id=$(curl 'http://127.0.0.1:4723/wd/hub/sessions' \
    | awk -F\" '{print $6}')
# 定位元素
$ curl "http://127.0.0.1:4723/wd/hub/session/${session_id}/element" \
-XPOST -H "Content-Type: Application/JSON" \
-d  '{"using":"id","value":"com.xueqiu.android:id/tv_search"}'
# 获取结果
{"value":{"element-6066-11e4-a52e-4f735466cecf":\
"ddd0261e-fff0-4642-b24d-bf64a708c916","ELEMENT":\
"ddd0261e-fff0-4642-b24d-bf64a708c916"},"sessionId":\
"1c0bda0f-1a60-4cab-8fe3-f7ee5a6c005b","status":0}%

上面的运行过程分析,首先使用 curl 命令创建一个 Session,然后获取到 session id 存到 session_id 这个变量中,最后通过 curl 发送一个 HTTP 请求完成首先搜索框的查找。

此时大家对Appuim有没有更深一步的认识了呢?



相关文章
|
10月前
|
消息中间件 运维 应用服务中间件
“企业微信iPad协议”凌晨断链:当最后一台测试机决定集体沉默
凌晨1:12,三连报警突响:“实例心跳超时”“消息队列堆积”“老板提刀赶来”。问题源于企业微信iPad协议迁移私有化后,因新旧CA根证书不兼容,触发TLS握手失败,导致全量会话中断。苹果严苛的证书校验机制将请求判定为中间人攻击,直接断连。排查抓包定位:客户端内置证书Pin仅认旧根。解决方案简单却关键:F5重导旧根证书,Nginx配置`ssl_trusted_certificate`指向旧链并reload。2:58,系统恢复,演练数据零丢失。教训深刻:文档未提CA白名单,真实逻辑藏于客户端二进制。部署前务必比对证书指纹,否则警报先于用户消息抵达。
484 1
|
人工智能 缓存 搜索推荐
手把手基于ModelScope MCP协议实现AI短视频创作:零代码自动化工作流
本文介绍了基于ModelScope MCP协议的AI视频生成解决方案,涵盖核心机制解析、零代码工作流搭建、性能优化策略及全链路异常处理。通过统一上下文描述符抽象异构AI服务,实现图像生成、语音合成与视频剪辑的自动化编排。结合缓存优化与错误重试机制,大幅提升生成效率(如5分镜视频从91.7s降至22.4s)。最后展示《夏日海滩》生成案例,并探讨个性化风格迁移与商业场景集成等进阶方向,揭示零代码本质为服务、流程与资源的三层抽象。
1879 18
|
11月前
|
搜索推荐 Devops 测试技术
避免无效回归!基于MCP协议的精准测试影响分析实践
本文揭示传统测试的"孤岛困境",提出MCP(Model Context Protocol)测试新范式,通过模型抽象业务、上下文感知环境和协议规范协作,实现从机械执行到智能测试的转变。剖析MCP如何颠覆测试流程,展示典型应用场景,并提供团队落地实践路径,助力测试工程师把握质量效率革命的新机遇。
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
3975 5
|
缓存 网络协议
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
663 1
Jmeter如何对UDP协议进行测试?
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
3086 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
机器学习/深度学习 人工智能 自然语言处理
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
MarS 是微软亚洲研究院推出的金融市场模拟预测引擎,基于生成型基础模型 LMM,支持无风险环境下的交易策略测试、风险管理和市场分析。
763 8
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
671 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1389 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
306 11

热门文章

最新文章