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

devtools/2024/10/9 8:12:24/

Python+Appium+Pytest 自动化测试教程

  • 解刨 Appium 工作原理与分析
    • Appium 应用价值
    • Appium 工作原理
    • 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 文档



http://www.ppmy.cn/devtools/91385.html

相关文章

大数据面试SQL(六):共同使用ip用户检测问题

文章目录 共同使用ip用户检测问题 一、题目 二、分析 三、SQL实战 四、样例数据参考 共同使用ip用户检测问题 一、题目 现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对。 样例数据: 结果数据&…

Stable Diffusion WebUI 1.10.0来了

大家好,我是每天分享AI应用的萤火君! 前几天 AUTOMATIC1111 发布了Stable Diffusion WebUI 1.10,我也在第一时间将云环境的镜像升级到了最新版本,有兴趣的同学可以去体验下,目前已经发布到了AutoDL,镜像地…

【数据集】Yolo人体关键点数据集处理

文章目录 1、介绍2、数据集格式3 、COCO人体关键点示意图4、数据集预处理4.1、读取JSON文件4.2、可视化4.3、JSON格式转Yolo格式4.4、划分数据集4.5、验证 5、完整代码6、数据集下载链接 1、介绍 人体关键点检测(Human Keypoints Detection)又称为人体姿…

使用 Gunicorn 部署 Flask 项目

使用 Gunicorn 部署 Flask 项目 1. 简介 Flask 自带的 web 服务器仅适用于开发环境,无法满足生产环境的性能需求。在使用 app.run(host0.0.0.0, port5000) 启动时,Flask 会发出警告:WARNING: This is a development server. Do not use it …

c++----初识模板

大家好,这篇博客想与大家分享一些我们c中比较好用的知识点。模板。首先咧,我们都知道模板嘛,就是以前人的经验总结出来的知识。方便我们使用。这里的模板也是一样的。当我们学习过后,对于一些在c中的自定义函数,我们在…

sql 中的group by 与 聚合函数

聚合函数 MAX( )函数取指定字段的最大值; MIN( )函数取指定字段的最小值; SUM( ) 函数对指定字段的值进行求和; COUNT( ) 函数计算某个分组内数据的条数; AVG( ) 函数指定字段的值求平均数。 举例: …

探索人工智能大模型在工业领域的应用与发展

探索人工智能大模型在工业领域的应用与发展 前言测评总结 前言 人工智能大模型在工业领域的应用正逐渐展现出其巨大的潜力。大模型能够在工业知识问答、工程建模、数据分析、文档生成和代码理解等多个场景中发挥重要作用。 例如,在工业知识问答方面,大…

React管理系统整合Cesium避坑指南

花费了一周时间将React 升级到了最新版本18,同时整合Cesium三维模块到系统中,其中遇到了react 版本升级后模块删改,按照原来的引入方式无法使用的问题,以及Cesium 放入子路由一直404等问题 文章目录 一、系统版本依赖二、系统预览…