浅谈自动化测试工具 Appium

news2024/11/26 22:31:36

目录

前言:

一、简单介绍

(一)测试对象

(二)支持平台及语言

(三)工作原理

(四)安装工具

二、环境搭建

(一)安装 Android SDK

(二)安装 appium Server

(三)安装 python-client

三、应用及操作

(一)调用 appium 过程

(二)第一步,配置手机设备参数

(三)第二步,抓取手机上应用的控件

(四)第三步,操作控件

四、总结


前言:

Appium的主要特点之一是它是一个跨平台的工具,可以在不同的操作系统上运行。这意味着您可以使用同一套测试脚本在不同的移动平台上运行测试,从而节省了时间和资源。

一、简单介绍

(一)测试对象

appium 是一个自动化测试开源工具,支持 iOS 和 Android 平台上的原生应用,web 应用和混合应用。
● 移动原生应用:单纯用 ios 或者 android 开发语言编写的、针对具体某类移动设备、可直接被安装到设备里的应用,一般可通过应用商店获取,比如某个游戏 app;
● 移动 web 应用:使用移动浏览器访问的应用(appium 支持 iOS 上的 Safari 和 Android 上的 Chrome),不需要下载到设备上,而是通过浏览器直接访问,比如 H5 九曲封神游戏;
● 混合应用:同时使用网页语言与程序语言开发,通过应用商店区分移动操作系统分发,用户需要安装使用的移动应用,比如手机上的淘宝客户端

(二)支持平台及语言

● appium 是跨平台的,支持 OSX,Windows 以及 Linux 系统。它允许测试人员在不同的平台(iOS,Android)使用同一套 API 来写自动化测试脚本,这样大大增加了 iOS 和 Android 测试套件间代码的复用性
● appium 支持多语言,采用 C/S 设计模式,只要满足 client 能够发送 http 请求给 server 即可

(三)工作原理

以下图片引用网址:http://www.testclass.net/appium/appium-base-summary/

如图所示,appium 主要分为三个点:client 端,server 端,及测试移动设备
● client 端:用各类语言写的测试脚本
● server 端:我们安装 appium 工具的那部分,专门用来监听并接收来自 client 端的请求,转发请求并控制移动设备执行测试,默认开启并监听 4723 接口
● 移动设备:支持三类设备,我们的最终目的:在设备上自动执行指定的操作
整个过程:
第一,在某台服务器上安装 appium 工具(server 端),开启进程(默认 4723 接口)进行监听;
第二,编写测试脚本,放置到服务器上,执行该测试脚本(相当于发送命令给 server 端)
第三,移动设备接收到 server 端发送过来的命令,执行指定的操作

(四)安装工具

● 测试语言,如 python
● appium 客户端
● appium 服务端
● 移动设备,若使用虚拟机则需进行安装

二、环境搭建

(一)安装 Android SDK

1、Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序,可以看做用于开发和运行 Android 应用的一个软件
2、提供小工具,比如 adb、aapt、uiautomatorview
3、测试设备使用安卓模拟器,这一步决不能跳过

(二)安装 appium Server

1、下载 appium 安装包
2、安装,并配置 appium 环境变量

(三)安装 python-client

1、先安装编程语言,比如 python 语言
2、安装 Appium-Client,python 的话可使用 pip 安装:pip install Appium-Python-Client

三、应用及操作

(一)调用 appium 过程

1、配置手机设备参数,告诉 server 端我想调起的是哪一台手机设备
2、抓取手机上应用的控件,指定对应的控件来进行操作
3、对抓取到的控件进行操作,比如点击、填写参数等

(二)第一步,配置手机设备参数

Appium 的 Desired Capabilities 基本配置如下:
#Android environment
import unittest
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = PATH('../../../apps/selendroid-test-app.apk')
desired_caps['appPackage'] = package
desired_caps['appActivity'] = activity

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

常见参数解释:

● deviceName:指定启动设备,比如 Android Emulator、iPhone Simulator 等
● automationName:指定自动化引擎,默认 appium
● platformName:指定移动平台,Android 或者 iOS
● platformVersion:指定平台的系统版本。例如指定 Android 系统版本为 4.2
● appActivity:待测试 app 的 Activity,注意,原生 app 的话要在 activity 前加个 “.”
● appPackage:待测试 app 的包名(package)信息

(三)第二步,抓取手机上应用的控件

通过 Android SDK 内置工具 uiautomatorviewer.bat 来查看手机应用的控件参数(该工具位于 /tools/bin/ 目录下)
1、id 定位

使用方法:
driver.find_element_by_id('com.android.contacts:id/three')

2、name 定位

使用方法:
el = self.driver.find_element_by_name('未接来电')
el = self.driver.find_elements_by_name('未接来电')

3、class name 定位

使用方法:
els = self.driver.find_element_by_class_name('android.widget.ImageButton')
els = self.driver.find_elements_by_class_name('android.widget.ImageButton')

4、Accessibility ID 定位

使用方法:
el = self.driver.find_element_by_accessibility_id('三')
el = self.driver.find_elements_by_accessibility_id('三')

5、android uiautomator 定位

使用方法:
el = self.driver.find_element_by_android_uiautomator('new UiSelector().description(星形符号")')
els = self.driver.find_elements_by_android_uiautomator('new UiSelector().clickable(false)')

(四)第三步,操作控件

1.scroll  
scroll(self, origin_el, destination_el):  
从元素origin_el滚动至元素destination_el  
举例:driver.scroll(el1, el2)  
用法:driver.scroll(el1,el2)

2.tap  
tap(self, positions, duration=None):  
模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)  
举例:driver.tap([(100, 20), (100, 60), (100, 100)], 500)  
用法:driver.tap([(x,y),(x1,y1)],500)

3. swipe
swipe(self, start_x, start_y, end_x, end_y, duration=None):  
从A点滑动至B点,滑动时间为毫秒  
举例:driver.swipe(100, 100, 100, 400)  
用法:driver.swipe(x1,y1,x2,y2,500)

4. keyevent
keyevent(self, keycode, metastate=None):  
发送按键码(安卓仅有),按键码可以上网址中找到  
用法:driver.keyevent(‘4’)

5. press_keycode
press_keycode(self, keycode, metastate=None):  
发送按键码(安卓仅有),按键码可以上网址中找到  
用法:driver.press_ keycode(‘4’)

6.text
text(self):  
返回元素的文本值  
用法:element.text

7.click
click(self):  
点击元素  
用法:element.click()

8.get_attribute
get_attribute(self, name):   
获取某元素的相关值  
用法:element.get_attribute(“name”)

9.size
size(self):  
获取元素的大小(高和宽)  
用法 driver.element.size

10. page_source
page_source(self):    
获取当前页面的源  
用法:driver.page_source

11.quit
quit(self):   
退出脚本运行并关闭每个相关的窗口连接   
举例:driver.quit()

四、总结

1、Appium 跨平台,支持 Android 和 IOS 自动化测试。
2、Appium 支持多语言,如 java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure 等等
3、支持原生应用,web 应用和混合应用
4、仅仅支持 UI 测试

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

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

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

相关文章

08 - 线性表的类型定义 - 循环双向链表

双向链表可以分为普通双向链表(前面我们已经学习过了)与循环双向链表。 循环双向链表的定义 循环双向链表就是在双向链表的基础之上,头结点的Prev指向尾结点,尾结点的Next指针则指向头结点,从而形成闭环结构。 内存中的结构 双向链表与循环双向链表的区别 双向链表 …

Vue项目中你是如何解决跨域的呢?

一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源(即指在同一个域)具有以下三个相同点 协议相同&…

微信小程序开发入门指南

微信小程序商城是一种方便快捷的电商平台,让商家能够在微信平台上展示和销售自己的商品。本文将详细介绍如何使用乔拓云平台创建自己的小程序商城。即使是对编程没有任何基础的小白用户,也可以轻松创建自己的微信小程序商城。 第一步,登录乔拓…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求,上门家政服务逐渐成为了许多家庭的首选。然而,传统的家政服务存在着信息不透明、服务质量不稳定等问题,给用户带来了困扰。为了解决这些问题,上门家政小程序应运而生。上门家政小程序…

拓数派荣获 “2023 年杭州市企业高新技术研究开发中心” 认定

近日,拓数派上榜由杭州市科学技术局公布的 “2023 年杭州市企业高新技术研究开发中心名单”,通过专业的技术研发、成果转化和高新技术产业化成绩,获得 “杭州市拓数派数据计算企业高新技术研究开发中心” 认定。 图为:“杭州市拓数…

spring boot 多模块项目非启动模块的bean无法注入(问题记录)

之前有说我搭了一个多模块项目,往微服务升级,注入的依赖在zuodou-bean模块中,入jwt拦截, Knife4j ,分页插件等等,但是启动类在system中,看网上说在启动类上加SpringBootApplication注解默认扫描范围为自己…

【HTML】:超文本标记语言的基础入门元素

目录 1️⃣前言2️⃣概述🌱什么是HTML?🌱初步认识HTML 3️⃣了解概念✨基本结构✔️元素🔋 标签💡属性 4️⃣基本内容学习标签特殊字符属性图像标签的属性超链接标签的属性 5️⃣锚点链接6️⃣表格表格标签表格标签的属…

(ceph)资源池poll管理

资源池 Pool 管理 前面的文章中我们已经完成了 Ceph 集群的部署(ceph部署: 传送门),但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解…

oracle 如何连同空表一起导出成dmp的方法

1、oracle导出dmp文件的时候,经常会出现一些空表,没有一并被导出的情况。 执行sql select alter table ||table_name|| allocate extent; from user_tables where num_rows0 or num_rows is null; 新建一个sql窗口,把查询结果的sql&#…

MySQL-DQL-案例

案例 案例1 根据需求完成员工管理的条件分页查询 具体代码 -- 案例1:按需求完成员工管理的条件分页查询 - 根据输入条件,查询第一页数据,每页展示10条记录 -- 输入条件: -- 姓名:张 -- 性别:男 -- 入职时间…

深入解析5G承载网:驱动下一代通信技术的支柱

移动通信技术的不断演进,使得5G承载网成为驱动下一代通信技术发展的关键组成部分。在这个数字化时代,了解5G承载网的作用和特点对于理解现代通信网络的架构至关重要。 1.5G承载网的组成和功能 5G承载网由核心网和边缘计算组成。 其中,核心网…

Python实现HBA混合蝙蝠智能算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法…

一款好用的被动式信息泄漏检测插件

插件介绍 FindSomething由陌陌安全残笑老哥开发的浏览器扩展,是一款优秀的被动式信息收集工具,用于展示浏览器打开的页面相关的网站资产和敏感信息。 关注【Hack分享吧】公众号,回复关键字【230629】获取下载链接 支持收集的信息类型如下&am…

瑞吉外卖总结

瑞吉外卖总结笔记 环境 SpringBoot、Mybatis-Plus 注意:使用Mybatis-Plus时,属性值要与数据库中的列名一致 静态映射 当将使用SpringBoot整合前端html项目时,需要使用静态资源的映射,否则会出现html页面部分效果无法展示 解…

F#奇妙游(15):优雅的WPF程序

WPF but F# 上一篇,写了一个F#的WPF,所有的东西都是随手写出来的,没有经过详细考虑和设计。就是吧,一点也不优雅……咋们虽然头发不多,但是优雅永不过时! 实际上能用的开源UI库(F#&#xff0c…

【NLP】多头注意力概念(02)

接上文: 【NLP】多头注意力概念(01) 五、计算注意力 将 Q、K 和 V 拆分为它们的头部后,现在可以计算 Q 和 K 的缩放点积。上面的等式表明,第一步是执行张量乘法。但是,必须先转置 K。 展望未来,每个张量的seq_length形状将通过其各自的张量来识别,以确保清晰…

2023年知识库软件爆火的有哪些?

2023年知识库软件爆火的可能性有很多,以下是一些可能的候选者: 一、Baklib:Baklib是一款新兴的知识库软件,它提供了强大的知识管理和组织功能。它能够帮助用户收集、整理和共享知识,并提供智能搜索和推荐引擎&#xf…

DP1042 国产代替TJA1042 CAN总线收发器接口芯片

5V 供电,IO 口兼容 3.3V,70V 总线耐压,待机模式 CAN FD 总线收发器DP1042是一款应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,支持 5Mbps CAN FD 灵活数据速率&#xf…

使用stata做meta系列三|Meta命令安装

上期小统带大家学习了Meta分析纳排标准确定,这期小统和大家一起学习一下Meta命令安装。 Meta命令安装 Stata安装meta命令包: http://3g.dxy.cn/bbs/topic/34967648 命令: help pr0012 点击 pr0012…… 点击 click here to install 将pro…

Gateway网关简介及使用

一、 什么是 API 网关(API Gateway)🍉 1.分布式服务架构、微服务架构与 API 网关🥝 在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个…