【L1.第三章】解刨 Appium 工作原理与分析

解刨 Appium 工作原理与分析

Appium 的工作原理涉及到复杂的通信过程。因为 Appium 服务集成了多种技术,它依赖其他服务的支持才能实现对多平台的强大兼容性。通过深入分析原理,可以更好地理解和使用 Appium,并为使用者提供更全面的视角,从而获得更大的帮助。

Appium 应用价值

了解原理虽然是一个有点晦涩难懂的过程,但是会在以下几个方面对我们产生极大的帮助:

  • 应对面试:在大厂的面试过程中,面试官是非常喜欢询问一些原理性的知识,以测试候选人的研究能力。-
  • 分析与解决问题能力:Appium 由于其架构复杂,所以在安装与使用过程中会存在一些问题,掌握原理可以更好的分析问题出现的原因,以及完成对应的解决方案。
  • 二次开发与定制开发能力:了解原理与其设计之后,才可以根据 Appium 的设计进行插件的二次开发与定制。
  • 提升架构能力:每学习一个新的框架与其设计原理,都可以更好的帮助我们提升设计模式与架构设计能力。

Appium 工作原理

在这里插入图片描述

从上图可以了解到,Appium 的设计主要分为三个大模块,每个模块都有其清晰的职能,完全符合设计模式中的单一职责,这也是其可拓展性强的原因:

  1. Client 端:将与 Appium 的各种交互封装为可被调用的 API 或工具,如此一来使用者就可以通过 Inspector 或者 Java/Python/其他语言的 Appium 第三库对 Appium Server 进行调用。
  2. Server 端:起到了信息中转的作用。启动了一个 HTTP 服务,如此就可以接收Client 客户端的请求信息。除此之外,会将所有的控制命令,比如:Adb 命令,自动化的控制命令等其他命令转发到被测应用的移动端上面。
  3. 移动端:真正执行自动化测试的地方。
    在这里插入图片描述

由以上的三个模块可知,为了实现良好的拓展性,其实 Appium 的设计相对是比较复杂的。

Appium 日志分析过程

以上的原理与过程,可以通过日志很清楚的看到整个流转的流程。

注意:日志只保留关键信息,具体的日志信息,可以在 Server 中进行获取。

# 电脑本地的环境检查
[Appium] Welcome to Appium v2.10.0
[Appium] AndroidUiautomator2Driver has been successfully loaded in 0.704s
# 启动4723服务,在电脑端
[Appium]    http://127.0.0.1:4723/ (only accessible from the same host)
[Appium]    http://172.16.3.146:4723/
# 发送HTTP请求,其中主要包含capabilities信息
[HTTP] --> POST /session
[HTTP] {"capabilities":...}
# 创建Session
[AppiumDriver@b535] Calling AppiumDriver.createSession() with args: ......
[AppiumDriver@b535] Event 'newSessionRequested' logged at 1703213142195 (10:45:42 GMT+0800 (北美中部标准时间))
# 检查 driver 的配置环境
[Appium] Attempting to find matching driver for automationName 'uiautomator2' and platformName 'Android'
[Appium] The 'uiautomator2' driver was installed and matched caps.
[Appium] Will require it at /Users/lixu/.appium/node_modules/appium-uiautomator2-driver
[AndroidUiautomator2Driver@e8c7] Creating session with W3C capabilities: {....}
#  检查ADB 环境,以及使用ADB的过程
[ADB] Found 1 'build-tools' folders under '/Users/lixu/Library/Android/sdk' (newest first):
[ADB] Using 'adb' from '/Users/lixu/Library/Android/sdk/platform-tools/adb'
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 start-server'
# Appium 相关依赖的apk - io.appium.settings
[AndroidDriver] Pushing settings apk to device...
[ADB] Getting package info for 'io.appium.settings'
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 shell dumpsys package io.appium.settings'
# 端口映射,从本地端口的 8200 转发到 移动端的6790端口
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Forwarding UiAutomator2 Server port 6790 to local port 8200
[ADB] Forwarding system: 8200 to device: 6790
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 forward tcp:8200 tcp:6790'
# Appium 相关依赖的apk appium-uiautomator2-server-v5.12.16.apk 以及 appium-uiautomator2-server-debug-androidTest.apk
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Server packages status: [{"wasSigned":true,"installState":"sameVersionInstalled","appPath":"/Users/lixu/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v5.12.16.apk","appId":"io.appium.uiautomator2.server"},{"wasSigned":true,"installState":"sameVersionInstalled","appPath":"/Users/lixu/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk","appId":"io.appium.uiautomator2.server.test"}]
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Server packages are not going to be (re)installed
# --列出含有单元测试 case 的应用
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 shell pm list instrumentation'
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Instrumentation target 'io.appium.uiautomator2.server.test/androidx.test.runner.AndroidJUnitRunner' is available
# 启动 UIAutomator2 server
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 shell am force-stop io.appium.uiautomator2.server.test'
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Starting UIAutomator2 server 5.12.16
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Using UIAutomator2 server from '/Users/lixu/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v5.12.16.apk' and test from '/Users/lixu/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk'
# 初始化
[AndroidUiautomator2Driver@e8c7 (beaa697d)] The initialization of the instrumentation process took 2038ms
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Matched '/session' to command name 'createSession'
#
[AndroidUiautomator2Driver@e8c7 (beaa697d)] Proxying [POST /session] to [POST http://127.0.0.1:8200/session] with body:
# 使用ADB启动
[ADB] Running '/Users/lixu/Library/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 shell am start -W -n com.tencent.wework/.launch.LaunchSplashActivity -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000'

使用其他工具分析过程

除了日志可以看到整个过程之外,还可以通过 WireShark 对中间的通信进行抓包。可以清楚的看到整个流程。


点击 WireShark 官方下载,了解 WireShark 工具详情与使用,请点击 参考 WireShark 文档


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一禅(OneZen)

你的鼓励将是我创作的最大动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值