Appium工具自动化测试
前言
appium是一款移动自动化测试工具,经常被用于实现UI自动化测试,其可支持安卓和IOS两大平台,还支持多种编程,因而得到了广泛的应用。此处便是立足于安卓平台,借助appium工具,使用python语言实现简单的自动化测试。
一、appium支持三种类型的应用
Native App:原生应用(特定移动设备或平台开发的应用程序)
Mobile Web App:移动Web应用(通过移动浏览器访问的应用程序,如IOS的Safari,Android的Chrome)
Hybrid App:混合应用(主要指使用网络技术开发,嵌入到App中运行的应用)
二、设计原理
appium的核心是一个C/S架构,appium相当于一个web服务器,提供一套接口,它会接收客户端的命令,然后在移动设备上运行命令,最后通过HTTP响应包把结果返回给客户端,每个客户端连接上服务器后都会创建一个session,自动化都会围绕一个session进行。即appium在PC上启动一个Server,监听来自客户端的自动化测试的运行,并将请求发送到对应的的移动设备中运行。
三、Appium的实际应用
三、搭建测试环境
1.安装JDK
(1)JDK包下载网址如下:https://www.oracle.com/java/technologies/downloads/#jdk19-windows,由于原网址下载过慢,也可考虑使用开源软件镜像站下载
(2)下载版本:目前有19、17、11、8等版本的,选合适的就行,这边下载的是1.8.0_282版本
(3)安装:网上教程一堆,安装JDK和配置好环境变量便可
(4)安装完成后使用 win+R 唤出window终端输入 java -version 查看是否安装成功
C:\Users\24637>java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
Eclipse OpenJ9 VM (build openj9-0.24.0, JRE 1.8.0 Windows 8.1 amd64-64-Bit 20210120_560 (JIT enabled, AOT enabled)
OpenJ9 - 345e1b09e
OMR - 741e94ea8
JCL - ab07c6a8fd based on jdk8u282-b08)
2.安装Android SDK
安装Android SDK有两种方法,一种是直接下载安装SDK包,一种是通过Android Studio安装SDK。
1、下载SDK包后解压到你设定的路径,配置好环境变量,SDK包下载网址如下:https://developer.android.google.cn/studio/releases/platform-tools,同样可考虑使用开源软件镜像站下载
2、通过Android Studio安装SDK,选好路径,配置好环境变量,然后启动Android Studio安装对应的sdk包—目前官网推荐的是下载包含有Android SDK的Android Studio。
详细教程上网搜索便可,最终目的是可以正常使用安卓的adb功能,安装完成后使用 win+R 唤出window终端输入 adb --version查看是否安装成功。
C:\Users\24637>adb --version
Android Debug Bridge version 1.0.41
Version 33.0.3-8952118
Installed as E:\android-sdk_r24.4.1-windows\android-sdk-windows\platform-tools\adb.exe
3.安装对应的Python Client
appium Client支持多种编程语言,由于此处使用的是python语言,所以这里选择使用Python-Client,可通过以下两种方法安装对应的测试库。
1、win+R 唤出 window 终端输入:pip install Appium-Python-Client
window 终端输入 pip list 可查看是否安装了对应的包:
C:\Users\24637>pip list
WARNING: Ignoring invalid distribution -ip (e:\python_3.10.2_64_bit\lib\site-packages)
Package Version
------------------------- ---------
adbutils 0.15.2
altgraph 0.17.3
apkutils2 1.0.0
Appium-Python-Client 2.2.0
argcomplete 1.12.3
2、pycharm软件安装则是直接搜索安装Appium-Python-Client即可,打开设置菜单 > 项目 > python解释器 > 添加 > 搜索Appium-Python-Client 选中后点击安装即可,安装成功后可以在python解释器里看到对应的包。
4.安装appium-desktop(服务器)
appium-desktop主要是作为服务器,来监听我们的移动设备,接收Client(客户端)发来的JSON请求,解析后驱动移动设备运行测试用例,我们可以根据自己的平台下载相应的版本。
1、appium-desktop下载网站为: https://github.com/appium/appium-desktop/releases/tag/v1.22.3-4,此处下载的是window版本的appium(Appium-Server-GUI-windows-1.22.3-4.exe)
2、下载完成后直接双击打开安装,安装成功后会在桌面生成一个appium的图标,启动后界面如下图所示,默认显示监听的Host和Port为0.0.0.0:4723,单击启动 “服务器 v1.22.3” 按钮,启动Server,监听本机的4723端口。
5.Appium Inspector
随着appium-desktop的发展,appium-desktop的服务和查看元素的功能已经分开了,最新版本的appium-desktop目前只作为服务器,而原来的查看元素的功能被剥离了出来,查看元素信息就需要下载Appium Inspector。Appium Inspector下载网站为:https://github.com/appium/appium-inspector/releases,此处下载的版本是:Appium-Inspector-windows-2022.11.1.exe,目前已有最新的版本,也可以直接下载最新的版本便可。下载完后直接安装,启动后界面如下图所示。
6.安装安卓模拟器
安卓模拟器,顾名思义就是用来模拟安卓设备,从而实现对安卓设备的模拟操作和调试,常用的安卓模拟器有:Android Studio emulator(官方)、genymotion、mumu、雷电、夜神、逍遥等,此处实验使用的模拟器为MuMu模拟器。进入MuMu模拟器官网直接下载便可,下载网站为:https://mumu.163.com/,下载完成后直接打开使用便可,其界面如下。
四、Appium的基础
**此章节主要是介绍Appium的一些基础,也可以先选择从第五章节看起,先实现Appium的简单例子
1.Desired Capabilities
Desired Capabilities是由客户端生成的一个字典对象,在appium中主要扮演着告诉服务器App(被测App)运行的环境。
import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# 定义Android运行环境
desired_caps = {
"deviceName": "Android Emulator", # 启动的设备
"automationName": "Appium", # 使用的自动化引擎,如appium(默认)或Selendroid
"platformName": "Android", # 使用的移动平台,如Android或IOs
"platformVersion": "6.0.1", # 指定的平台的系统版本,这里为安卓平台,版本7.0
"appPackage": "com.android.settings", # 被测试App的Package名
"appActivity": ".Settings", # 被测试App的Activity名
"unicodeKeyboard": True, # 设置中文键盘
"resetKeyboard": True, # 重置自动化时设置的键盘
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 1、使用ID定位(点击搜索)
driver.find_element(AppiumBy.ID, "com.android.settings:id/search").click()
如上代码所示,Desired Capabilities字典里面设置好了待测软件所需要的相关参数,每个字典元素都有其固定的作用,上面只是最为常用的一些参数,想了解更多的配置参数说明,可以参考官方文档:
http://appium.io/docs/en/writing-running-appium/caps/
2.控件定位
(1)使用ID定位
ID定位是使用控件的resource-id进行定位,通过Appium Inspector工具可以查看resource-id,如上图所示,resource-id的使用用到driver.find_element()函数,安装和导入好对应的库便可使用,且要注意区分AppiumBy模块和By模块,By模块一般用于web的测试,所以此若是用By模块,会导致一些定位方法无法被识别到,所以这里就乖乖使
用AppiumBy就好,方法如下:
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# from selenium.webdriver.common.by import By
desired_caps = {
...
...
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 1、使用ID定位(点击搜索)
driver.find_element(AppiumBy.ID, "com.android.settings:id/search").click()
time.sleep(1)
(2)使用Class Name定位
通过控件的class属性进行定位,可以通过Appium Inspector工具查看到控件的class属性(如上图所示),若遇到多个元素的class属性都是一个名称,我们可以使用driver.find_elements()函数,先定位一组控件,再进一步筛选,从而找到想要操作的控件,下面是使用class定位一个控件的写法:
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# from selenium.webdriver.common.by import By
desired_caps = {
...
...
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 2、使用Class Name定位(点击退出搜索)
driver.find_element(AppiumBy.CLASS_NAME, "android.widget.ImageButton").click()
time.sleep(1)
(3)使用XPath定位
XPath是通过查找层级签名来定位控件,可以通过Appium Inspector工具查看到控件的XPath属性(如上图所示),XPath在appium上的用法很强大,就是太长了点,可通过实际应用场景进行使用,使用方法如下:
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# from selenium.webdriver.common.by import By
desired_caps = {
...
...
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 3、使用XPath定位(点击显示)
driver.find_element(AppiumBy.XPATH, "/hierarchy/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout").click()
time.sleep(1