前言
随着软件逐步被推向市场,被更多的用户安装,兼容性问题也日益凸现出来了,它是衡量软件好坏的一个重要指标,是一项必须要进行的测试项目。但因为有不同的机型、系统平台、分辨率、网络、厂商、数据兼容等不同兼容问题场景需要进行覆盖,软件兼容性覆盖测试一直以来是一个高成本、耗时低效、耗人力的测试工作。
一、认识兼容性测试
(一)什么是兼容性测试?
兼容测试(Compatibility Test Suite ),简称CTS ,是指测试软件在特定的硬件产台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境中是否能很好地运行测试。一般来说,兼容性指能同时容纳多个方面,在计算机术语上兼容是指几个硬件之间、几个软件之间或是软硬件之间的相互配合程度。
说白了,兼容性测试是指测试某新开发的软件在某一特定环境下与各种软件的协调性,软件之间能否很好的运作。例如,待测试软件在同一个操作系统平台的不同版本、不同的操作系统平台上是否能很好的运行,待测软件是否能与相关的其他软件和平共处,会不会有相互不良的影响,待测软件是否能在指定的硬件环境中正常运行,软件和硬件之间能否发挥很好的效率工作,会不会影响或导致系统的崩溃待测项目是否能在不同的网络环境中正常运行
(二)什么是App兼容性测试?
APP兼容测试即移动端的手机客户端的兼容测试。移动终端的碎片化特征使APP测试者为了保障不同系统及版本、不同网络制式、不同分辨率和厂商(不同深度定制的ROM)、不同版本都能够有很好的用户体验而面临巨大挑战,所以APP兼容性测试也是测试质量保障任务中的重要环节。
二、兼容性测试包括什么
在移动开发中兼容性测试常常需要涉及到到品牌机型、ROM、芯片、屏幕分辨率、软件、版本、网络、地域等等众多维度。
(一)操作系统兼容
app系统兼容涉及Android和IOS系统,其中Android系统又分了不同的系统版本,iOS又分不同的系统版本。不同的系统、不同的系统版本都有不同的特征,不同的API,这意味着都有可能产生各种各样的兼容问题,所以需要进行兼容覆盖。
根据不同的系统版本具体分布及市场占有率来确定是否对该版本进行测试,份额小且适配难度高,越来越多的开发者选择了放弃对旧版本的支持,如果目前项目APP的开发者已不支持旧版本兼容尤其是Android4.4之前的,那么测试也可以选择放弃对该类型版本的兼容。
(二)屏幕兼容
在不同分辨率、尺寸的设备上,很容易出现字体异常、UI样式异常、换行错位等UI问题,所以需要测试程序在不同尺寸和不同的分辨率下能否正常显示。
系统版本 | 分辨率(宽*高) | 尺寸(英寸) | 具体机型 | 屏幕形状 |
---|---|---|---|---|
14.0 | 1080*2400 | 6.73 | 小米14pro | 打孔屏 |
13.0 | 1916*2160 | 6.78 | vivo X Fold2 | 折叠屏 |
13.0 | 1260*2800 | 6.78 | iQOO Neo8 | 打孔屏 |
12.0 | 1080*2400 | 6.81 | 小米11 | 打孔屏 |
12.0 | 1080*2400 | 6.67 | 荣耀70 | 打孔屏 |
11.0 | 1080*2340 | 6.6 | 魅族17 | 打孔屏 |
11.0 | 1080*2376 | 6.67 | 荣耀 X20 | 打孔屏 |
10.0 | 1080*2400 | 6.4 | OPPO R17 | 水滴屏 |
10.0 | 1080*2240 | 6.1 | 华为 P20 pro | 刘海屏 |
(三)厂商兼容
Android和IOS都有不同的手机设备,苹果几乎每年会进行一次换代。
相比而言, Android 系统源码是开放的,只要遵从相应的协议,就可以对源码进行修改,国内各个厂商就把基于 Android 源码改造成自己对外发布的系统,比如我们熟悉的小米手机MIUI系统、华为手机HarmonyOS系统、Oppo 手机 ColorOS 系统等(只有谷歌Nexus和Pixel系列才是原生系统,但是目前国内很少人用)。
由于每个厂商都修改过 Android 原生系统源码,这里面就会引发一个问题,那就是著名的Android 碎片化问题,本质就是不同 Android 系统的应用兼容性不同,哪怕是搭载完全相同的硬件,不同品牌的手机在运行速度、软件兼容上都会有区别的。
(四)网络兼容
保证各种网络环境能够覆盖,包括WiFi、4大运营商的2G和3G、4G、5G网络、有鉴权的wifi和无鉴权的wifi
按运营商分:电信、移动、联通 、广电
按网络模式分:2G、3G、4G、5G、WiFi
按接入点分:wap、net
在目前4G,wifi盛行的时代在非视频游戏类APP测试中网络兼容显得没那么重要。一般APP网络的兼容主要是针对IPV6网络兼容、弱网兼容、wap和net接入、不同地域(地理位置)的运营网络、有鉴权的wifi和无鉴权的wifi、代理类wifi。
三、兼容性测试的方法
(一)人工测试即全手工测试兼容
测试工作量大,而且覆盖不全
(二)借助第三方兼容性测试工具
工作量小,但是在主功能和主流程测试的时候没有侧重点,很难发现一些隐藏的问题。
这两种方法适当的结合是比较好的兼容性测试方法。
四、制定测试策略提升兼容测试效率
APP兼容性测试需要覆盖的维度就有那么多,每个维度可以继续分裂,兼容性测试关注点如此之多,不可能在测试阶段每个机型每个系统版本网络等进行逐个覆盖,那么怎么在既保证质量的同时,又提高测试效率呢?下面将会从测试需求阶段到上线监控阶段的测试全流程中,讲解每个测试环节应该制定怎样的测试策略来提升兼容性测试效率。
(一)需求阶段
测试越早介入,测试的成本就越低,兼容性测试也是如此。
需求分析阶段,测试需要和开发、产品、设计师根据需求的场景、历史运营用户数据、市场占有率数据讨论及确定好当前版本需求兼容的系统、系统版本、厂商、屏幕分辨率、网络等的适配方案,这样测试在需求阶段确定好需要裁剪的系统,系统版本、分辨率兼容。
例如:
系统版本兼容覆盖上:如果Android4.4以下市场占有率极低,份额小且适配难度高,目前项目APP的开发者已不支持旧版本兼容Android4.4之前的,那么测试可以在需求阶段和产品、开发确认选择裁剪对该类型版本的兼容。
版本差异兼容覆盖上:需求阶段和产品、开发了解程序底层交互及接口调用,结合本次适配测试重点,就能知道着重检查哪些页面和交互,原则上如果版本之间差异无前端UI和交互变动,则可以裁剪该版本的兼容覆盖。
屏幕分辨率及尺寸:与开发or设计师讨论在不同的分辨率下系统的适配方案,对已不支持不适配的分辨率和尺寸进行裁剪。
(二)测试设计阶段
1、组合交叉矩阵测试设计
通过做一些调研,当前市场和线上运营用户的各系统版本、厂商的使用率,结合移动设备分辨率的特性,得出APP的兼容测试矩阵,减少用例的重复设计和冗余。
2、根据具体测试场景进行兼容测试用例设计
兼容性测试关注点有很多,有效的方法是根据测试项或者系统版本的特点、场景实现角度可以对明显差异的内容选择性进行测试设计,减少不必要的兼容覆盖设计。
具体场景特征角度举例如下:
(1)类似图片上传、ocr识别、人脸识别这种与摄像头、手机相册与手机系统应用交互的场景需要考虑系统权限和系统厂商的特征兼容,所以如果有相关需求场景的在测试设计时需重点考虑厂商、系统版本的兼容
(2)类似UI元素密集或图片上传场景,则与分辨率强关联,在测试设计时该类需求需重点兼容屏幕分辨率维度
(3)类似视频播放、数据上传下载、需要实时进行数据刷新的场景则与网络强关联,网络的强弱会很影响用户体验,在测试设计时该类需求需重点考虑网络的兼容(与网络兼容强关联)
从功能实现角度举例如下:
(1)类似页面数据获取,按钮跳转不涉及网络请求后端服务的,直接从本地数据库获取数据来实现的功能则可以直接考虑裁剪网络兼容测试设计
(2)类似PUSH测试等无UI设计的功能则可以考虑直接裁剪屏幕分辨率、尺寸的兼容测试
(3)类似通过webview页面展示的功能,例如webview在Android4.4以后有http与https的安全认证方式的区别,默认不保存cookie的区别,那么针对类似用webview实现的页则需要重点考虑系统版本的兼容设计
从系统版本,厂商特征角度举例如下:
(1)android 6.0以上的部分危险权限需要通过运行时动态申请。所以涉及权限相关功能如定位功能、相机使用,相册调用功能、存储权限、读取通讯录、读取sd卡等功能运行使用时的权限对话框均需要进行系统6.0以下和6.0以上版本兼容测试设计
(2)android8.0通知栏的机制有较大的变化,需要特别留意通知栏、消息推送、通知弹窗、悬浮窗等的兼容测试设计
(3)ROM有特殊定制功能例如典型的三星,vivo和oppo的权限管理问题
所以不同手机ROM和framework不一样都会导致兼容问题出现,测试需要去分析各个厂商ROM存在哪些不同以及系统在使用过程中的调用方式,对差异性进行评估,然后针对性去设计兼容测试场景
(三)开发阶段
1、在开发阶段,可以推动开发同学在代码里面打埋点,从而去获取当前APP线上用户覆盖的top n款手机数据,为后续版本兼容测试设计提供数据依据
2、加强代码扫描:通过Lint、sonar工具进行静态代码扫描去提前发现因厂商、API不适配的兼容问题
3、加强开发代码评审,包括基础框架的代码和各业务代码
(四)SIT测试阶段(集成测试阶段)
由于在测试前期,我们已经做好兼容测试的部分裁剪确认工作和兼容测试设计工作、以及静态代码扫描工作,所以在SIT测试阶段,兼容性测试工作就会轻松不少。到了SIT测试阶段,就是一个测试执行的过程,测试执行也有相应的测试策略
1、兼容测试执行只要开发提测准入通过了就可以开始进行,测试可以在测试过程中根据兼容测试矩阵在不同测试轮次中切换不同的测试机进行测试并记录。
2、根据二八原则,在做功能测试时先拿历史常出问题机型进行测试覆盖。
3、几轮测试下来,不停切换手机,安装测试包进行测试也是一件繁琐的事,另外测试机可能还存在非空闲情况,有条件的同学可以搭建STF平台进行组内测试机设备管理平台,所有兼容测试工作可以在PC端远程控制真机完成。
4、利用业内已有的云测平台进行兼容测试
如果测试的app属于受众广泛,用户千万、亿级用户的比如微信,qq,支付宝类型的,那么就很有必要投入金钱或者组织人力搭建云测平台进行全面的机型覆盖。
如果测试的app受众用户只有不到万,日活月活很低的产品没有必要投入大量的金钱去兼容全部的机型。但是可以利用云测平台去复现线上用户个别未覆盖机型所遇到的bug,拿到日志和解决方案,这样投入的成本相对小且有针对性。
如果测试的app受众介于以上两者特征之间的,而且效益也不错,月活日活也能达到上万的,则可以对目前app当前市场各版本和品牌的使用率,获取当前APP用户覆盖的top n款手机,在云测平台进行top n款手机的覆盖测试
(五)UAT测试阶段(用户验收测试)
通过组织UAT测试,利用用户或者业务人员的测试能力和测试资源,在短时间内完成大工作量的产品测试和体验,从用户体验的角度出发,反馈兼容Bug,并对产品提出改进建议。
(六)线上阶段
1、APP上线发布市场后,可以通过crash平台监控平台收集因兼容问题导致的闪退和无法安装、运行的错误信息传到后台服务器端,然后开发根据错误日志进行定位,从而找出问题原因并解决。
2、另外,测试同学应该对这次版本不管是测试过程中还是上线发布市场后发现的兼容问题,做问题分析总结,反馈补充兼容测试用例和测试场景,加强测试后续版本的测试手段。
3、测试及开发同学需要对主流手机及ROM更新保持较高的质量敏感性,时刻关注厂商升级资讯和特性,一旦有更新,需要测试线上APP兼容适配情况,快速应变,及时适配到主流机型和ROM。
五、兼容性测试平台
腾讯的Wetest
美团的云测平台
百度众测平台和云测平台