浅谈自动化测试工具 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.hqwc.cn/news/28729.html

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

相关文章

欧姆龙以太网模块如何设置ip连接 Kepware opc步骤

在数字化和自动化的今天,PLC在工业控制领域的作用日益重要。然而,PLC通讯口的有限资源成为了困扰工程师们的问题。为了解决这一问题,捷米特推出了JM-ETH-CP转以太网模块,让即插即用的以太网通讯成为可能,不仅有效利用了…

Unity自定义后处理——Vignette暗角

大家好,我是阿赵。   继续说一下屏幕后处理的做法,这一期讲的是Vignette暗角效果。 一、Vignette效果介绍 Vignette暗角的效果可以给画面提供一个氛围,或者模拟一些特殊的效果。 还是拿这个角色作为底图 添加了Vignette效果后&#xff0…

【完整版】zabbix企业级监控(概念、简单操作、页面优化、监控主机自己、监控linux、监控Win10)

第三阶段基础 时 间:2023年7月19日 参加人:全班人员 内 容: zabbix企业级监控 目录 一、Zabbix概述 (一)Zabbix简介 (二)Zabbix运行条件: (三)Zab…

Linux gdb汇编调试

文章目录 一、示例代码二、gdb汇编指令2.1 step/stepi2.2 next/nexti2.3 info registers2.4 set2.5 x2.6 rsp寄存器2.7 rip 寄存器 参考资料 一、示例代码 &#xff08;1&#xff09; #include <stdio.h>int add(int a, int b) {return a b; }int main() {int a 3;in…

Airbnb 引入 HTTP Streaming,网页性能得到大幅度提升

Airbnb 通过引入HTTP Streaming来提升网站的页面加载性能。他们将测试的每个页面&#xff08;包括主页&#xff09;的首次内容绘制&#xff08;First Contentful Paint&#xff0c;FCP&#xff09;时间降低了大约 100 毫秒。他们还最小化了后端慢查询对加载时间的影响。 Airbn…

​大华智慧园区综合管理平台存在任意文件上传漏洞

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 大华智慧园区综合管理平台简介 大华智慧园区综合管理…

JavaScript数组所有方法集合

##方法 1、concat 用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组 2、copyWithin 浅复制数组的一部分到同一数组中的另一个位置&#xff0c;并返回它&#xff0c;不会改变原数组的长度 3、entries 返回一个新的 Array Iterator 对象&#xf…

使用Vue + FormData + axios实现图片上传功能实战

前言 上节回顾 上一小节中,我们添加了Vue-router的路有数据,这些数据都将是后续实战课程中的真实路由数据了。同时引入了ElementUI的el-menu做为左侧菜单的组件,但本专栏的特点就是遇到第三方功能和组件,自己尽量也要实现一遍,所以,在文章末尾又自己实现了一个tg-menu的…

数据结构--线性表以及其顺序存储结构

这里写目录标题 线性表的定义和特征定义特征 案例引入稀疏多项式链表实现多项式相加小结 线性表的类型定义&#xff08;抽象数据类型&#xff09;定义格式基本操作小结 线性表的顺序表示和实现实现1顺序存储表示顺序表中元素存储位置的计算 实现2顺序表的优点问题出现结构体表示…

消息推送(websocket)集群化解决方案

目录 需求分析解决方案实现步骤架构图配置websocket请求地址配置websocket连接前置和连接关闭监听配置websocket处理程序配置redis交换机配置redis订阅监听配置redis发布监听需求分析 及时信息传递:消息推送功能能够确保网站向用户发送及时的重要信息,包括新闻更新、促销活动…

SpringCloud(六)Config配置中心

一、配置中心 官方文档&#xff1a;**https://docs.spring.io/spring-cloud-config/docs/current/reference/html/ 经过前面的学习&#xff0c;我们对于一个分布式应用的技术选型和搭建已经了解得比较多了&#xff0c;但是如果我们的微服务项目需要部署很多个实例&#xff0c…

基于node.js中的serialport模块实现无线传感网上位机功能

半个月前的无线传感网课设上位机的实现遇到了很多困难&#xff0c;特写此文章给有需要的朋友一些帮助&#xff0c;欢迎私信探讨 文章目录 前言一、node.js中的serialport模块二、express框架三、echarts实现拓扑图四、实现下行数据五、成果展示总结 前言 本文所要实现的功能以…