APP自动化测试 ---- Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。

一、Appium介绍

1.Appium概念

Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS,Android和Windows应用程序。

2.Appium特点

  • Appium是开源的移动端自动化测试框架;
  • Appium可以测试原生的、混合的、以及移动端的web项目;
  • Appium可以测试IOS,Android应用;
  • Appium是跨平台的,可以用在osx,windows以及linux桌面系统上;
  • Appium支持Ruby、Python、Java、JavaScript、Objective C、php等多种语言。

3.Appium理念

Appium 旨在满足移动端自动化需求的理念,概述为以下四个原则:

  1. 你不应该为了自动化而重新编译你的应用或以任何方式修改它。
  2. 你不应该被限制在特定的语言或框架上来编写运行测试。
  3. 移动端自动化框架不应该在自动化接口方面重造轮子。
  4. 移动端自动化框架应该开源,在精神、实践以及名义上都该如此。

4.Appium组件

  • Appium Server
    Appium是一个C/S结构,包括Server和Client。Appium Server是Appium的服务端,作为一个Web接口服务,使用Node.js实现。
  • Appium Desktop
    Appium Server的图像界面,可设置启动or停止服务器、查看日志,可使用inspect查看应用程序的元素。
  • Appium GUI
    是Appium Desktop的前身,也是把Appium Server封装成一个图像界面。该产品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的Appium版本,而是1.4.16版本。如果要使用最新的桌面版需要使用Appium Desktop。
  • Appium Client
    Appium Client作为客户端,会给服务端Appium Server端发送请求会话来执行自动化任务。类似使用浏览器访问网页,可使用不同的客户端浏览器(IE/Firefox/Chrome…)访问同一个网站,通过操作发送请求到服务器来获取数据。

二、Appium运行原理

Appium是在手机操作系统自带的测试框架基础上实现的,Android和iOS的系统上使用的工具分别如下:

  • Android(版本>4.3):UIAutomator,Android 4.3之后系统自带的UI自动化测试工具。
  • Android(版本≤4.3):Selendroid,基于Android Instrumentation框架实现的自动化测试工具。
  • iOS:UIAutomation(instruments框架里面的一个模板),iOS系统自带的UI自动化测试工具。

运行原理如下:

①客户端运行脚本的时候,调用任何的appiumAPI,都会向Appium Server端post一条HTTP请求,请求内容就是根据webdriver wire protocol协议规定的一条JSON格式的数据;

②当开启appium服务器的同时就开启了监听端口,Appium Server端接收到请求后,解析出JSON数据并发送到手机端;

③手机端上已经由BootStrap.jar(iOS为BootStrip.js)开启的socket服务器监听相应的端口,BootStrap.jar在appium每个session第一次访问手机端的时候会自动安装;

④手机端接收到对应的请求后,通过BootStrap.jar翻译成UIAutomator能执行的命令,然后通过UIAutomator处理并操作APP完成测试。

三、Appium中的几个重要概念

client:其实就是发起 command 的一端,狭义的可以理解为python、java等编写的代码。

appium server: 专门用来监听并接收来自client端的请求,转发请求并控制移动设备执行测试,默认开启并监听4723接口.。

Session:session就是一个会话,在appium中,所有工作永远都是在session start后才可以进行的。而要启动一个 session 需要传入 Desired Capabilities 获取一个全局唯一的 session id,这个id指定了你的浏览器或者移动设备。

Desired Capabilities:是一些发送给 Appium 服务器的键值对集合(比如 map 或 hash),它告诉服务器我们想要启动什么类型的自动化会话。

它告诉 appium server 这样一些事情:

  • 本次测试是启动浏览器还是启动移动设备?
  • 是启动 Andorid 还是启动 iOS ?
  • 启动 Android 时,App 的 package 是什么?
  • 启动 Android 时,App 的 Activity 是什么?

Bootstrap:首先,bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase,所以Uiautomator可以正常运行它,它也可以正常使用uiautomator的方法,这是就是appium的命令可以转换成uiautomator的关键;

其次,bootstrap是一个socket服务器,专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;

最后,bootstrap处理的是从PC端传过来的命令。

appium的架构原理如图所示,由客户端和服务端组成,客户端与服务端通过JSON进行通信。


最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目中使用svg

背景 一般html中使用svg图片是用img标签使用&#xff0c;这在项目中就相对来说非常麻烦。出现大量使用svg情况就变的比较麻烦 <img src"../assets/svgs/car.svg" />封装 将svg文件统一放一个文件夹下 src/assets/svgs 需要2步 为文件打包 安装开发依赖 …

【Linux入侵排查知识总结】

1.1.1.1 Linux入侵排查 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时&#xff0c;急需第一时间进行处理&#xff0c;使企业的网络信息系统在最短时间内恢复正常工作&#xff0c;进一步查找入侵来源&#xff0c;还原入侵事故过程&#xff0c;同时…

【sqlmap工具的使用】

.命令基础解析 sqlmap 支持五种不同的注入模式&#xff1a; 1、 基于布尔的盲注&#xff0c; 即可以根据返回页面判断条件真假的注入。 2、 基于时间的盲注&#xff0c; 即不能根据页面返回内容判断任何信息&#xff0c; 用条件语句查看 时间延迟语句是否执行&#xff08;即页面…

node 第十三天 express初见

express概念 Fast, unopinionated, minimalist web framework for Node.js 快速、独立、极简的 Node.js Web 框架。 express相当于前端的jquery, 在不更改不侵入原生node的基础上封装了大量易用且实用的服务端api, express框架的封装原理就是前面第十天我们自己封装的简易服务器…

安卓核心板_天玑700、天玑720、天玑900_5G模块规格参数

5G安卓核心板是采用新一代蜂窝移动通信技术的重要设备。它支持万物互联、生活云端化和智能交互的特性。5G技术使得各类智能硬件始终处于联网状态&#xff0c;而物联网则成为5G发展的主要动力。物联网通过传感器、无线网络和射频识别等技术&#xff0c;实现了物体之间的互联。而…

微信小程序如何利用接口返回经纬计算实际位置并且进行导航功能【下】

如果要在微信小程序内部导航的话可以使用wx.navigateToMiniProgram方法来打开腾讯地图小程序&#xff0c;并传递目的地的经纬度信息。 目录 1.如何获取高精地址 2.如何调起地图 3.实现效果 navigateToDestination: function() {let that this;var latitude parseFloa…

springboot+vue基于协同过滤算法的私人诊所管理系统的设计与实现【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

数据结构与算法之矩阵: Leetcode 48. 旋转矩阵 (Typescript版)

旋转图像 https://leetcode.cn/problems/rotate-image/ 描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1 输入&…

【Unity数据交互】JsonUtility的“爱恨情仇“

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

react中使用监听

在 React 中&#xff0c;您可以使用 addEventListener 函数来监听事件。以下是一个示例&#xff1a; import React, { useRef, useEffect } from react;function App() {const inputRef useRef(null);useEffect(() > {inputRef.current.addEventListener(input, handleInp…

宝塔面板安装Python和Flask(新版Python项目)

&#xff08;一&#xff09;宝塔面板的项目菜单&#xff0c;打开Python项目的“项目版本管理” 安装Python版本3.10.0。 会创建一个Python版本的文件夹www/server/pyproject_evn/versions/ 会创建一个Python虚拟环境的文件夹www/server/pyproject_evn/python_venv/ &#xf…

USB学习(3):USB描述符和USB类设备

文章目录 1 USB描述符(Descriptors)1.1 设备描述符(Device Descriptor)1.2 配置描述符(Configuration Descriptor)1.3 接口关联描述符(Interface Association Descriptor)1.4 接口描述符(Interface Descriptor)1.5 端点描述符(Endpoint Descriptor)1.6 字符串描述符(String Des…

极米科技H6 Pro 4K、H6 4K高亮定焦版——开启家用投影4K普及时代

智能投影产业经过几年发展&#xff0c;市场规模正在快速扩大。洛图数据显示&#xff0c;预计今年中国投影出货量有望超700万台&#xff0c;2027年达950万台&#xff0c;可见智能投影产业规模将逐渐壮大&#xff0c;未来可期。2023年&#xff0c;投影行业呈现出全新面貌&#xf…

0032【Edabit ★☆☆☆☆☆】【每秒帧数】Frames Per Second

0032【Edabit ★☆☆☆☆☆】【每秒帧数】Frames Per Second algorithms language_fundamentals math numbers Instructions Create a function that returns the number of frames shown in a given number of minutes for a certain FPS. Examples frames(1, 1) // 60 fra…

【观察】Dell APEX云平台:引领多云时代上云新范式

毫无疑问&#xff0c;过去十多年是云计算发展的黄金十年&#xff0c;云计算理念不断被市场所接受&#xff0c;但随着企业上云深入和认知度的不断增加&#xff0c;摆在很多企业面前的选择题也发生了新变化&#xff0c;即从过去企业上云或不上云的纠结&#xff0c;转变成今天如何…

全景环视AVM标定

目录 一、前言 二、鱼眼模型 三、标定流程 四、角点提取 4.1 亚像素坐标计算

文件混淆-界面介绍

目录 文件混淆-界面介绍 顶部介绍 中间文件列表区介绍 底部功能介绍 介绍文件混淆界面功能选项和操作流程 文件混淆-界面介绍 文件混淆功能区域包括3个功能区&#xff1a;顶部显示过滤区、中间文件列表区、底部的是否混淆开关 顶部介绍 显示控制区域&#xff0c;这个区…

Go 怎么操作 OSS 阿里云对象存储

1 介绍 在项目开发中&#xff0c;我们经常会使用对象存储&#xff0c;比如 Amazon 的 S3&#xff0c;腾讯云的 COS&#xff0c;阿里云的 OSS 等。本文我们以阿里云 OSS 为例&#xff0c;介绍怎么使用 Go 操作对象存储。 阿里云 OSS 提供了 REST Api 和 OSS Go SDK&#xff0…

Day38 力扣动态规划 :70.爬楼梯 |322. 零钱兑换 |279. 完全平方数

Day38 力扣动态规划 :70.爬楼梯 &#xff5c;322. 零钱兑换 &#xff5c;279. 完全平方数 70. 爬楼梯 &#xff08;进阶&#xff09;第一印象看完题解的思路实现中的困难感悟代码 322. 零钱兑换第一印象dp数组递推公式初始化遍历顺序如果凑不出来返回 -1 看完题解的思路实现中…