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

简介: 想要使用 Appium 进行测试,那么就一定要先了解Appium的原理。Appium 不仅能够实现移动端的 JSONWP,并且延伸到了 Selenium 的 JSONWP,它能够控制不同移动设备的行为,例如通过会话安装和卸载 APP。## Appium 原理![](https://ceshiren.com/uploads/default/original/3X/4/3/435691a3
更多技术文章分享和免费资料领取
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=Aliyun&timestamp=1650872751

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

Appium 原理

图中依赖关系解释:

  • 可以使用 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 日志:

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

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

更详细的模板信息可以参考下面的链接:
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有没有更深一步的认识了呢?

内容全面升级,4 个月 20+ 项目实战强化训练,资深测试架构师、开源项目作者亲授 BAT 大厂前沿最佳实践,带你一站式掌握测试开发必备核心技能(对标阿里P6+,年薪50W+)!直推 BAT 名企测试经理,普遍涨薪 50%+!

⬇️ 点击“阅读原文”,提升测试核心竞争力!
原文链接

⬇️ 点击“下方链接”,提升测试核心竞争力!+V~ ceshiren001

更多技术文章分享和免费资料领取
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=Aliyun&timestamp=1650872751
相关文章
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
84 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
2月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
3月前
|
芯片
LDO的原理及测试方法
一、基本结构 这是LM317芯片的核心,这个电路单元称为Bandgap Reference带隙基准源。属于模拟集成电路中的经典电路结构。 LDO拓扑结构图 常见的基本结构 利用VBE的负温度系数,而VT是正温度系数,正负温度系数抵消就的得到稳定的基准参考电压了(三极管的方程VBE=VT*In(lC/IS))。 二、测试意义 了解集成电路的内部结构对测试有意义么? 1、了解内部结构,才能更好的理解测试原理或者设计测试方案2、可以学习提升对电路结构的理解能力。 针对LM317,了解了内部简单原理,可以知道1、内部结构设计针对的是温度系数,因此可能受温度的影响,实际也是会受到温度的影
186 88
|
2月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
43 1
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
256 7
Jmeter实现WebSocket协议的接口测试方法
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
3月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
3月前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
2月前
|
缓存 网络协议 Linux
Python渗透测试之ARP毒化和协议应用
Python渗透测试之ARP毒化和协议应用
36 0
|
2月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。