本笔记根据微信读书的:《Android自动化测试实战》
简介
测试金字塔
金字塔模型将测试分为单元(Unit)、服务(Service)和用户界面(User Interface,UI)这3个层级;在测试发展的历程中,也出现了一些重新定义金字塔层级的测试模型,尽管对分层的具体描述各不相同(有人将这3个层级分别定义为单元、接口、集成测试,也有人将整个金字塔划分为4~5个层级),但金字塔自底向上的结构是大家公认和遵循的。
单元测试
单元测试是针对代码单元(通常是 类 或 方法 )的测试,单元测试的价值在于能提供快速的反馈,在开发过程中就可以对逻辑单元进行验证。好的单元测试可以帮助改善既有设计,在团队掌握测试驱动开发(Test Driven Development,TDD)的前提下,单元测试能辅助重构,帮助提升代码整洁度。
服务测试
针对业务接口进行的测试,主要测试内部接口功能实现是否完整,比如内部逻辑是否正常、异常处理是否正确等,比如内部逻辑是否正常、异常处理是否正确等。
UI测试
UI测试是从用户的角度验证产品功能的正确性,测试的是端到端的流程,并且加入用户场景和数据,验证整个过程是否正确、流畅。
自动化测试
单元自动化测试
单元自动化测试指对软件中最小的可测试单元进行检查和验证,调用被测服务的类或方法,根据类或方法的参数,传入相应的数据,得到返回结果。单元自动化测试是最基本的测试之一,也是测试中的最小单元,它的对象是函数,可以包含输入输出,针对的是函数功能或者函数内部的代码逻辑,并不包含业务逻辑。该类测试一般由研发人员完成,需要借助单元测试框架,如Java的JUnit、TestNG,Python的unittest、Pytest,等等。
接口自动化测试
接口自动化测试主要验证模块间的调用返回,以及不同系统、服务间的数据交换。接口自动化测试一般在业务逻辑层进行。所以,接口测试关注的是数据。常见的接口测试工具有Postman、JMeter、LoadRunner等。
UI自动化测试
UI层是用户使用产品的入口,产品的所有功能通过这一层提供给用户,目前测试工作大多集中在这一层,这种测试更贴近用户的行为。所以,UI自动化测试的关注点是用户操作行为,以及UI上各种组件是否可用。常见的UI测试工具有UFT、Selenium、Appium等。
Android
Android体系架构
应用程序层
Android会同一系列核心应用程序包一起发布,该应用程序包包括桌面、SMS短消息、日历、地图、通话、浏览器、联系人管理程序等应用程序,都是使用Java语言编写的。
应用程序框架层
开发人员可以完全调用核心应用程序所使用的应用程序框架。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便地替换程序组件。
系统运行库层
Android包含一些C和C++库,这些库能被Android系统中不同的组件使用,并通过Android应用程序框架为开发者提供服务。
Linux内核层
Android运行于Linux内核(kernel)之上,但并不是GNU/Linux。因为一般GNU/Linux支持的功能,Android大多都不支持
Android的Linux kernel控制包括安全(Security)、内存管理(Memory Management)、过程管理(Process Management)、网络堆栈(Network Stack)、驱动程序模型(Driver Model)等。
Android开发四大组件
活动(Activity)
用于表现功能,Activity是所有应用程序的根本,所有应用程序的流程都运行在Activity之中,Activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。
服务(Service)
在后台运行,不提供界面呈现。Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能在后台运行,并且可以和其他组件进行交互,Service是没有界面的长生命周期组件
广播接收器(Broadcast Receiver)
用于接收广播。在Android中,Broadcast是一种广泛应用的、用于在应用程序之间传输信息的机制。而Broadcast Receiver是对发送出来的Broadcast进行过滤、接收并响应的一类组件。
内容提供商(Content Provider)
支持在多个应用程序中存储和读取数据,相当于数据库。Content Provider是Android提供的第三方应用数据的访问方案。Android对数据的保护是很严密的,除了放在SD卡中的数据,一个应用程序所持有的数据库、文件等,都是不允许其他应用程序直接访问的。Android当然不会真的把每个应用程序都设计成一座孤岛,它为所有应用程序都准备了一扇窗,这就是Content Provider。
App的类型与区别
Native App:
Native APP指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的App,可拓展性强,需要用户下载安装使用。(简单来说,原生应用是特别为某种操作系统开发的,如iOS、Android等,它们是在各自的移动设备上运行的)。该模式通常是由“云服务器数据+APP应用客户端”两部份构成,APP应用所有的UI元素、数据内容、逻辑框架均安装在手机终端上。
Web App
Web App是基于Web的系统和应用程序,运行于网络和浏览器之上,目前多采用HTML5标准开发,无须下载和安装。
Hybrid App:
混合应用程序(Hybrid Application,Hybrid App)是结合了原生应用程序和Web应用程序两者的元素的软件应用。混合应用程序本质上是带有原生应用外壳的Web应用。一旦用户从应用商店下载应用并在本地安装,外壳就会通过嵌入在应用中的浏览器连接到移动平台提供的任何功能。浏览器及其插件在后端运行,对最终用户是不可见的。
测试框架
Instrumentation
Android自带的一个测试框架,是很多测试框架的基础,可以在同一个进程中加载被测组件。它有很多丰富的高层封装,你可以使用基于Instrumentation的其他框架,避免过多二次开发。但Instrumentation不支持跨App使用,基于Instrumentation开发的框架都“继承”了这个缺点。
Espresso
Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁,API更加精确,使用者编写测试代码更简单,容易快速上手。因为它是基于Instrumentation的,所以不能跨App使用。
Robotium
是基于Instrumentation框架开发的一个更强的框架。该框架对常用的操作进行了封装。
优点:容易让使用者在短时间内编写出测试脚本,易用性高;支持自动跟随当前Activity;由于运行时会绑定到图形用户界面(Graphical User Interface,GUI)组件,所以相比Appium,它测试时执行速度更快,功能更强大;即使用户不访问代码或不了解App实现,也可以使用;支持Activity、Dialog、Toast、Menu、ContextMenu和其他Android SDK控件。
缺点:不能测试Web组件;在旧设备上测试执行速度会变得很慢;不支持iOS设备;没有内置的记录和回放功能。
UIAutomator
UIAutomator是由Google提供的测试框架,它提供了Android Native App和手游App的高级UI测试。这是一个包含API的Java库,可以用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。
优点:在访问不同的进程时,会给JUnit测试案例特权;测试库由Google社区支持和维护。
缺点:仅支持Android 4.1(API level—16)及以上版本;不支持脚本记录,不支持Web视图,仅支持使用Java,因此很难和使用Ruby的Cucumber结合,如想支持行为驱动开发(Behavior Driven Development,BDD)框架,建议使用Java自己的BDD框架,例如JBehave。
Calabash
Calabash是一个适用于iOS和Android设备的跨平台App测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash开源并支持Cucumber,Cucumber能让用户用自然的英语表述App的行为,实现BDD。Cucumber中的所有语句都是使用Ruby定义的。
优点:有大型社区支持;列表项简单,有类似英语表述的测试语句,支持在屏幕上能够实现的所有动作,如滑动、缩放、旋转、敲击等;支持跨平台开发(同样的代码在Android和iOS设备中都适用)。
缺点:某一步骤测试失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题;测试耗费时间,因为它总是默认从安装App开始;需要将Calabash框架安装在iOS的.ipa文件中,因此测试人员必须要有iOS App的源码;除了Ruby,对其他语言不友好。
Appium
Appium是一个开源、跨平台的自动化测试工具,支持iOS、Android和Firefox OS平台。通过Appium,开发者无须重新编译App或者做任何调整,就可以测试App,可以通过测试代码访问后端API和数据库等。它是通过驱动iOS的UIAutomation和Android的UIAutomator框架来实现跨平台支持的,同时绑定了Selenium WebDriver用于支持对早期Android平台的测试。开发者可以使用Selenium WebDriver兼容的任何语言编写测试脚本,如Java、Objective-C、JavaScript、PHP、Python、Ruby、C#、Clojure和Perl语言等。
标签:框架,App,应用程序,UI,总集,测试,自动化,Android From: https://www.cnblogs.com/yigehulu/p/18296189