写在前面:
测试基础到上个环节可以划上一个小句号了,我会在前一篇文章中补上敏捷开发会议的一些内容。
希望在下一个阶段,自己还能用同样的激情与活力去学习测试开发方面的知识,进一步地提升自己的专业技能,养成总结的好习惯,对自己的学习习惯有更好的提升。
如果小伙伴们对我连载的内容或者是某篇博文感兴趣的话,劳烦你们动动自己的鼠标或者是小手点个赞或者收藏一下哦 ~ ~ ~ ᖘ ❛‿˂̵✧
目录
一、 什么是App?
-
App是Application的缩写,意思是“应用程序”,主要指安装在智能手机、智能平板、车载智能终端及可穿戴设备等终端上的软件,比如我们常用的手机版QQ、微信、抖音等。
-
Mobile端和PC端流量统计数据:
Desktop vs Mobile vs Tablet Market Share Worldwide | Statcounter Global Stats
-
2021年1月中国手机App用户量排行榜Top50:
-
为什么要学习App测试?
-
当今是移动互联网时代,据统计,每月移动互联网用户规模达到10亿+人,App用户人均单日使用时长达到6小时+,排除吃饭睡觉,有一多半的时间在玩手机。鉴于此,软件开发者在开发软件时,除了Web端应用外,大多数时候还会提供对应的App端应用。作为测试工程师,必须掌握App测试的相关技能。
-
二、 App的分类
-
iOS是基于Unix内核深度定制的一个移动设备操作系统;Android是一个Linux发行版,用于移动设备;Linux是类Unix系统;iOS是闭源的,Android是开源的;iOS是苹果公司主导,Android是谷歌主导的;
-
从操作系统平台来分,主要分为如下两种类型:
-
iOS App
-
安装在苹果的iOS操作系统上,主要是iPhone、iPad、iWatch等
-
同一款应用,通常对iPhone和iPad要出两个不同的版本,因为要针对iPhone和iPad两种终端的不同分辨率、屏幕尺寸分别适配
-
iOS App的安装包后缀为.ipa
-
-
Android App
-
安装在Android操作系统上,主要是Android手机和Android平板
-
同一款应用,通常对Android手机和Android平板要出两个不同的版本,因为要针对Android手机和Android平板两种终端的不同分辨率、屏幕尺寸分别适配
-
Android App的安装包后缀为.apk
-
-
-
从技术实现上,目前主流的App可以分为原生App、混合App和Web App两种类型:
-
原生App
-
原生App又称Native App,就是利用Android、iOS平台官方的开发语言、开发类库、工具进行开发。比如安卓的Java语言,iOS的Object-c语言。在应用性能上和交互体验上应该是好的。原生App需要针对Android和iOS平台开发两套不同代码,成本高。
-
-
Web App
-
指的是移动端的Web浏览器,主要借助H5网页技术进行开发,相当于开发一个网页,然后分别生成Android和iOS的壳。这种App只需要一套编程开发语言,技术简单,人力少,周期短。缺点是用户体验相对差。
-
-
混合App
-
混合App又称Hybrid App,是介于原生App和Web App之间的一种App形式。
-
uni-app是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等14个平台。
-
了解uni-app:uni-app官网
目前国内基本只有大厂还在玩原生App,中小企业以混合App为主。
-
-
三、App应用商店
-
常用的App应用商店:
-
App Store:苹果应用商店,所有非越狱的苹果设备,只能从App Store上下载App
-
Google Play:谷歌应用商店,国外的智能手机默认使用的应用商店
-
App Gallery:华为应用商店,华为手机和平板使用的应用商店
-
小米商店应用:小米手机和平板使用的应用商店
-
OPPO软件商店:OPPO手机使用的应用商店
-
百度手机助手、360手机助手、腾讯应用宝、豌豆荚等其它应用商店,中国有超过400个Android应用商店。
-
-
注意:凡是在以上商店能下载的App都是正式版本,测试版本不可能从上面去下载。
四、B/S架构与C/S架构
B/S架构:
C/S架构:
-
B/S:浏览器/服务器,用浏览器去打开的系统;C/S:客户端/服务器,客户端又分手机客户端(App)以及PC客户端
-
B/S架构下核心的业务处理在服务端完成,C/S架构下可以将业务合理地分配到客户端和服务器端来实现
-
C/S能更好地利用客户端设备的处理能力,具有更好的用户体验,响应速度更快,安全性也更高
-
在开发、测试时,B/S需要考虑兼容不同的浏览器(内核),C/S需要兼容不同的操作系统版本及设备,前者相对开发周期更短,共享性更强;因为iOS和Android系统的差异,iOS App和Android App的开发语言是不一样的,对开发人员的能力要求也是不一样的,需要不同的开发人员分别开发出iOS App和Android App两套开发包,同时因为Android系统的碎片化严重,Android App在开发测试阶段需要花费大量的精力适配不同厂家的系统及设备,最后因为手机和平板的尺寸不一样,还需要分别出手机版和平板版(HD)两个版本。
-
所有浏览器,按内核分,有如下几种内核:
-
Apple Webkit(谷歌内核):Chrome、Safari、Edge、QQ浏览器、360极速版、世界之窗等
-
Gecko(火狐内核):Firefox
-
Trident(IE内核):IE、360兼容版
-
-
-
从维护的角度,C/S工作量会更大,因为B/S的升级只需要在服务器上升级即可,C/S的升级往往需要同时升级服务器端和客户端;iOS和Android系统有重大更新的时候会需要开发者同步更新App以适配最新的操作系统。
五、 iOS App与Android App的区别
-
开发语言(原生应用):iOS App用object-c开发,对应的是iOS开发工程师;Android App用Java开发,对应的是Android开发工程师;
-
上架(商用上线)的市场:iOS App是统一上架到苹果的App Store,苹果设备只要没有越狱,只能从AppStore上下载app安装;Android app是上架到各个手机厂家的应用市场上,比如谷歌的Google Play,华为的App Galary等等;
-
在做兼容性测试时,Android App会更复杂;
-
iOS是一个相对封闭的操作系统,是苹果基于Unix内核深度定制的一个移动设备操作系统;Android是一个开放的操作系统,谷歌会定期发布基线版本,各个手机厂家会在基线版本的基础上再进行本地化定制,结果就导致Android系统出现很多分支(碎片化),导致Android App对不同分支版本的适配难度会更大;
-
AppStore对应用的审核会更严格,所以iOS APP会相对更安全;
-
Android App的包后缀是.apk,iOS App的包后缀是.ipa;
-
MyCamera.apk:Android手机版App
-
MyCameraHD.apk:Android平板App
-
MyCamera.ipa:iPhone手机版App
-
MyCameraHD.ipa:iPad版App
-
六、App的测试点
(一)功能测试、
(Web和App都要重点考虑的)
就功能测试而言,App测试和Web测试没有区别,都是基于软件的功能性需求编写测试用例,设计测试用例的方法都可以采用场景分析、等价类、边界值、错误猜测等。写好用例之后先安装环境,然后执行用例,对发现的问题提交Bug单跟进解决。
(二)兼容性测试
(Web和App的侧重点不一样)
兼容性测试顾名思义就是,要确保App在不同场景下的正确性。App和Web的兼容性测试侧重点不一样,Web需要兼容不同内核的浏览器(Chrome、Firefox、IE等),App需要兼容不同版本的操作系统(iOS14、iOS15、Android10、Android11、Android12、鸿蒙OS等)、设备尺寸、屏幕的类型(曲面屏、折叠屏、刘海屏、挖孔屏、全面屏)、分辨率、网络环境、语言等。
测试方法:在不同的设备上进行安装、启动、运行、卸载测试,需要大量的测试设备才能做好兼容性测试。
兼容测试的难点:设备类型太多,iPhone目前有20多款设备,Android手机就更多了,Android碎片化严重,想要做充分的兼容性测试,成本很大。
测试设备来源:公司自己买测试机、公司租手机、用员工的手机、WeTest云测平台(附上链接:腾讯WeTest,品质成就未来,收费的,介意勿扰)等。一般采用真机来测试,如果实在找不到真机,有的时候也用模拟器来模拟。
(三) 安装、卸载、升级测试
1.安装测试
-
安装方法:
-
对Android App来讲,可以直接把apk发到手机上下载并安装;
-
通过adb(安卓调试桥)命令安装(仅限于Android App):adb install xxx.apk;
-
通过爱思助手等工具安装(iOS App和Android App都可以);
-
-
测试点:直接安装能否安装成功,卸载后再次安装能够成功,安装的App能否正常启动
-
注意事项:
-
通过助手工具连接iOS设备前,需要先在电脑上安装iTunes工具
-
安装iOS App,一般需要先把测试手机的UDID获取到(每个手机都不一样),由开发写入到App的配置文件中再打包,这时得到的App才可以在测试设备上安装
-
2.卸载测试
-
卸载方法:
-
在手机上直接卸载
-
通过adb命令卸载:adb uninstall 包名
-
通过助手工具卸载
-
-
测试点:App能够卸载成功,卸载后是否可以再次安装
3.升级测试
-
基本方法:先安装老版本,再安装新版本,看是否能安装成功并覆盖老版本。
-
App的升级方案
App的升级方案有在线升级和离线升级两种,其中在线升级又分为强制升级和非强制升级。
-
在线升级:当应用商店已经有新版本时,提示更新,用户点击更新,下载最新版本,进行安装升级,这种就是在线升级;
-
强制升级:强制更新就是当检测到有新版本时,弹出提示,这个提示框没有关闭按钮,只能更新,一般需要强制更新的版本,主要是功能模板改动较大,或业务比较重要,和功能模板存在风险等;
-
非强制升级:非强制更新就可以让用户选择是否现在更新或以后更新,旧版本的功能正常使用。
-
-
离线升级:不从线上下载升级包,通过线下的方式安装升级包进行升级,这种就是离线升级。
-
-
升级场景设计:
-
第一个版本:用户只有新安装的场景
-
第二个版本:用户有新安装的场景、也有从第一个版本升级到第二个版本的场景
-
第三个版本:用户有新安装的场景、也有从第一个版本升级到第三个版本的场景、也有从第二个版本升级到第三个版本的场景
-
版本越多,跨版本升级的场景也越复杂,一般也不可能把所有场景都验证一遍,通常的做法是分析生产环境的数据,看绝大部分用户都在哪几个版本上,重点考虑从这几个版本升级到新版本的场景。如果App做了强制升级的方案,这种情况下用户的版本就比较新,升级的场景也更简单。
-
-
测试方法:
-
通过手机助手软件或者命令,先安装升级前的老版本,再安装新版本,看能否正常地覆盖升级,以及升级后功能是否正常,数据是否有丢失,版本号是否正确;
-
为尽可能模拟真实的用户场景,可以把升级包部署在一个http服务器上(升级服务器),手机通过浏览器打开这个服务器的URL下载新版本,模拟用户从应用商店下载升级的过程。
-
(四)弱网测试
一方面App的网络环境复杂,包括2G/3G/4G/5G/WiFi等,另一方面App的使用场景多变,用户可能在各种场所使用App,包括网络较差的场景(延迟、丢包、抖动等),如果App没有对各种网络异常进行兼容处理,那么用户可能在使用中遇到APP闪退、ANR(应用无响应)、数据丢失等问题。
测试方法:通过工具模拟弱网的场景进行测试,比如QNET。
(五)App压力测试
Android App可以通过monkey命令来做压力测试。
(六) UI易用性测试
-
检测界面是否美观,操作是否简单易用,是否符合用户的操作行为,产品是否有相关的帮助文档,FAQ(常问问题)等
-
参考:UI设计图,检查系统的实现是否与UI设计图一致。
(七) 交叉事件测试
交叉事件测试也叫中断测试,是指App执行过程中,有其它事件或者应用中断当前应用执行的测试。比如在App使用过程中出现来电、来消息、响闹钟、弹出电量低、打开其它App等其它事件,验证当其它事件出现的时候,是否会中断当前App的事件。
交叉测试一般采用手工测试的方式在真机上进行。
(八)耗电量测试
-
目的就是检查App的耗电是否过高,电量消耗跟CPU有关系。
-
可以通过手机的电池统计来查看App的耗电情况,也可以通过adb命令来查看,还可以通过第三方工具PerfDog(性能狗)、GT等来检查耗电情况
(九) 流量测试
-
流量测试,指的是监控App的流量使用是否合理,目的是优化App的流量使用,比如有些数据需要缓存到客户端上来避免过多地消耗流量。
-
有很多方法可以获取App的流量,比如对于Android系统,网络流量信息通常存放在/proc/net/dev目录下,可以直接利用adb工具获取实时的流量信息。另外,推荐一款Android的轻量级性能监控小工具Emmagee。对于iOS系统,可以使用XCode自带的性能分析工具集中的Network Activity,分析具体的流量使用情况。
-
推荐:使用PerfDog(性能狗)可以很方便地监控App的流量。
(十) 边界测试
边界测试是指,移动App在一些临界状态下的行为功能是否正常,基本思想是找出各种潜在的临界场景,并对每一类临界场景做验证和测试。比如:
-
手机提示内存空间不足
-
飞行模式来回切换的场景
-
App 不具有某些系统访问权限的场景,比如 App 由于隐私设置不能访问相册或者通讯录等
-
长时间使用App,系统资源是否有异常,比如内存泄漏、过多的链接数等
-
出现ANR的场景(网络差、操作频繁、手机上起的应用过多、不同App之间切换等)
-
操作系统时间早于或者晚于标准时间的场景
-
时区切换的场景 GMT
-
等等......
面试题:Web测试和App测试有什么区别?
功能测试方面,Web和App没有区别,App有一些专项的测试:安装、卸载、升级,兼容性(关注的点不一样),弱网,交叉事件,耗电量,流量,边界测试,压力测试(关注的点不一样)等。