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执行流程
由上图我们也能知道都是需要安装什么了吧!
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。