关闭

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

发表于:2023-9-08 09:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  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环境变量中
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号