安卓平台自动化测试之Appium工具

1、Appium简介

Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。

它使用WebDriver协议驱动IOS,Android和Windows应用程序。

Appium官网

Appiumgithub主页

官方中文文档

Appium官方论坛

Testerhome中文社区

2、Appium优势

可以跨平台同时支持android、ios

支持多种语言,java、python、php、Ruby等等

不用为复杂的环境发愁

如果你有selenium经验,直接上手。

3、Appium架构原理

运行原理

我们的电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。

Appium的架构原理如图所示,由客户端(Appium Client)和服务器(Appium Server)两部分组成,客户端与服务器端通过JSON Wire Protocol进行通信。


Appium框架结构

Appium

Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端。

Bootstrap.jar

Bootstrap.jar是在Android手机上运行的一个应用程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar;Bootstrap.jar负责运行测试命令。

Appium客户端

它主要是指实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。现有的客户端Library有多种语言的实现,包括Ruby、Python、Java、JavaScript(Node.js)、Object C、PHP和C#。Appium的测试是在这些Library的基础上进行开发的。

4、Appium组件

Appium Server

Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。

安装完nodejs后执行$ npm install -g appium既可以安装appium-server

Appium Desktop

Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能。 它是几个Appium相关工具的组合:

1.Appium Server的图形界面。 您可以设置选项,启动/停止服务器,查看日志等不需要使用Node 的NPM来安装Appium,因为Node运行时与Appium Desktop捆绑在一起。

2.可以使用Inspector查看应用程序的元素,获取有关它们的基本信息,并与它们进行基本的交互。

Appium Desktop与Appium不同。 Appium Desktop是Appium的图形前端,带有其他工具。 Appium Desktop以其自己的节奏发布,并拥有自己的版本控制系统。 就像国内很多定制的Android系统有自己版本号,但是都是基于一个Android系统版本封装的。版本号不一定与Andriod原生系统版本号一致。如:魅族的flyme6.0系统的内核是Android 5.1

另外一个重要原因Appium的搭建环境较为复杂所以才有了appium-desktop,只需要傻瓜式安装,Appium-desktop集成了nodejs,appium-server,解决了nodejs与appium-server的版本兼容问题


appium-desktop

Appium GUI

Appium GUI是Appium desktop的前身。

这个也是把Appium server封装成了一个图形界面,降低使用门槛,如同最初的操作系统Dos都是敲命令,后面都是图形界面操作系统,如Windows系统。很多初学者对下面这个界面应该不陌生吧,这个就是Windows版本的Appium GUI界面。测试人员可以手动启动,配置相关server 服务,如果不用这个启动的话,需要命令启动服务。因为大部分教程都是基于这个GUI来讲解的,所以很多人一说Appium就认为是这个。

该产品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的Appium版本,而是1.4.16版本。如果要使用最新的桌面版需要使用Appium Desktop。


appium-GUI

Appium Clients

因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium

Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。 Appium客户端可以使用不同的语言来实现,如Python,java等。具体详见下表:

说白了就是和selenium一样有一个Appium的库,通过Appiim方法编写自动化测试用例

appium-clients

5、环境搭建

Node.js

Nodejs下载地址http://nodejs.cn/

Appium

Appium-doctor

Appium-desktop

Appium-Python-Client(Rotbotframework自带,无需安装)

Python

JDK

Andriod SDK

安装Appium-desktop则不需要安装nodejs和appium,且appium-desktop不需要配置环境变量

5.1.1Appium 安装

Appium Server其实可以通过命令 npm install -g appium来安装。不过由于众所周知的网络原因,直接使用这样安装会非常非常慢,甚至会安装失败,所以我们可以使用国内镜像来安装。

选用的镜像是 淘宝NPM镜像

在安装之前需要先安装下cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

再使用如下命令安装最新版

cnpm install -g appium

或者使用指定安装版本

cnpm install [email protected] -g

5.1.2Appium 配置

安装完成之后可以使用如下命令查看appium的安装路径

使用where appium

apium安装成功

命令 appium即可启动appium服务,appium -v查看版本

注意:如果装了Appium-desktop不要配置Appium-desktop的环境变量,否则运行appium命令时会弹出Appium-desktop的界面

5.1.3Appium退出

按键Ctrl+c 选择y 即可退出

5.2.1安装Appium-desktop

下载地址:https://github.com/appium/appium-desktop/releases

Appium-desktop工具已封装了Appium server和Node.js依赖环境。appium-desktop是我们初学者最容易上手的工具。唯一的缺陷不能通过命令行启动服务,所以安装了Appium-sever,可以通过CMD来启动appium服务,多用于同时使用多台设备进行兼容性测试时需要启动多个服务

5.2.2使用Appium-desktop

5.2.2.1启动服务

Host输入127.0.0.1,port输入4723点击Start Sever

注意:一定要以管理员身份启动Appium-desktop


appium启动


5.2.2.2.使用“高级选项”启动服务器(Advance),一般不需要改动


advance

注意:如果在启动app或者服务器时提示找不到Android-Home,点击Edit Configurations,查看Android-HOME是否正确,修改正确之后点击保存

5.2.2.3.服务器预设(Presets)

使用高级服务器选项,就可以保存配置以备以后使用。只需将preset保存在“Advanced”选项卡上,就能够在“preset”选项卡中回忆并启动服务器。



预设server


5.2.2.4.链接APP进行元素定位调试

注意:链接的是App,进行纯H5测试请使用Web页面直接定位元素,只有进行原生元素定位才需要使用

Step1:点击右上角放大镜


调试入口

Step2:点击,填写Capability的JSON


编辑Capability

{

 "platformName": "Android",

 "deviceName": "10.101.54.105",

 "platformVersion": "8.0",

 "appPackage": "com.xxxx.android",

 "appActivity": ".LoadingActivity"

}

点击Save As…,下次直接可以在Saved


save

Capability Set2中找到方便使用


Step 3 点击Start Session即可打开同程旅游


左边是应用程序的屏幕截图,可以在应用程序中使用鼠标来模拟操作。

中间是应用程序的层次结构,表示为XML。您可以通过单击它,或者通过点击屏幕快照视图中的元素来导航这棵树,会被强调。

appium-desktop调试界面

右侧是细节视图,当一个元素被突出显示时,它的信息会出现在检查器右侧的细节视图中。这个细节视图包括对元素的潜在操作,以及元素属性的表。这些属性在决定如何使用特定的Appium定位策略访问元素时是有价值的。选择一个元素,还可以“Tap”元素,或者“发送键”到元素(如果它是一个文本字段)。


xml树

如果手机上所处页面和快照不一致时,刷新截图快照


刷新

输入定位语法调试,确认定位正确




录制脚本,注意一定要用红框里面的Tap、send可以去操作元素,直接手机上操作元素是没什么用的,一般不会使用该功能


录制按钮


操作

6.H5自动化测试

6.1纯H5启动Chrome常见问题

1)Appium安装失败,打开运行USB安装,关掉手机自动锁屏

Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

2019102618:49:50.377 :  FAIL : No application isopen

2019102618:49:50.379 :  WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:49:50.382 :  FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error:

Error

executing adbExec.

Original error: 'Command ''C:\\Program Files

(x86)\\Android\\platform-tools\\adb.exe' -P 5037 -s

33f6c01a0704

shell pm install -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk'

exited

with code 1'; Stderr: 'Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]'; Code: '1'

2)无法连接默认证书,以管理员身份运行该Appium可解决

Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

2019102618:53:14.880 :  FAIL : No application isopen

2019102618:53:14.881 :  WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:53:14.883 :  FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: Could not

 sign with default certificate. Original error Command ''C:\\Program

Files\\Java\\jdk-13.0.1\\bin\\java.exe' -jar 'C:\\Program Files\\Ap

pium\\resources\\app\\node_modules\\appium\\node_modules\\appium-adb\\jars\\sign.jar' C:\\Users\\lenovo\\AppData\\Local\\T

emp\\2019926-14192-1e1rvyx.e7xbi\\appium-uiautomator2-server-debug-androidTest.apk

--override' exited with code 1

Endingtest:   WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

3)手机自带浏览器不是chrome,安装Chrome浏览器,不能直接用自带浏览器,自带浏览器没有对外开放Web调试

Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

2019102618:57:56.765 :  FAIL : No application isopen

2019102618:57:56.767 :  WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:57:56.769 :  FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: 'app' option is required for reinstall

Endingtest:   WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

4)Chrome版本与driver不对应,替换Appium里面的driver

Starting

test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

2019102620:05:11.368 :  FAIL : No application isopen

2019102620:05:11.369 :  WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102620:05:11.372 :  FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: No Chromedriver found

that can automate Chrome '78.0.3904'. See

https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md

for more details. You could also try to enable automated chromedrivers

download server feature

Endingtest:   WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试

1.appium服务chromedriver驱动文件的位置:appium服务程序的根目录下 .\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win

2.也可以通过webdriver.Remote第二参数中的,修改属性‘chromedriverExecutableDir’指定使用chromedriver驱动位置(desired_caps[‘chromedriverExecutableDir’]=‘D:/WanleAutoTestForH5/ChromeDrivers/78.0.3904.70’,注意是目录,不需要写到chromedriver.exe)

6.2 H5自动化测试

Step1:连接手机

Step2:在手机上按照Chrome浏览并且下载相应版本driver

Step3:连接手机上的Chrome


Demo

Open Application关键字本质上只有两个参数,remote_url为Appium服务、desired_caps是一个可变关键字参数,所以我们使用关键字时才可以输入很多key-value格式的参数


关于desired_caps

desired_caps要求一个Capability的设置

那么,什么是Capability

desired capability的功能是配置Appium会话。他们告诉Appium服务器想要自动化的平台和应用程序。

Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值。(如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session。

公用Capability

公用Capability


Android Capability


IOS Capability

其他:

中文输入

Open Application传入unicodeKeyboard=true  resetKeyboard=true

允许创建ChromeDriverSessions,用于原生嵌入H5时,切入H5页面进行H5自动化

recreateChromeDriverSessions=true

1)H5元素定位

和Web自动化一样直接在WebChrome中打开进行定位,但是亲测只支持css与xpath定位,其他不可用

2)元素操作

与Selenium基本一样input text click element等

3)手机常用特有关键字

Tap(x,y):按照坐标点击

Swipe(x1,y1,x2,y2):滑动

Press Keycode(keycode)模拟键盘输入,比如搜索框输入完成之后需回车才能进入下一步

Android Keycode参照下列资料,IOS不支持使用Keycode模拟键盘输入:

dhttps://www.cnblogs.com/yc-c/p/9014771.html

其他关键字

https://www.bbsmax.com/A/kvJ3r1EXzg/

你可能感兴趣的:(安卓平台自动化测试之Appium工具)