appium介绍
before
在正式开讲appium之前,还需要进行一些必要的扯淡环节.........
移动端测试是什么?
移动端测试是指对移动端应用进行的测试,测试应用功能是否满足特定的需求。
移动端测试分类
- APP功能测试。
- APP自动化测试。
- APP安全测试。
APP功能测试
APP功能测试主要包含:
- 业务逻辑测试:
- 依据产品的设计文档,设计测试用例。
- 再加上一些隐性的需求测试,比如产品文档中没有涉及到的。
- 兼容性测试:
- 系统版本:
- Android:原生Android系统及定制版本。
- ios:原生系统。
- 分辨率:
- 主要关注图片的分辨率,
720 * 1280
、1920 * 1080
,一般公司会根据分辨处理图片。
- 主要关注图片的分辨率,
- 网络情况:2G、3G、4G、WiFi,比如在2G网络环境,应用会不会特别慢,或者卡死等。
- 系统版本:
- 异常测试:
- 热启动应用:应用前后台切换的过程。
- 网络切换:WiFi --> 4G,应用应处于可用状态。
- 中断恢复:WiFi --> 断网 --> 4G,处于下载中的应用,怎么处理?断点续传?还是等待WiFi下载?
- 电话:比如正在看电影,突然来个电话,接完电话后,返回应用,此时的应用处于什么状态?
- 信息:玩游戏中,弹出了一个消息提示,不应该影响游戏。或者查看消息后在回来,游戏处于什么状态。
- 升级安装卸载测试:
- 升级:临近版本升级(1.0 --> 1.1),跨版本升级。
- 安装:
- 首次安装。
- 卸载安装。
- 覆盖安装。
- 卸载:正常卸载、下载一般终止下载,完事在下载。
- 健壮性测试:
- 手机资源消耗:CPU、RAM。
- 流量消耗:数据流量、比如说图片加载消耗。可以进行压缩,图片压缩、数据压缩。
- 崩溃恢复测试:APP闪退、系统结束执行时要做那些处理。
APP安全测试
主要由专门的安全测试人员通过专业的安全测试工具进行的测试。
APP自动化测试
主流工具
目前,主流的移动端自动化测试工具主要包括:
工具 | 支持语言 | 跨平台 | 跨应用 | |
---|---|---|---|---|
Robotium | Java | Android | 不支持 | |
Macaca | Java、Python、node.js | Android、IOS | 支持 | 可以作为简洁版的Appium工具 |
Appium | Java、c#、Python、PHP、Perl、Ruby、node.js | Android、IOS、H5 | 支持 |
还有:
- UiAutomator。
- Monkey。
- MonkeyRunner。
- Instrumentation。
- Athrun。
如何选择工具,应该关注哪些点?
在选择移动端自动化测试工具中,我们应该从这些点作为参考:
- 是否跨应用?
- 是否支持获取
toast
? - 是否支持
native
、webview
?
这里我们选择Appium
作为主要移动端测试工具。
about appium
Appium由Saucelab公司基于node.js
的express
框架开发http server
,遵循rest ful
的json wire
协议,来驱动Apple
系统UIAutomation
库、Android
系统的UIAutomator
框架。
UIAutomation:由苹果官方提供的自动化测试库。
UIAutomator:由Android官方提供的自动化测试库。
appium与selenium
appium继承了selenium的webdriver,也就是selenium2,所以appium在调试中也调用了selenium的某些功能。
appium起到了一个电脑连接移动端的桥梁,然后我们可以在电脑上非常方便(一点也不方便!)的调用selenium工具来调试。
这无疑是个好消息,因为由于有了selenium的基础,学起appium将会不那么头痛!
简要聊聊appium的原理。
Client/Server Architecture
appium的核心其实是一个暴露了一系列REST API的server。
这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。
在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。
这样的设计思想带来了一些好处:
- 可以带来多语言的支持;
- 可以把server放在任意机器上,哪怕是云服务器都可以;(是的,appium和webdriver天生适合云测试)
Session
session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。一般来说,通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。
开启session后,会返回一个全局唯一的session id,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。
进一步思考一下,由于session id是全局唯一,那么在同一台机器上启动多个session就变成了可能,这也就是selenium gird所依赖的具体理论根据。
Appium Server
这就是每次我们在命令行用appium命令打开的东西。
Appium Clients
由于原生的webdriver api是为web端设计的,因此在移动端用起来会有点不伦不类。appium官方提供了一套appium client,涵盖多种语言ruby/java/python。在测试的时候,一般要使用这些client库去替换原生的webdriver库。这实际上不是替换,算是client对原生webdriver进行了一些移动端的扩展,加入了一些方便的方法,比如swipe之类,appium client让我们可以更方便的写出可读性更好的测试用例。
Desired Capabilities
Desired Capabilities携带了一些配置信息。从本质上讲,这个东东是key-value形式的对象。你可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。
Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是测试android还是ios,如果测试android的话那么我们要测试哪个app? server的这些疑问Desired Capabilities都必须给予解答,否则server不买账,自然就无法完成移动app或者是浏览器的启动。
python里的Desired Capabilities配置:
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'myAndroid'
desired_caps['appPackage'] = 'com.android.calculator2'
desired_caps['appActivity'] = '.Calculator'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
appium执行流程
由上图我们也能知道都是需要安装什么了吧!
关于uiautomator:Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。
官方介绍如下:
UI Automator is a UI testing framework suitable for cross-app functional UI testing across system and installed apps.
Note: This framework requires Android 4.3 (API level 18) or higher.
UI Automator是一个UI测试框架,适用于跨系统和已安装应用程序的跨应用程序功能性UI测试。 注意:它需要Android 4.3 (API level 18)以上版本
PS:请按照下面列出的顺序进行安装。
- Python环境:Python3.6.6, 或者别的3.x版本。你可以在下面的百度云链接中下载,推荐Python3.5以上,为了方便编写代码,还需要安装PyCharm IDE(可选,也可以vs code)。
- node.js。
- Java环境:要求是java jdk 1.8及以上。
- appium。
- Android SDK。
- 手机/模拟器:可以是夜神模拟器或者是其他的。
- Appium-Python-Client。