干货|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有没有更深一步的认识了呢?



相关文章
|
5天前
|
Java Android开发
Rockchip系列之CAN APP测试应用实现(4)
Rockchip系列之CAN APP测试应用实现(4)
24 1
|
3天前
|
数据采集 Java 开发工具
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境
|
5天前
|
XML 数据格式
Xpath高阶定位技巧,轻松玩转App测试元素定位!
XPath是一种用于XML文档中节点定位的语言,支持逻辑运算符(and、or、not)、轴定位、谓词和内置函数。
19 0
|
5天前
|
编解码 测试技术 Android开发
Appium Inspector与Weditor:移动端测试的利器
本文介绍了两款移动端自动化测试的元素定位工具:Appium Inspector和weditor。Appium Inspector是官方推荐的辅助工具,而weditor是基于Python的ATX生态工具,支持Android和iOS界面分析。weditor安装需Python 3.6以上版本,可能遇到的GBK编码问题可通过更改系统区域设置解决。它提供设备界面、元素详情和代码运行三个主要部分,便于元素定位、属性查看及交互代码执行。这两款工具对于提升开发和测试效率具有积极作用。
46 8
|
5天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
5天前
|
前端开发 JavaScript 测试技术
深入探索自动化测试框架:Selenium与Appium的对比分析
【4月更文挑战第29天】 在快速迭代的软件发展环境中,自动化测试已成为确保软件质量和加速产品上市的关键步骤。本文将重点探讨两种广泛使用的自动化测试框架——Selenium和Appium,通过对比它们的核心特性、适用场景及执行效率,为软件开发和测试团队提供选择指南。文章不仅分析了各自的技术架构和脚本语言支持,还讨论了它们在处理Web应用和移动应用测试时的优缺点,旨在帮助读者根据项目需求做出更加明智的选择。
|
5天前
|
安全 开发工具 Android开发
3种方式自动化控制APP
自动化控制APP不管是在工作还是生活方面,都可以帮助我们高效地完成任务,节省时间和精力。本文主要介绍自动化控制APP的3种常用方式。
3种方式自动化控制APP
|
5天前
|
XML 数据格式 Python
App测试中,强制等待和隐式等待谁更强?
本文介绍了在自动化脚本中添加等待以确保与应用程序同步的重要性。由于应用响应时间的不确定性,适当等待能防止脚本在操作未完成前继续执行,提高测试稳定性。等待包括强制等待(如`time.sleep()`)、隐式等待(全局设置查找元素的等待时间)和显式等待(根据预期条件等待)。示例代码展示了如何在Python的Appium测试中应用这些等待策略,以优化脚本的可靠性和与应用的同步。
24 0
|
5天前
|
测试技术 Python
App自动化测试中,如何更好地处理弹窗?
在App自动化测试中,处理弹窗异常是保证测试稳定性和可靠性的重要环节。当遇到广告弹窗、升级提示等不定时出现的UI元素时,可以采用黑名单处理方法,如上述Python代码示例,通过尝试点击黑名单中的元素来避免干扰。同时,利用异常处理装饰器可以增强函数功能,保持代码整洁,当异常发生时记录日志、截图并保存页面源代码,便于问题排查。这两种策略能有效提升测试的效率和质量。
9 0
|
5天前
|
数据采集 小程序 网络安全
云擎技术---分析工信部APP备案的“传闻”
APP备案并非新事物,自2005年起已有非经营性互联网信息服务备案制度。备案针对的是网站主办者,而非用户,不涉及个人用户网络访问。网络接入服务提供者包括ISP和IDC,不限于三大运营商。通知要求不为未备案网站提供接入,但不影响国外软件使用。个人开发者不能涉及经营性内容,备案审核时长1-20个工作日。境内服务器和国内应用商店需备案,境外则无需。手机厂商不会开启白名单制,仅实行黑名单制。APP备案与民营经济发展壮大意见不冲突,工信部有权颁布相关规定。该政策不存在逐步试探底线情况,所有解读均有法律依据。
33 3
云擎技术---分析工信部APP备案的“传闻”