移动端测试

before

在appium之前,还需要进行一些必要的环节.........
移动端测试是什么?
移动端测试是指对移动端应用进行的测试,测试应用功能是否满足特定的需求。

移动端测试分类

  • APP功能测试。
  • APP自动化测试。
  • APP安全测试。

APP功能测试

APP功能测试主要包含:

  • 业务逻辑测试:
    • 依据产品的设计文档,设计测试用例。
    • 再加上一些隐性的需求测试,比如产品文档中没有涉及到的。
  • 兼容性测试:
    • 系统版本:
      • Android:原生Android系统及定制版本。
      • ios:原生系统。
    • 分辨率:
      • 主要关注图片的分辨率,720 * 12801920 * 1080,一般公司会根据分辨处理图片。
    • 网络情况:2G、3G、4G、WiFi,比如在2G网络环境,应用会不会特别慢,或者卡死等。
  • 异常测试:
    • 热启动应用:应用前后台切换的过程。
    • 网络切换:WiFi --> 4G,应用应处于可用状态。
    • 中断恢复:WiFi --> 断网 --> 4G,处于下载中的应用,怎么处理?断点续传?还是等待WiFi下载?
    • 电话:比如正在看片片,突然来个电话,接完电话后,返回应用,此时的应用处于什么状态?
    • 信息:玩游戏中,弹出了一个消息提示,不应该影响游戏。或者查看消息后在回来,游戏处于什么状态。
  • 升级安装卸载测试:
    • 升级:临近版本升级(1.0 --> 1.1),跨版本升级。
    • 安装:
      • 首次安装。
      • 卸载安装。
      • 覆盖安装。
    • 卸载:正常卸载、下载一般终止下载,完事在下载。
  • 健壮性测试:
    • 手机资源消耗:CPU、RAM。
    • 流量消耗:数据流量、比如说图片加载消耗。可以进行压缩,图片压缩、数据压缩。
    • 崩溃恢复测试:APP闪退、系统结束执行时要做那些处理。

http://mi.talkingdata.com/index.html

APP安全测试

主要由专门的安全测试人员通过专业的安全测试工具进行的测试。

APP自动化测试

关于自动化测试介绍,参考:

https://www.cnblogs.com/sundawei7/p/11959551.html

主流工具
目前,主流的移动端自动化测试工具主要包括:

工具支持语言跨平台跨应用 
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?
  • 是否支持nativewebview

这里我们选择Appium作为主要移动端测试工具。

about appium

Appium由Saucelab公司基于node.jsexpress框架开发http server,遵循rest fuljson 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。
posted @ 2019-11-29 18:30  天之坚毅  阅读(635)  评论(0编辑  收藏  举报