浅谈自动化测试工具 Appium

目录

前言:

一、简单介绍

(一)测试对象

(二)支持平台及语言

(三)工作原理

(四)安装工具

二、环境搭建

(一)安装 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'] = activityself.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.text7.click
click(self):  
点击元素  
用法:element.click()8.get_attribute
get_attribute(self, name):   
获取某元素的相关值  
用法:element.get_attribute(“name”)9.size
size(self):  
获取元素的大小(高和宽)  
用法 driver.element.size10. page_source
page_source(self):    
获取当前页面的源  
用法:driver.page_source11.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.mzph.cn/news/4624.shtml

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

相关文章

和chatgpt学架构02-环境搭建

目录 1 安装vs code2 vs code功能介绍3 安装nodejs4 安装vue5 在vs code打开工程总结 我们在上一篇 技术选型 里咨询了chatgpt前后端的框架选择和数据库的选择。有了框架之后就需要选择合适的开发工具了,继续咨询一下chatgpt 我现在选型,前端使用vue&am…

将媒体公司资产迁移到 Amazon S3 的技术方案

随着媒体公司的发展,他们在仓库中积累了大量的旧磁带和未数字化的视频。这些资产可能很有价值,但以目前的形式很难访问和货币化。此外,将这些资产存储在仓库中既有风险又昂贵。 媒体企业可以通过将其资产迁移到云存储来解决这些问题&#xf…

Lua 批量修改文件夹下文件名

local s io.popen("dir C:\\Users\\lizhiyuan\\Desktop\\国家知识产权局ftp法律状态数据\\data /b/s") local filelist s:read("*a")local start_pos 0while 1 do_,end_pos,line string.find(filelist, "([^\n\r].xml)", start_pos)if not e…

Java List中通过对象属性排序,可实现多条件排序

直接上代码: import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.Data;import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;/*** List 对象属性排序*/Data AllArgsConstructor clas…

xml.etree.ElementTree

python使用 xml.etree.ElementTree包的时候,对xml中的空标签进行了简写,想恢复成正常模式怎么弄

(学习笔记-TCP连接断开)TCP四次挥手

TCP四次挥手过程 TCP断开连接是通过四次挥手实现的,双方都可以主动断开连接,断开连接后主机中的资源将被释放,四次挥手的过程如下: 客户端打算关闭连接时,会发送一个TCP首部FIN标志位为1的报文,也就是FIN报…

基础语言模型LLaMA

LLaMA包含从7B到65B参数的基础语言模型集合。Meta在数万亿个tokens上训练了模型,LLaMA-13B在大多数基准测试中优于GPT-3(175B)。 来自:LLaMA: Open and Efficient Foundation Language Models 目录 背景概述方法预训练数据架构Op…

LangChain + Embedding + Chromdb,关联使用ChatGLM的本地搭建训练平台教程

一.介绍 OpenAI 在国内用户注册会遇到各种阻力,目前可行的方法是使用本地数据集的功能实现联网搜索并给出回答,提炼出TXT、WORD 文档里的内容。 现在主流的技术是基于强大的第三方开源库:LangChain 。 文档地址:🦜…

基于单片机的教室智能照明台灯控制系统的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前时间、年月日、时分秒、前教室人数;2路红外探头用来感应当前教室进出人数;按键可以设置当前时间、自动手动模式、开启和关闭教室灯光时间;在手动模式下,可以通过按…

uni-app:单位像素rpx

rpx:响应式单位,长宽可以随着屏幕大小改变,其尺寸根据iPhone 6的标准来参考(750rpx为占满屏幕宽,1334rpx为占满屏幕长。7501334rpx) 例子: 现在展示型号为iPhone 12 pro的型号,这里750px和750…

51单片机学习--矩阵键盘、电子密码锁

矩阵键盘的模块原理图&#xff1a; 功能&#xff1a;按下矩阵按键&#xff0c;在LCD上显示对应的数值。 采用模块化编程&#xff0c;在此只给出MatrixKey.c 和 main.c 两部分代码 #include <REGX52.H> #include "Delay.h"/*矩阵键盘读取键码按下不放&#xf…

【有功功率、无功功率】可再生能源配电馈线的鲁棒经济调度研究[IEEE13节点](Matlab代码实现)

&#x1f4a5;1 概述 "有功功率和无功功率" 是与电力系统中能量传输和功率控制相关的两个重要概念。 有功功率&#xff08;Active Power&#xff09;是指电力系统中传输和消耗能量的功率&#xff0c;也被称为实功功率。它负责提供电力系统中的实际电能需求&#xf…

DTU凭什么可以为数据提供高效可靠的稳定传输?

当谈及到智能化的发展时&#xff0c;其实它已经正在影响着各行各业&#xff0c;当前许多传统行业也正在向智能化转变。如果你细心留意的话&#xff0c;就会发现在我们日常生活中多少都会见到它们的身影&#xff0c;例如&#xff1a;村庄各家各户墙外所挂的煤改电设备、居民楼小…

【数学建模】统计分析方法

文章目录 1.回归分析2. 逻辑回归3. 聚类分析4. 判别分析5. 主成分分析6. 因子分析7. 对应分析 1.回归分析 数据量要多&#xff0c;样本总量n越大越好——>保证拟合效果更好&#xff0c;预测效果越好 一般n>40/45较好 方法 建立回归模型 yiβ0β1i……βkxkiεi 所估计的…

IDEA使用GIT提交代码中文日志(commit message)乱码

最近换了新的开发环境&#xff0c;导致提交gti中文注释乱码&#xff0c;遂记录一下解决方案 idea中查看git提交信息显示中文是正常的 gitee上显示乱码 本地显示也是乱码 一、命令修改编码格式 git 安装目录下执行 git config --global i18n.commitencoding utf-8git config …

pdf怎么翻译?有这个工具就够了

pdf怎么翻译&#xff1f;PDF文档一直是我们日常生活和工作中不可避免的一部分。但是&#xff0c;当我们需要翻译PDF文件时&#xff0c;我们往往会感到无助&#xff0c;因为PDF文档不能像其他文本文件一样直接复制和粘贴。那么今天就给大家介绍一款可以帮助我们进行PDF翻译的工具…

【技能实训】DMS数据挖掘项目-Day09

文章目录 任务9【任务9.1.1】升级DataBase类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.2】升级LogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.3】升级MatchedLogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【…

Java编程-基本排序算法

冒泡排序 图解 &#xff08;注&#xff1a;图片来源网络&#xff09; Java代码 package suanfa_Ja;import org.apache.hadoop.security.SaslOutputStream;// 基本排序算法&#xff0c;冒泡排序 时间复杂度 O(n^2) 空间复杂度O(1) public class BubbleSort {public static v…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【4】-O3 不支持 编译失败

gcc -O3 编译失败 结论&#xff1a;默认情况下SPEC CPU 2006 1.2 不支持 gcc -O3编译参数。

Linux 安装 nginx

正常是两种安装方式 一种是使用系统的包管理软件&#xff0c;比如centos的yum -y install nginx命令&#xff08;简单但不推荐&#xff0c;配置文件分散不易管理&#xff0c;且需要配置第三方源yum -y install epel-release等&#xff0c;如果是简单使用&#xff0c;配置文件什…