Appium学习日记(一)——Appium工作原理及其主要组件

article/2025/9/23 8:48:07

Appium工作原理及其主要组件

Appium的工作原理(how Appium works)

  Appium的核心是一个服务器,它侦听符合API规范WebDriver的传入HTTP请求。对于那些过去使用Selenium为基于浏览器的应用程序进行测试自动化的人来说,这听起来可能已经很熟悉了。
  WebDriver是一个W3C规范,Appium团队为该协议添加了一些扩展,使其不仅适用于web浏览器,也适用于您想要在任何设备上测试的任何应用程序。服务器公开的API在node.js web服务器中运行。此node.js web服务器可以在运行测试之前在本地计算机上启动,也可以作为运行测试的一部分托管Appium服务器。
  要与服务器对话,我们需要一个理解WebDriver协议的客户端库,并将其转换为我们可以轻松使用的客户端库。当然,您可以针对您可能拥有的任何HTTP库编写通用HTTPGET请求,但Appium项目为您最喜欢的编程语言和工具提供了多个客户端库。例如,有Ruby、Python、Java、C#、JavaScript等客户端库。您也可以在自己喜欢的测试框架中编写测试。例如,这可以是针对Java开发人员的JUnit、针对C#开发人员的NUnit、xUnit或MSTest,或者针对JavaScript开发人员的Jasmine。因此,您编写的测试可以使用您喜欢的任何编程语言。
在这里插入图片描述

  这将使用Appium客户端库,并与Appium服务器进行通信。但是,Appium服务器如何将您编写的命令(例如,JavaScript)转换为启动应用程序,然后找到按钮并单击它以实现特定平台的自动化?为此,Appium服务器有几个驱动程序可以安装。有很多平台的驱动程序,例如,iOS、Android、Windows和Mac。安装驱动程序需要一些特定的设置。最后,根据要测试的平台,您需要有物理设备或设备模拟器或设备模拟器。Appium为您提供了一组一致的API,当您针对设备、模拟器或与同一平台匹配的模拟器编写测试时,您可以根据这些API进行编程。

Appium的概念

客户端/服务器架构(Client / Server Architecture)

  Appium 的核心一个是暴露 REST API 的 WEB 服务器。它接受来自客户端的连接,监听命令并在移动设备上执行,答复 HTTP 响应来描述执行结果。实际上客户端 / 服务器架构给予了我们许多可能性:我们可以使用任何有 http 客户端 API 的语言编写我们的测试代码,不过选一个 Appium 客户端程序库 用起来更为容易。我们可以把服务器放在另一台机器上,而不是执行测试的机器。我们可以编写测试代码,并依靠类似 Sauce Labs 的云服务接收和解释命令。
  appium的核心其实是一个暴露了一系列REST API的server。
  这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。
在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。
  这样的设计思想带来了一些好处:

  1. 可以带来多语言的支持;
  2. 可以把server放在任意机器上,哪怕是云服务器都可以;

会话(Session)

  session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。一般来说,通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。
  开启session后,会返回一个全局唯一的session id,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。
  进一步思考一下,由于session id是全局唯一,那么在同一台机器上启动多个session就变成了可能,这也就是selenium gird所依赖的具体理论根据。
  自动化始终在一个会话的上下文中执行,这些客户端程序库以各自的方式发起与服务器的会话,但最终都会发给服务器一个 POST /session 请求,请求中包含一个被称作「预期能力(Desired Capabilities)」的 JSON 对象。这时服务器就会开启这个自动化会话,并返回一个用于发送后续命令的会话 ID。

预期能力(Desired Capabilities)

  预期能力(Desired Capabilities)是一些发送给 Appium 服务器的键值对集合(比如 map 或 hash),它告诉服务器我们想要启动什么类型的自动化会话。也有许多能力(Capabilities)可以修改服务器在自动化过程中行为。例如,我们可以将 platformName 能力设置为 iOS,以告诉 Appium 我们想要 iOS 会话,而不是 Android 或者 Windows 会话。或者我们也可以设置 safariAllowPopups 能力为 true ,确保我们在 Safari 自动化会话期间可以使用 JavaScript 打开新窗口。

Appium服务器(Appium Server)

  Appium 是一个用 Node.js 写的服务器。可以从源码构建安装或者从 NPM 直接安装:

$ npm install -g appium
$ appium

  Appium 的 beta 版本可以通过 NPM 使用npm install -g appium@beta 指令进行安装。它是开发版本,所以可能存在破坏性的变更。在安装新版本请卸载 appium@beta (npm uninstall -g appium@beta)以获得一组干净的依赖。

Appium客户端(Appium Clients)

  有一些客户端程序库(分别在 Java、Ruby、Python、PHP、JavaScript 和 C# 中实现),它们支持 Appium 对 WebDriver 协议的扩展。你需要用这些客户端程序库代替常规的 WebDriver 客户端。

Appium Desktop

  这有一个 Appium 服务器的图形界面封装可以下载,它适用于任何平台。它打包了 Appium 服务器运行需要的所有东西,所以你不需要为 Node 而烦恼。它们还提供一个 Inspector 使你可以查看应用程序的层级结构。这在写测试时可以派上用场。

每个平台的驱动程序(Drive per Platform)

  当我们在Windows上运行测试时,我们可以测试各种应用程序,这些应用程序可以是Win32、WinForms、WPF或UWP。在您的测试中,我们需要在启动测试时在启动选项中指定这一点,以指示要测试的应用程序类型。我们称之为Appium选项。Appium选项包含有关应用程序在本地文件系统上的位置的信息。我们可以使用设备或仿真器上安装的应用程序的路径,然后驱动程序就会知道如何驱动应用程序。
在这里插入图片描述

  驱动程序需要安装在运行测试的计算机上。Windows驱动程序称为WinAppDriver。Windows Appium驱动程序还有一个特殊的选项,就是可以作为Appium服务器本身。接下来,让我们看看Android平台。对于Android,我们还可以针对Android设备或模拟器进行测试。Appium目前有两种类型的Android驱动程序。第一个也是最老的驱动程序是UiAutomator驱动程序。这个驱动程序仍然有效,但将来会被弃用。所有新的开发都是在新的驱动程序上完成的,该驱动程序被方便地称为UiAutomator2。UiAutotator2驱动程序是Android SDK安装的一部分,您主要需要安装Java和Android SDK来启动和运行。

  在Android上,您还可以使用名为Espresso的测试框架测试UI。也可以选择使用Espresso驱动程序。通过在测试启动时指定Appium选项,然后定义要使用的驱动程序,可以很容易地在驱动程序之间切换。Android的驱动程序都使用Android SDK附带的一个工具,称为Android调试桥(Android Debug Bridge),也就是ADB。ADB负责在Appium所需的设备上安装一些实用程序,如果您开始测试时设备不在,ADB会在设备上安装您的应用程序。您甚至可以让驱动程序为您启动仿真器,因此它非常容易在CI/CD管道中使用。因此,您的测试可以是构建或部署自动化的一部分。在iOS上,我们还可以针对模拟器和真实设备进行测试。在这种情况下,Appium服务器需要在Mac上运行。原因是iOS开发需要Xcode,而Xcode仅在Mac上可用。这意味着我们需要在Mac主机上安装Appium服务器,在那里我们还需要安装Xcode。我们使用的驱动程序称为XCUITest驱动程序,它使用了一个将在被测设备上运行的所谓web驱动程序代理。这个web驱动程序代理与Facebook团队一起构建,它代理对Appium服务器和正在测试的设备或模拟器的调用。

启动应用程序(Start Your Application)

  在运行测试之前,我们需要运行Appium服务器。您可以启动服务器,然后假定服务器正在运行,或者在测试代码中启动服务器。这只是你团队的偏好问题。这还取决于您是将测试作为CI/CD基础设施的一部分运行,还是作为验证本地开发人员或测试人员编写的测试用例的一部分。接下来,您需要向具有所需功能的Appium服务器发送请求。您可以向服务器发送您要测试的设备类型以及作为测试运行的一部分要运行的应用程序的信息。当您发送具有所需功能的请求时,Appium服务器将处理其余的功能。它将解析请求的功能,并根据找到的信息,找到适合平台的驱动程序。然后,它会找到需要连接的设备,并负责启动应用程序并在设备上安装运行测试所需的应用程序。对Appium服务器的调用在启动它的端点上完成。您发送一个HTTP请求,并将其作为作为HTTP请求主体一部分的JSON字符串传入所需的功能。Appium服务器将使用包含其在服务器上创建的会话标识的会话的响应来响应此请求。对于对Appium服务器的每个后续调用,您始终需要提供会话标识符。这样,服务器可以在同一服务器上同时服务多个测试会话。


http://chatgpt.dhexx.cn/article/VM4QapIZ.shtml

相关文章

Appium详解

一、Appium安装 1、安装JDK(1.8.0)并配置环境 1、JDK文件下载安装下载JDK文件,点击运行安装2、配置环境(1)新建一个名为“JAVA_HOME”的环境变量,变量值为JDK的安装路径(2)选择Path…

appium工作原理详讲

appium简介 appium是一个移动端自动化框架,它采用C/S的设计模式,支持多类开发语言(java python js c#…)、支持多平台(ios android),支持跨平台使用(windows linux)。它适用于原生或混合移动应用; appium…

Appium自动化测试基础 — APPium基本原理

1、APPium自动化测试架构 APPium是一个C/S架构的自动化测试框架,APPium的核心其实是一个暴露了一系列REST API的server。(也就是Appium的核心是一个提供了一组REST API的Web服务器。) 这个server的功能其实很简单:监听一个端口&a…

Appium的工作原理终于搞清楚了

目录 1. Appium简介 1.1 Appium的理念 1.2 Appium 的设计 1.3 Appium 的概念 2. Appium原理架构 3. appium的工作流程 4. Appium-Uiautomator2-Server 4.1 Appium-Uiautomator2-Server简介 4.2 appium-uiautomator2-server运行原理 4.3 bootstrap vs appium-uiautoma…

APP自动化测试系列之Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

Appium工作原理

一、Appium工作原理 1、Appium启动的时候,会创建一个http\\127.0.0.1:4723\wd\hub服务端(中转站) 2、4723端口接收client(也就是测试脚本)发来的请求,解析对应的请求 3、appium server把对应的请求发给bootstrap.jar,它…

蓝桥杯C/C++ 基础练习 十六进制转八进制 C语言

题目: 分析: 思路:先将十六进制转为二进制,然后将二进制转为八进制 遇到的问题如下: 1、输入格式和输出格式,决定了需要用数组存储十六进制数、二进制数以及八进制数。由于有多个字符串(多位…

蓝桥杯——十六进制转八进制(Java解法)

这道题其实挺难的,之前做过一次,用的十六进制转化为十进制,然后用十进制再转化为八进制,代码很简单,用的jdk上自带的进制转换进行换算。 import java.util.Scanner; /** * author 作者 E-mail: WYJ 1627407425qq.com…

蓝桥杯-十六进制转八进制(Java)

蓝桥杯-十六进制转八进制(Java) 最近在练习算法题,打算应付一下下学期的蓝桥杯,写写博客记录一下我的学习过程,对算法感兴趣的朋友可以给小编点点关注(重要的事情加上强调标志,o( ̄︶ ̄)o),这个假…

蓝桥杯C语言 十六进制转八进制

十六进制转八进制 思路分析: 39十六进制先转换为4位二进制,3为0011,9为1001,所以39的二进制为00111001,又把二进制转化为3位八进制,从右边开始数,001为1,111为7,所以39的八进制为71。…

十六进制转换八进制

问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。   接下来n行&#xff0c;每行一个由09、大写字母AF组成的字符串&#xff0c;表示要转换的十六进制正整数&#xff0…

蓝桥杯练习:C语言十六进制转八进制

这题对我来说是有点难度的,最后做出来,但是提交显示 运行错误,看不出哪里出错了. 我的思路: 将十六进制转化为二进制,二进制最后转化为八进制. 首先将十六进制存入数组,然后将数组中每一位转化为对应的十进制数,之后将再将每一位十进制数转化为二进制数,将这些二进制数以每三…

C语言十六进制转八进制

思路&#xff1a;将十六进制先转为十进制再转为八进制 十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘16的0,1,2,......并相加得到相应的十进制。 比如&#xff1a;对123ABC&#xff0c;1216&#xff08;0&#xff09;1116&#xff08;1&#xff09…

XPC U盘启动盘的制作

XPC U盘启动盘的制作 对于XPC目标机的启动&#xff0c;我们可以通过网络、硬盘或者 U盘启动目标机。这里介绍一下通过U盘的气动&#xff0c;因为这个相对而言比较简单。 选择一个4G以下的U盘&#xff0c;最好为2G选择一台XP系统的电脑&#xff08;最好为工控机&#xff0c;必…

XPC调试记录 :TwinCAT生成XML配置文件

XPC调试记录&#xff1a;生成XML配置文件20210316 1.连接目标控制器 硬件准备&#xff1a;用一根网线将配置有EtherCAT的电脑和EK1100&#xff08;BECOHOFF总线模块&#xff09;网线插槽X2(OUT)相连。&#xff08;正常初始化配置时对应指示灯闪烁&#xff09; &#xff08;1&a…

iOS 冰与火之歌 - 利用 XPC 过 App 沙盒

蒸米是阿里巴巴的移动安全工程师&#xff0c;香港中文大学博士&#xff0c;也是发现并命名了XcodeGhost的人。这次他所在的iOS安全小组发现了影响最新版iOS 9.3的0day漏洞。此漏洞杀伤力巨大&#xff0c;在非越狱手机上一个app应用可以利用这个漏洞做到读取或者修改沙盒外其他a…

xPC信号采集和分析(1)

背景介绍 在我的上篇文章用虚拟机在一台电脑上实现xPC实时仿真&#xff0c;进行xPC实时仿真的过程中&#xff0c;需要将仿真数据进行记录以便后续分析处理。xPC目标的信号采集过程是通过实时内核来完成的。实时应用程序的信号数据存储在目标机的RAM中&#xff0c;xPC目标程序支…

建模simulink - 手把手教你搭建xpc平台

概述 xpc半实物仿真目标是个基于RTW对低端实时仿真和开发平台,可将计算机或者工控机转变为一个实时系统,不需要第三方操作系统对支持,在计算机上配置输入输入出设备就能和外部交换信息,进行硬件再换仿真和测控系统开发。 目前mathworks已经放弃来xpc target这个说法,而改用…

xPC信号采集和分析(2)

背景介绍 上一篇文章xPC信号采集和分析&#xff08;1&#xff09;里面&#xff0c;解决了自己在使用第二种方法&#xff1a;信号记录模式对xPC数据进行记录过程中的一些问题。 然而很多情况下&#xff0c;我们需要采用第三种信号跟踪模式对实时任务中的数据进行实时传输并可视…

matlab中xpcapi库的调用,关于MATLAB中xpc实时控制平台搭建的心得

Xpc target主机—目标机通讯平台的搭建 一、用u盘制作XPC的目标启动盘 U盘启动盘制作的关键是找对dos系统软件包和相应的读写软件,我也是找了很久而不得要领。开始时,我是下载了一个网上的dos系统软件包,然后用ultriso写入u盘中,然而并不成功,试了几次后,才找到合适的软件…