随着智能手机的普及,移动app测试愈来愈重要。如今不少互联网都把注意精力放在了移动端,移动app尽可能提供完美的用户体验。可是诸如崩溃,冻结问题,加载时间慢,不直观的导航以及侵犯隐私之类的严重错误可能会触发用户当即卸载应用程序。数据库
如今,移动应用程序已成为咱们平常微时刻不可或缺的一部分,人们平均天天花费3-4个小时。移动应用在职业和我的生活中对每一个人都起着关键做用。编程
所以,手机移动端测试在构建移动应用程序以提供流畅的用户体验和功能方面扮演着重要角色。后端
软件测试的人都知道Mike Cohn的测试自动化金字塔。典型的金字塔由三层组成。顶部是自动化集成测试层的中间,是一个自动化的端到端测试层(包括用户界面测试),而底部是自动化单元测试层。手动测试不是测试金字塔的一部分。每一层指示每一个阶段应编写的测试数量,并具备不一样的大小。浏览器
对于移动应用程序测试,典型的金字塔结构不适用于移动测试自动化。与Web或桌面应用程序不一样,移动应用程序由不一样的设备,传感器和网络组成,须要不一样的测试模型。安全
移动应用程序的测试金字塔由四层组成,包括手动和自动步骤。金字塔的最顶层是手动测试,并为每一个移动应用程序项目奠基了坚实的基础,随后是端到端测试,beta测试以及包括单元测试的顶层。单元测试和端到端测试具备相同的颜色,表明自动化测试,而beta测试和手动测试则具相同的颜色,表明手动测试、Beta测试层对金字塔来讲是新的,但对每一个移动应用程序项目都相当重要。服务器
这个金字塔中最大的变化是手工测试是其中的一部分。移动测试须要大量的手动测试,而这不能被测试自动化或任何其余工具所取代。网络
端到端和单元测试层以及beta和端到端层也能够交换。端到端测试和单元测试的数量可能因项目而异,也因应用程序而异。架构
在金字塔的顶部,有单元测试。为移动应用程序编写单元测试并不像后端或Web应用程序那么容易。应用程序可使用太多的API和传感器,所以模拟全部这些接口以编写有效的单元测试确实很是困难且耗时。在许多状况下,须要伪造或mock不一样的API,模块以使小型单元正常工做。从技术或经济角度来看,这是无效的。app
功能测试检查功能是否按要求工做。例如,它测试用户与应用程序的交互,例如启动应用程序,登陆,播放歌曲,检查账户余额和其余直接的用户流。框架
因为功能测试与应用程序的UI元素,数据库层,网络层以及其余方面交互,所以一般是耗时且复杂的过程。您须要在各类功能测试类型之间保持良好的平衡,以充分利用它。
回归测试是检查新功能更新,补丁或配置更改时功能和非功能部分都没有带来新的响应或错误。回归测试确认开发锁进行的任何更改又要覆盖未更改的部分。
例如,许多软件即服务(SaaS)提供商将在每次软件更新时按期更新其功能或向其产品中添加新功能。为了确保其核心产品不受新功能的影响,这些公司将执行大量回归测试。
若是借助自动化测试,能够极大提高回归测试的效率,经常使用的开源框架有UiAutomator2
和appium
,以及少许基于坐标和图像的录制工具。
移动应用程序性能测试是肯定系统在特定工做负载或任务下如何响应的过程。一般,性能测试会测试应用程序的速度、稳定性和可伸缩性。它在客户端和服务器端都执行。在服务器端,它检查响应时间,流资源密集型数据包,消息传递延迟,应用程序崩溃等变化。在客户端,它检查各类平台和手机上应用程序行为的一般差别,内存和CPU消耗,加载速度和电池问题。
最经常使用的测试工具是Android SDK自带的monkey
,他最大的缺点就是不肯定性,由于monkey
的操做彻底是无序的,即便操做十万次都不必定有一组操做是可以发现BUG,且很难复现,极难排查问题,除非app出现崩溃和闪退等严重的现象。
目前比较流行的解决方案就是利用各家的云平台,经过云平台提供各种机型云真机,借助平台提供的基础脚本功能或者上传本身的测试脚本,设置一些简单的参数,便可等待云平台的测试报告。
安全性对业务相当重要,当攻击者窃取客户数据时,安全性就成为移动应用程序开发和测试过程当中很是重要的一部分。移动应用程序安全性测试是一个复杂的主题,须要许多不一样领域的知识,例如客户端—服务器通讯,软件体系结构和系统体系结构。因为其复杂的性质和所需的专门技能,安全测试最好由专家来完成。它包括诸如经过中间人攻击进行手动或自动渗透测试,模糊测试,扫描和审核软件的方法。
首先从代码安全提及,当前流行的Android开发语言有Java
、kotlin
,后者因为是Google
主推的,因此份额愈来愈大。目前针对代码安全的扫描工具:Checkstyle、FindBugs、PMD、Jtest等。我的推荐findbugs
,由于兼容性比较好,不管是IDE的插件或者Jenkins插件,基本上都是开箱即用,很是方便。跟其余代码管理工具搭配使用,案例Demo不少,资料也比较丰富。
其次APP的安全扫描工具备:Quick Android Review Kit (QARK),由领英开发,它是一款静态代码分析工具,可提供有关App安全威胁的信息,并给出简洁明了的问题描述;Zed Attack Proxy,全球最受欢迎的免费安全测试工具之一。它是一款开源安全测试工具,并且大部分控件显示支持中文;MobSF(Mobile Security Framework)是一款自动化移动App安全测试工具,同时适用于iOS和Android,可熟练执行动态、静态分析和API测试。
在可用性测试中,实际模拟用户检查移动应用程序的功能。该测试的主要重点在于简单,快速地使用应用程序,简单的入门以及用户对整个体验的满意度。
在测试环境中为用户提供了任务,并鼓励他们在尝试完成任务时大量思考。他们检查用户的不一样习惯,以改善应用程序的用户体验。
因为移动设备和平台的多样性,所以对移动应用程序进行兼容性测试是必不可少的。执行兼容性测试以检查应用程序在移动设备和浏览器组合中的行为是否符合预期。
兼容性测试中的如下实践可帮助覆盖最大数量的设备。建立设备兼容性库:获取市场上全部可用的设备或型号,并构建平台详细信息,设备支持的技术功能(音频/视频格式,图像和文档格式等),硬件功能的信息。设备以及设备支持的网络和其余技术功能。
将全部设备分为两个列表:彻底兼容与部分兼容的设备。彻底兼容的设备支持使全部应用程序功能无缝运行所需的全部技术功能,而部分兼容的设备可能不支持一个或几个功能,所以会致使错误消息。
浏览器和操做系统组合的测试基础架构是一项昂贵的事情。所以,这种方法是不可行且不可持续的。理想的方法是在云测试服务上测试功能,以即可以专一于测试而没必要担忧基础架构。也能够经过下载相应的WebDriver for Selenium
使用Selenium
编写自动测试脚本。
若是有足够的开发能力,也能够不使用第三方,也能够本身基于开源框架开发,最佳的实践无疑是Selenium Grid
。如今,Selenium Grid
能够并行运行测试用例。由于Selenium Grid
有助于在本地、远程电脑上安装的特定浏览器上执行跨浏览器测试。而后能够利用Selenium
中的并行测试功能来代替线性测试,从而下降整体项目成本,并在并行执行自动化测试时加快产品/功能迭代交付。
端到端测试是一种用于从头至尾测试应用程序流程是否按设计执行的方法。进行端到端测试的目的是识别系统依赖性,并确保在各类系统组件和系统之间传递正确的信息。整个应用程序都在真实的场景中进行了测试,例如与数据库,网络,硬件和其余应用程序进行通讯。
用户接受测试(UAT)也称为Beta测试,是由真实用户执行的,一般用做产品发布以前的最终检查点。它使用户能够测试您的应用程序,并验证它是否对用户友好,是否按预期运行以及是否能够在现实环境中处理任务。一般,在UAT期间,项目经理,开发人员,质量检查团队和利益相关者能够进行最终检查。
移动测试自动化提供了以更高的测试覆盖率即时有效地测试移动应用程序的可能性。一旦测试自动化,就能够一次又一次地快速重复地执行它们。在几乎全部状况下,这都是具备较长维护寿命的软件产品的最具成本效益的方法。自动化的真正好处不只在于测试的可重复性,还在于其执行可能甚至没法手动执行的测试的能力。
因为大多数公司都遵循敏捷开发实践,所以移动应用程序自动化测试很是适合敏捷过程。经过使测试能够并行完成,测试自动化可带来巨大的价值。尽早解决问题将节省大量时间,并使开发人员能够更快地完成产品的定型。
简而言之,移动自动化测试是一个常见问题的解决方案。自动化测试经过三种方式改善了业务结果:更高的测试效率,更高的测试效率和更短的迭代时间。
移动端主流测试框架有:Appium、UiAutomator二、Espresso、Robotium,根据流行程度排序。
appium是近些年大火的测试框架,主要优势对于混合app和H5页面的自动化都提供了很是优秀的测试方案,并且解决了Android
和iOS
量大平台的统一性问题,最值得推荐。
UiAutomator2是Google退出的Android UI自动化测试框架,主要优点在于Android系统和原生APP的自动化测试,稳定性有保障,对于其余APP测试场景支持较好(如性能测试、遍历测试等)。
Espresso是Google的开源自动化测试框架。它的优势是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。最大的缺点是不能跨App。另外也能够用做APP的单元测试。
Robotium也是基于Instrumentation的测试框架,目前市场使用率逐步被前三者超越,因为其对使用者的要求较高,也是不能跨app的。
为了知足敏捷开发过程的需求,有不少移动自动化测试工具能够帮助团队以彻底自动化的方式测试移动应用程序的各类参数,例如行为,性能,安全性等。这些测试工具中的一些在本地,混合和Web应用程序上具备竞争力。
自动化测试是增长有效性,效率和测试范围的最佳方法。测试自动化的真正好处来自这些测试的可重复性,也来自于没法手动执行的测试执行。
如何选择选择合适的的移动测试工具:
模拟器会设置与真实设备的OS相似的测试环境,但没法模拟真实设备的硬件。所以,不会遇到硬件可能引发的全部问题。某些应用程序的运行不一样硬件设备可能有所不一样,这就是模拟器不太可靠的主要缘由。
在模拟器上运行测试不如在物理设备上进行的测试可靠。模拟器也不能模拟硬件功能,例如特定的芯片设置,处理能力和设备内存。它须要真实的设备才能进行完整的硬件和软件测试。
对于移动应用程序开发人员和测试人员而言,在全部不一样的设备和操做系统组合上交付高质量的应用程序是一项艰巨的工做。这既耗时,复杂又昂贵。并且,随着新设备继续进入市场,开发人员须要找一种更简便的方法来跨它们进行构建和测试。
云设备测试使开发人员能够上传他们的应用程序,并在包括最新设备/操做系统组合在内各种测试设备上进行兼容性测试。
移动应用程序必须在各类设备和操做系统版本之间提供无缝的体验。质量检查工程师应对可能会给用户带来问题的硬件和软件更改具备很高的敏感性。团队必须考虑全部因素。当移动用户即便在引入新版本的OS或设备后仍继续使用旧版本的OS或设备时,碎片化尤为是一个挑战。
测试设备,操做系统和网络设置的每种组合都会建立大量测试用例。这要求开发团队执行采购和维护不断增加的移动设备池的工做。这些挑战是移动应用程序开发人员的主要障碍。
针对测试设备,咱们首先考虑软件。系统:Android或者iOS等,而后考虑不一样系统的重要版本,Android版本分布较广,还有各个厂商不一样的定制系统以及定制系统的版本。其次考虑硬件,重点是屏幕尺寸、分辨率、CPU、内存、容量,在性能测试时还须要电池容量、充电器速率、发热状况等等。
大多数应用程序使用移动数据链接和wifi。当用户的链接类型可能会不断改变,不幸的是,不一样运营商不一样的网络环境带来的网络策略致使用户网络状况复杂繁多。即便已经开发了测试的API,也没法复制现实环境,这里面极可能隐藏着某些问题。对于质量检查团队来讲,测试网络使用状况很是重要,须要提供不一样网络状况的模拟的能力。
Charles是一款很是有用的测试工具。不只能够作接口抓包,也能够进行接口数据模拟。还有一个隐藏功能就是Charles能够模拟各类网络环境,不一样速率、不一样延迟,不一样丢包率等,固然也提供3G、4G模拟。
许多移动应用程序继承了大量第三方SDK。这使得测试团队在整个测试场景的过程当中在多个角色(或设备)之间切换。这些复杂的用例增长了适当测试应用程序所需的工做量。
包含游戏或视频流组件的移动应用程序可能会很快耗尽电池寿命。随着用户设备的使用时间累加,设备的CPU处理能力和电池损耗也会随着时间推移发生变化,包括系统的碎片化等等缘由都会致使在移动端性能测试过程当中实现误差。这会使性能测试报告缺少可信力。