浅谈Appium
关于目前我所使用的自动化工具中,Appium应该是在做移动端自动化的时候最常使用的一个了,可以说是一个很强大的开源工具了,不过涉及到驱动的内核知识仍旧需要学习和探索(扶我起来~我还能学😆)
咳咳~~ 言归正传,下面来梳理一下Appium的相关知识吧。
一、简单介绍
(一)测试对象
Appium是一款开源的自动化测试框架,支持iOS和Android平台上的原生应用,web应用和混合应用。
- 移动原生应用:单存用iOS或Android开发语言开发编写的应用,简单来说就是App Store或者Google Play里面的应用,例如一些App(Application的简称),可以直接安装在移动设备的应用。
- 移动Web应用:在移动端设备上通过浏览器访问的应用(Appium目前已支持Android的Chrome和iOS的Safari),这类应用往往通过浏览器就可以访问,比如一些页游或者一些网页插件应用。
- 混合应用:同时使用网页语言与程序语言开发,原生代码和 Web 内容交互的应用,举个例子来说就是很熟悉的淘宝,京东这类应用,既有Web端又有移动端。
(二)支持平台及语言
- Appium是跨平台的,支持Windows,Linux和OSX系统,它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化的测试脚本,这大大提高了iOS和Android测试套件间代码的复用性。
- Appium支持多语言编写,目前支持Java,JavaScript,PHP,Python,Ruby等几款语言并有完整的支持,具体可以看多种不同语言的测试示例。Appium是C/S的设计模式,只要Client能够发送http请求给server,那么的话Client用什么语言来实现都是可以的,这就是Appium及Selenium(WebDriver)如何做到支持多语言的原因;Appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的Building都可以拿来就用,省去了为每种语言开发一个Client的工作量。
语言/框架 | Github地址 |
---|---|
Python | Python样例 |
Ruby | Ruby样例 |
Java | Java样例 |
JavaScript(Node.js) | JavaScript样例 |
RobotFrameWork | RobotFrameWork样例 |
PHP | PHP样例 |
(三)Appium哲学
Appium的官方介绍文档中写到了有关Appium的四条哲学,原文是这样写的:
Appium Philosophy
Appium was designed to meet mobile automation needs according to a philosophy outlined by the following four tenets:
- You shouldn’t have to recompile your app or modify it in any way in order to automate it.
- You shouldn’t be locked into a specific language or framework to write and run your tests.
- A mobile automation framework shouldn’t reinvent the wheel when it comes to automation APIs.
- A mobile automation framework should be open source, in spirit and practice as well as in name!
下面是中文翻译:
Appium根据以下四个原则概述的理念来满足移动自动化需求:
- 您无需重新编译或以任何方式对其进行修改即可使其自动化。
- 您不应该被锁定在特定的语言或框架中来编写和运行测试。
- 当涉及到自动化API时,移动自动化框架不应重新发明轮子。
- 移动自动化框架应该在精神,实践和名称上都是开源的!
这四个原则统一来说都在说明Appium的开源性,灵活性以及强大的可扩展性,这让它成为了一款强大的测试框架。
(四)Appium的工作原理
画图花了10分钟,下图展示了Appium的工作原理图:
(该图是参考了网上的资料以及个人的一些理解后的出,如有错误之处,欢迎指正)
我们编写的自动化脚本作为Client端,Client端以特定以针对每种语言的库的方式启动Appium-Server的会话(session),但是它们最终都通过一个POST/SESSION称为“desired capabilities”对象的Json对象想服务器发送请求,此时,服务器将启动自动化会话并以会话ID进行响应,该会话ID用于发送其他命令。
在Server端,Appium针对Mac和Windows两大平台开发了对应的Appium-Server。
Appium-Server通过调用不同的接口来驱动Apk/Ipa的操作,针对Android设备,Android SDK 版本在17以上的会通过调用Android 系统 UIAutomator 组件的接口来实现相应操作,SDK版本在17以下会通过调用Android系统Senlendroid组件的接口来实现相应操作;针对IOS设备,则通过调用IOS系统Apple Instruments组件的接口来实现相应操作的。
最后在不同的系统设备上执行自动化的操作,所支持的设备包括真机和一些模拟器。整个Appium的执行过程原理作为刚入行业不久的新人也暂时只能理解到这里了,之前在网上浏览资料的时候曾了解到Appium一些底层的驱动原理,但无奈知识体系的深度1不够并没有完全看懂,总而言之,还是得多用多学多理解。
(五)需要安装的工具
1.首先就是我们用来编写自动化脚本的测试语言了,博主目前使用的是Python,以及每个语言所需要依赖的相关库需要自己去了解学习了。
2.有了编程语言,你必须就得有一个用于“搬砖”(写代码)的IDE,这里博主使用的是pycharm,因为Pycharm对于python依赖库的安装太简单快速了,以及和GIt的联结代码上传功能可以不用在敲命令无缝上传Github,感觉自己在吹水了哈….咳咳,收!这个根据个人喜好不同,都会有不同选择。唯一原则:用着顺手就好。
3.下载Appium-Server端,在下面的环境搭建中会讲到。
4.下载Appium-Client端,在下面的环境搭建中会讲到。
5.你所要测试的移动设备,可以是真机也可以是模拟器,这里模拟器推荐可以参考博主之前的文章中提到的几款模拟器。
二、环境搭建
(一)安装Android SDK
1、Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序,可以看做用于开发和运行Android应用的一个软件
2、提供小工具,比如adb、aapt、uiautomatorview
3、测试设备使用安卓模拟器,这一步决不能跳过
(二)安装Appium-Server
1、下载地址:https://github.com/appium/appium-desktop/releases
2、下载appium安装包(Appium-windows-1.15.1.exe,Appium-mac-1.15.1.dmg等)
3、安装appium-desktop,并配置appium环境变量
(三)安装Appium-Client
1、先安装编程语言,比如python语言
2、安装Appium-Client,python的话可使用pip安装:pip install Appium-Python-Client
三、应用及操作
(一)调用Appium过程
1、配置手机设备参数,告诉server端我想调起的是哪一台手机设备
2、抓取手机上应用的控件,指定对应的控件来进行操作
3、对抓取到的控件进行操作,比如点击、填写参数等
(二)配置手机设备参数
Appium的Desired Capabilities的基本配置如下:
这里楼主选择的是Page-Object的代码框架模式,做了一些逻辑与数据的分离,将配置信息分离,以yaml脚本的形式进行信息记录,这样的记录方式的好处就是将数据与业务逻辑分离开来,无论是在数据上还是代码逻辑上做修改,都很清晰且容易维护,方便修改配置信息等。
下面是配置信息的yaml文件:
1 | platformName: Android |
下面是python脚本对yaml文件的引用:
1 | from appium import webdriver |
上图是以Android设备为例,iOS设备大同小异,解释一下几个常见的参数吧:
● deviceName:指定启动设备,比如Android Emulator、iPhone Simulator等
● automationName:指定自动化引擎,默认appium
● platformName:指定移动平台,Android或者iOS
● platformVersion:指定平台的系统版本。例如指定Android系统版本为8.1.0
● appActivity:待测试app的Activity,注意,原生app的话要在activity前加个“.”
● appPackage:待测试app的包名(package)信息
(三)抓取手机上的应用控件
抓取方法一:通过Android SDK内置工具uiautomatorviewer.bat来查看手机应用的控件参数(该工具位于 /tools/bin/ 目录下)
这是Android SDK自带的工具,使用还是很方便的,就是在连接上针对一些应用会不太稳定。
抓取方法二:使用appium-desktop自带的客户端进行抓取。
抓取方法三:使用weditor进行元素抓取(浏览器界面)
weditor的Github地址:https://github.com/openatx/weditor 具体介绍了weditor的安装以及如何使用。
总结:目前来说博主用的最多的就是weditor的元素定位了,及其的方便以及查看的信息很多,还可以录制脚本运行自动化(虽然我从来没用过,只是用来定位元素😆),有时候也会使用appium-desktop来查看,三种元素定位的方法任你选择了,罗卜白菜,各有所爱嘛,啥有的顺手用啥。
(四)操作控件
1 | 1.scroll |
上面列举了最基本的一些操作代码了,涉及到一些深度的操作还是得自己封装函数,这个就要看所要实现的操作是什么了。
四、个人总结
1.Appium适合做什么样的测试呢?答:适合做UI自动化的测试,但是还是会存在驱动较慢的情况。
2.Appium跨平台,支持Android和IOS自动化测试。
3.Appium支持多语言,如java、Object-C、JavaScript、PHP、Python、Ruby、C#等等。
4.Appium的开源以至于支持多种应用:原生应用,Web应用和混合应用。
5.Appium是目前我所使用来做UI自动化比较顺手的工具了,还有其他类似的工具,比如网易的Airtest,博主也搞来折腾过,确实也是很便利,对于小白来说是个不错的工具,用于游戏APP的脚本录制真的简单快捷,自动化这一块水很深,还是得慢慢学习了解。
好了,以上就是我对Appium知识的一些梳理了。立个Flag:希望有一天能把Appium的底层吃透,能够自己写一些辅助性工具😆。