appium介绍

news2024/11/15 15:42:30

移动自动化测试工具appium。appium目前在移动UI自动化测试领域占有重要地位,不仅支持Android和IOS两大平台,还支持多种编程,因而得到广泛的应用。

移动应用类型

移动应用类型主要分为以下几类

  • Native App:原生应用。
  • Mobile Web App:移动Web应用。
  • Hybrid App:混合应用。

    图12-1 移动应用类型

    移动应用类型
  1. Native App
    Native App(原生应用)是为特定移动设备或平台开发的应用程序(如Android、iOS或Windows)。例如,iPhone应用程序是用Swift写的,Android应用程序是用Java写的。原生应用的可靠性极高,因为它们使用的是底层系统的架构和设备的内置功能。
  2. Mobile Web App
    Mobile Web App(移动应用)是通过移动浏览器访问的应用程序,可以通过内置浏览器轻松访问。例如,iOS上的Safari,Android上的Chrome。它们主要使用HTML5、JavaScript等技术开发,可以提供定制功能。Mobile Web App基本来自服务器,并且不能在设备的任何地方离线存储。
  3. Hybrid App
    Hybrid App(混合应用)主要使用网络技术(HTML5、CSS和JavaScript)开发,但嵌入在App中运行,从而感觉它像是原生应用程序。
    对于拥有网页的公司来说,混合应用最受青睐。这些公司通常将混合应用作为封装来构建网页。PhoneGap和Sencha Touch等工具可以为用户构建一个混合应用,混合应用可以通过各自的应用程序商店下载。

appium支持以上三种类型应用(Native App、Mobile Web App和Hybrid App)的自动化测试。

appium的架构

appium基于客户端/服务器架构。服务器执行给定顺序的动作:
(1)从客户端接收连接并启动会话。
(2)侦听发出的命令。
(3)执行这些命令。
(4)返回命令执行状态。

 

图12-2 appium工作方式appium工作方式

  1. XCUITest
    XCUITest是苹果公司于iOS9.3版本推出的自动化框架,从iOS 10开始,它是唯一的自动化框架。
    appium1.6.0使用苹果公司的XCUTest框架,它支持iOS IO/Xcode 8。appium内部使用Facebook公司的WebDriverAgent项目支持XCUTest。
    Facebook公司的WebDriverAgent项目是一个为iOS实现的WebDriver服务,用于对连接的设备或模拟器进行远程控制。通过它可以启动应用程序、执行命令(如点击、滚动)、或终止应用程序。对于较旧的iOS版本(9.3以下版本),appium使用Apple的UIAutomation库,典型用法是在所需功能中传递以下内容:
    automationName:XCUTest
    UIAutomation库与移动设备或模拟器内运行的bootstrap.js进行通信,执行由appium客户端收到的命令。

 

  1. 图12-3 iOS平台工作方式iOS平台工作方式

  2. UIAutomator2
    UIAutomator2是基于Android的自动化框架,允许用户构建和运行UI测试。appium使用Google公司的UIAutomator2在真实设备或模拟器上执行命令。UIAutomator2是Google公司针对App设计的UI自动化测试框架。典型的用法是在所需的功能中传递以下内容:
    automationName:uiautomator2
    在appium1.6版本中,appium为UIAutomator2提供支持。appium使用appium-android-bootstrap模块与UIAutomator2进行交互。它允许将命令发送到设备,使用Android的UIAutomator2测试框架在真实设备上执行命令。
    当appium客户端请求创建新的AndroidDriver会话时,appium客户端会将所需的功能传递给appium节点服务器。首先,UIAutomator2驱动程序模块创建会话。然后,在连接的Android设备上安装UIAutomator2服务器apk。接着启动Netty服务器。在Netty服务启动后,UIAutomator2服务器在设备上侦听请求并做出响应。
     

    图12-4 Android平台工作方式

    Android平台工作方式
    注意:以上关于appium工作方式的介绍摘自appium essentials一书。

appium的工作过程

图12-5 appium的工作过程

appium的工作过程

  1. appium Client
    appium Client支持多种语言/框架,它针对主流的编程语言分别开发了相应的appium测试库,我们可以选择自己熟悉的语言或框架来编写appium测试脚本。appium Client支持的语言/框架如表所示。
语言/框架Github项目地址
ruby
Python
Java
JavaScript(Node.js)
Objective C
PHP
C#(.NET)
Robot Framework
  1. appium Server
    appium需要在PC上启动一个Server,监听客户端自动化测试的运行,并将请求发送到对应的移动设备或模拟器中运行。
    appium Server支持macOS和Windows两大平台。我们可以在不同的平台编写并运行appium自动化测试。需要特别说明的是,appium Server项目已经停止更新,由appium Desktop替代。

  2. 移动设备
    移动设备用于运行appium自动化测试的环境,既可以是一台连接到PC的手机,也可以是在PC上运行的iOS模拟器或Android模拟器。

 总结:

感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

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

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

相关文章

Android性能优化之游戏收敛线程,减少OOM发生(epic 检测线程调用/booster减少常驻线程超时销毁)

先来了解下一个空白app的进程中线程数量: 分析迷你世界中app线程之前,先来了解下空白app ,中线程情况: 一个空白app的线程大概是27个: 一个空白的的app,包含FinalizerDaemon线程、FinalizerWatchd线程、R…

GitHub Copilot:让开发编程变得像说话一样简单

引用: 人类天生就梦想、创造、创新。但今天,我们花太多时间被繁重的工作所消耗,花在消耗我们时间、创造力和精力的任务上。为了重新连接我们工作的灵魂,我们不仅需要一种更好的方式来做同样的事情,更需要一种全新的工…

“从世界第一黑客到顶级安全咨询专家” 凯文·米特尼克去世

一、人物简介 凯文米特尼克(英语:Kevin David Mitnick,1963年8月6日—2023年7月16日),是美国计算机安全顾问,作家和黑客。他拥有“世界头号黑客”,“世界上最著名的黑客”、“地狱黑客”、“头号…

SPI通信

文章目录 SPI通信简介硬件电路移位示意图SPI时序基本单元1.起始条件2.终止条件模式1模式0模式2模式3 SPI时序 SPI通信简介 四根通信线: SCK"串行时钟线 MOSI:主机输出从机输入 MISO:主机输入从机输出 SS:从机选择 通信方式:同步,全双工…

向量数据库Milvus的四个版本

目录 MilvusLite版 单机版 分布式版 Milvus Cloud版 Milvus是一个功能强大的向量数据库管理系统,提供了多种版本,以满足不同用户的需求。以下是关于Milvus四个版本的具体介绍。 MilvusLite版 MilvusLite版是Milvus的轻量级版本,适合于小规模数据集和高性能计算场景。…

使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角

1、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图形 666666666666666*/for(int i1;i<5;i){for(int j1;j<i;j){putchar(6);}printf("\n"); } return 0; } 2、输出如下图形&#xff1a; #include<stdio.h> int main() {/*输出图…

合作客户销售数据可视化分析

以一个案例进行实际分析&#xff1a; 数据来源&#xff1a;【地区数据分析】 以此数据来制作报表。 技巧一&#xff1a;词云图 以城市名称来显示合同金额的分布&#xff0c;合同金额越大&#xff0c;则城市文字显示越大。 2 2 2 2 2 2

【MySQL数据库备份】

目录 一、概述 二、数据备份的重要性 1. 数据保护 2. 灾难恢复 3. 数据完整性 4. 合规性要求 三、造成数据丢失的原因 1. 硬件故障 2. 人为错误 3. 黑客攻击 4. 自然灾害 5. 软件故障 四、备份类型 1.物理与逻辑角度 1.1 概念 1.2 物理备份 1.2.1 冷备份 1.2…

php-golang-jsonrpc2.0 rpc-codec/jsonrpc2和tivoka/tivoka实践

golang代码&#xff1a; package main import ( "context" "net" "net/rpc" "github.com/powerman/rpc-codec/jsonrpc2" ) type App struct{} type Res struct { Code int json:"code" Msg string json:"msg&quo…

kafka集群

目录 broker ZooKeeper consumer group&#xff08;消费者组&#xff09; 分区&#xff08;Partitions&#xff09; 副本&#xff08;Replicas&#xff09; 主题&#xff08;Topic&#xff09; 偏移量&#xff08;offset&#xff09; broker 一个kafka进程就是一个broker…

C++ 名字空间namespace

在C中支持三种域&#xff1a;局部域、名字空间域和类域。 名字空间域是随标准C而引入的。它相当于一个更加灵活的文件域&#xff08;全局域&#xff09;&#xff0c;可以用花括号把文件的一部分括起来&#xff0c;并以关键字namespace开头给它起一个名字&#xff1a; namespac…

多线程与高并发(17)——多线程总结(很全)

总结并复习了一下之前写的多线程的知识&#xff0c;见下图。 不够清楚可私信或者processOn。

983. 最低票价;1911. 最大子序列交替和;894. 所有可能的真二叉树

983. 最低票价 核心思想&#xff1a;对于365天中的一天&#xff0c;如果它不在旅行的日子&#xff0c;我们在这一天可以不花钱&#xff1b;如果它在旅行的日期&#xff0c;那么要么这一天花钱&#xff0c;要么在前面花钱的时间范围内。所以想到了动态规划&#xff0c;对于dp[x…

深入篇【C++】【容器适配器】:(stack)(queue)(priority_queue)模拟实现(详细剖析底层实现原理)

深入篇【C】【容器适配器】: (stack&#xff09;&& (queue&#xff09;&& (priority_queue&#xff09;模拟实现(详细剖析底层实现原理&#xff09; Ⅰ.容器适配器Ⅱ.认识dequeⅢ.stack模拟实现Ⅳ.queue模拟实现Ⅴ.priority_queue模拟实现1.priority_queue()2.…

深度学习入门(一):神经网络基础

一、深度学习概念 1、定义 通过训练多层网络结构对位置数据进行分类或回归&#xff0c;深度学习解决特征工程问题。 2、深度学习应用 图像处理语言识别自然语言处理 在移动端不太好&#xff0c;计算量太大了&#xff0c;速度可能会慢 eg.医学应用、自动上色 3、例子 使用…

ARM将常数加载到寄存器方法之LDR伪指令

一、是什么&#xff1f; LDR Rd,const伪指令可在单个指令中构造任何32位数字常数,使用伪指令可以生成超过MOV和MVN指令 允许范围的常数. 实现原理: (1)如果可以用MOV或MVN指令构造该常数,则汇编程序会生成适当的指令 (2)如果不能用MOV或MVN指令构造该常数,则汇编程序会执行下列…

C++中一些常见的运算符重载代码模板

可重载和不可重载的运算符 C中可重载的运算符如下&#xff1a; 而不可重载的运算符如下&#xff1a; 运算符重载的代码模板 下面是代码中形参的统一解释&#xff1a; lhs: 左操作数&#xff0c;通常为运算符左侧的对象或值。 rhs: 右操作数&#xff0c;通常为运算符右侧的对象…

性能测试、负载测试、压力测试-之间的差异

性能测试、负载测试、压力测试-之间的差异 目录 1、什么是性能测试2、什么是负载测试3、什么是压力测试4、性能测试 vs 负载测试 vs 压力测试5、为什么要进行性能测试6、为什么要进行负载测试7、为什么要进行压力测试8、什么时候使用性能测试9、什么时候使用负载测试10、什么时…

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…

Ansible安装部署与应用

文章目录 一、ansible简介二、ansible 环境安装部署三、ansible 命令行模块3.1 command 模块3.2 shell 模块3.3 cron 模块3.4 user 模块3.5 group 模块3.6 copy 模块3.7 file 模块3.8 hostname 模块3.9 ping 模块3.10 yum 模块3.11 service/systemd 模块3.12 script 模块3.13 m…