Bootstrap

安卓应用自动化测试工具Appium实操分享

Appium是一款开源的、跨平台的、多语言支持的移动应用自动化工具,通俗来说是手机App自动化工具。它目前可以测试的app如下三种,原生App、混合App、移动Web。Appium支持许多主流语言编写测试脚本、不需要重造轮子,应用范围非常广泛,测试效率非常高效,是一款强大的自动化测试框架。

首先我们一起看下Appium的架构图,主要有客户端、服务端、测试平台SDK、手机端自动化驱动程序这四部分。


客户端主要是用来编写脚本,还包括一些手机安装工具等。服务端是Appium的主体,Appium Server可以装在自己的本机上,也可以装在服务端。测试平台SDK是开发厂商(如Google)提供的SDK,需要在本机上去安装。


手机端自动化驱动程序,这部分下面给大家展开详细讲一下。


安卓手机端驱动介绍


Appium目前主要支持Andriod 4.2以上的系统。

UiAutomator/UiAuromator2
UiAutomator是安卓手机自带的驱动。现在很多安卓手机的系统都是定制化的,如果没有阉割的太多,还是含有UiAutomator驱动。在使用Appium时候大多数使用优化过的UiAuromator2驱动,但UiAuromator2并非适用所有系统,如果运行出现问题可以切换回UiAuromator。


驱动工作原理


Appium并不负责手机具体自动化任务。相当于是一个中间代理,通过Appium识别自动化脚本并转化成手机UiAutomator执行的指令,手机识别在执行自动化任务。

Appium环境配置

1、资源准备
首先需要准备一台安卓手机(真机演示),系统最好是6.0以上,目前可以支持到4.2。


计算机配置(Windows为例)Windows 7 以上,建议使用Windows 10内存:最小4GB,推荐8GB以上硬盘:4GB以上分辨率:1280*800以上
以上是Goolge官网推荐配置。


2、安装客户端
首先需要在电脑上安装好Python环境
安装Appium-Python-Client包命令:pip install -I https://mirrors.aliyun.com/pypi/simple/ Appium-Python-Client
自动安装最新的Appium-Python-Client 和Selenium库(报错下载不下来,可以使用清华或阿里云代理)

3、安装服务端
进入Appium官网进入下载页面,根据自己的操作系统对应版本的下载Appium.Server.GUI
目前Appium官网上几乎都是带GUI的,已经没有纯Server端了,可以同时支持mac和windows。


4、电脑端环境


这部分就稍微有些复杂了。


JAVA环境:JAVA_HOME、Path、ClassPath
Android-SDK环境:通过搜索下载Android-SDK包,还可以在谷歌下载Android studio。
有了Android-SDK还需要配置环境变量:新建ANDROID_HOME(SDK绝对路径目录,最好不要带有中文)
Path中添加:% ANDROID_HOME%\platform-tools% ANDROID_HOME%\tools
这两个工具是后面做测试的时候会用到的,加了之后,还可以使用ADB的命令。

ANDROID_HOME要在系统环境变量中新建。
另外在Path环境变量中添加:ANDROID_HOME%\ platform-tools和% ANDROID_HOME%\ tools


下面是示例截图:


5、手机端环境
1)在关于手机页面,连续点击版本号直到激活开发者模式。
2)再进入开发者模式,将USB调试打开(否则Appium无法自动执行)
3)手机通过USB连接电脑,并在手机允许电脑USB调试


6、验证adb链接
最后我们需要验证一下我们的环境变量是否安装成功。
在CMD界面输入adb devices –l ,看一下是否可以查询到已连接的手机。

若不能识别,请确保安装对应的手机USB驱动。

(查询到连接成功)


Appium使用


1、启动Appium
1)配置端口和地址2)Edit Configurations配置环境变量。3)启动服务器


启动成功界面显示The server is running。这个界面主要显示的是在运行过程中的一些日志文件。点击右上角“放大镜”进入Inspector Session界面。这个界面是用来测试App时进行界面元素获取时要用到的。下载的按钮用来获取日志文件,暂停键用来暂停该服务。

(启动成功的界面)


点击放大镜后进入进入Inspector Session,如下图所示:


需要配置被测应用相关的Desired Capabilities项目之后再启动。

下图我贴了一张腾讯会议App的,需要填下面这些选项,从第一项开始,点右侧的“+”,就会一级一级地加下去。
配置完成之后,在右侧的区域,会显示成一个json的串。



在测试之前,我们还需要获取两项非常重要的内容,appPackage和appActivity。

首先需要将app打开,在CMD界面输入命令adb shell dumpsys activity recents | findstr intent={

这两项信息查到之后,将其填到配置项里面。其他的配置项在后面讲解代码的部分给大家详细讲。
配置完成后进入元素查看界面,如下图所示,这个界面主要用于元素定位。


元素定位是使用Appium必须要掌握的一项技能,指的是将手机上的一些功能按钮定位出来,可以通过id或xpath的方法。下图展示的是“快速会议”的元素信息。


在最右侧可以看到id属性,com.tencent.wemeet.app:id/hk 这个指的是resource-id。一个app中有很多个id,我们的元素定位如果用id定位的话,用到的就是resource-id。

Appium自动化脚本

先给大家介绍一下App自动化的基本流程。

1、选中界面元素

2、界面元素操作

点击、输入、拖拽、滑动、获取界面元素属性,以上这些是Appium提供的能力

3、逻辑处理

这部分考验代码功底,与具体自动化框架无关


元素定位
元素定位语法:find_element(By.方法,'value’)

常用定位方式:1.通过ID定位2.通过NAME定位3.通过class_name定位4.通过xpath定位5.通过link_text定位6.通过css_selector定位


这里要说明的是,Appium提供了CSS定位,但是没法使用CSS。为什么没有办法用?因为我们现在大部分app都是原生+混合的,而CSS是web专用的,所以是没有办法在原生和混合的app中去做定位的。我们在原生或者混合的app里面用的最多的定位方式是id、xpath和link_text。


ID定位
语法:driver.find_element(By.ID,‘resource-id’)
BY.ID中的ID一定是大写的,逗号后面跟的字符串是我们在元素定位的过程中发现的resource-id。在定位的过程中,resource-id可能会出现多个,代码写到这,系统会默认识别第一个。
还有一个是accessibility id,这个在前面元素定位的界面中,我们也可以看到。
语法:driver.find_element(By.ACCESSIBILITY_ID,'accessibility id')


Xpath在appium中的应用
在实践的过程中,用得最多的是Xpath,这里给大家列出了几个Xpath表达式:

1.通过ID选择//*[@resource-id=“”]
2.通过class选择//android.view.ViewGroup
3.通过其他属性选择//*[@属性=“属性值”]
4.选择子元素//*[@属性=“属性值”]/*
5.选择父元素//*[@属性=“属性值”]/..


Appirum坐标操作
语法:driver.tap(x,y)
这个方法用得并不多,大家都知道,手机市场上,屏幕种类非常繁多,尺寸也都不一样,这就导致坐标受屏幕的像素所影响。如果你写的一个脚本用的是坐标的定位,给别的同事用,换了一个手机,可能就定位不到了。只有在当某个元素定位不到时,暂时解决定位问题,不建议经常使用。


bounds值
例如bounds值为 [60,231][420,710],表示该元素左上角坐标是[60,231],右下角坐标为[420,710]
在脚本中上传时,传一个即可,左上角坐标、左上角坐标都可以,通常传左上角坐标。


tap操作 语法:driver.tap(列表中传元组,持续时间)
运行就直接点击,持续时间是毫秒级,比如我们要按2秒,直接输入2000即可。


滑动(swipe)操作
语法:driver.swipe(x1,y1,x2,y2)
滑动操作在平时用到的比较多,比如测试微信小程序端、新闻客户端刷新。

滑动需要明确起点和终点,这个语法括号中传的是类似于坐标点,从x1,y1传到x2,y2,这个操作只适用于部分手机,如果手机换了一个大一些的屏幕,就需要变了。


元素操作
元素操作就是在元素定位的语句后面加一个 .click或者.send_keys()。
1.点击driver.find_element(By.元素类型,‘定位值').click()
2.输入driver.find_element(By.元素类型,‘定位值’). send_keys()send_keys()传的参数格式是字符串


首次运行
首次运行脚本手机自动新增两个APP,Appium-settings和UiAutomator2,确保可以自动安装,并开启全部权限。后面要跑自动化脚本,这两个APP是不可缺少的。

1.Appium-settings应用会自动安装并启用无界面,打开后闪退,以服务形式存在2.UiAutomator2Appium优化后的安卓底层自动化驱动桌面可能看不到图标,也打不开


Appirum配置
下面是Appirum代码中的详细配置,针对每一个字段的解说可查看【视频回放】部分。

desired_caps={#移动设备平台'platformName':'Android',#平台OS版本号,写整数位即可'plathformVersion':'10', #设备的名称--值可以随便写 'deviceName':'P30', #提供被测app的信息-包名,入口信息: #1.打开被测app,2.命令行输入以下信息 #adb shell dumpsys activity recents | findstr intent={ #查看当前活动app包名 'appPackage':'com.tencent.wemeet.app', 'appActivity':'.StartupActivity', #确保自动化之后不重置app 'noReset':True, #设置session的超时时间,单位秒,默认60s 'newCommandTimeout':6000, #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator2 'automationName':'UiAutomator2',#或者UiAutomator1 'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置}


自动化测试框架Pytest
Pytest是Python的一款自动化测试框架,在学习自动化测试过程中,我们最开始学习的都是线性脚本,但是当学到一定阶段以及业务复杂度和数据量上来后,我们必须需求一种全新的框架思维来管理和规范我们的测试脚本,从而实现高类聚低耦合的理念。 安装:pip install pytest
运行:命令行输入pytest 文件名 -s
这里还给大家推荐一个报告生成工具Allure,它是开源测试报告框架,支持pytest单元测试框架,可以使用jenkins持续集成工具。
安装步骤:1. Allure数据包2. pip install allure-pytest3.将bin目录加入Path环境变量中

本内容根据优品软件培育计划公益直播整理,后面还有部分具体项目实操演示的内容,不方便以文字的形式分享,如需直播回放视频,可以在评论区回复1,获取直播回放。

(谢绝转载,更多内容可查看我的专栏)

;