随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP兼容性测试成为测试质量保障必须要考虑的环节。
APP兼容性的测试主要包含系统兼容、产商ROM 兼容性、屏幕分辨率兼容、网络兼容、其他兼容性几个大类,下面对测试方法逐一进行详细的说明。
一 APP兼容性类型
1系统兼容
app系统兼容涉及Android和IOS系统,其中Android系统又分了不同的系统版本,IOS又分不同的系统版本。不同的系统、不同的系统版本都有不同的特征,不同的API,意味着都有可能产生各种各样的兼容问题,所以需要进行兼容覆盖。
Android系统版本分布及市场占有率如下

针对 Android,主要考虑 7.x,8.x,9.x,10.x。
IOS 系统版本分布及市场占有率如下:

针对 IOS ,主要考虑 12.x、13.x、14.x。
2 厂商ROM 兼容性
Android和IOS 都有不同的手机设备,相比而言, Android 系统源码是开放的,只要遵从相应的协议,就可以对源码进行修改,国内厂商就把基于 Android 源码改造成自己对外发布的系统,比如我们熟悉的小米手机 Miui 系统、Oppo 手机 ColorOS 系统等,由于每个厂商都修改过 Android 原生系统源码,这里面就会引发一个问题,那就是著名的Android 碎片化问题,本质就是不同 Android 系统的应用兼容性不同,哪怕是搭载完全相同的硬件,不同品牌的手机在运行速度、软件兼容上都会有区别的。
Android 平台的品牌及型号排名:

IOS 平台的型号排名:

3屏幕分辨率兼容
继全面屏手机推出后,目前手机的分辨率真的是五花八门,刘海屏、水滴屏、挖孔屏,还有折叠屏等等。从分辨率尺寸来说也有数十种之多,不同分辨率的设备上呈现出来的效果也不尽相同,如果没有进行适配,可能就会给用户带来很糟糕的体验。
Android的主流分辨率为:1080P继续占据主流;
Android主流尺寸是 6.x 英寸;
iOS 的主流分辨率为:828*1792, 1125*2436, 1242*2208 等;
iOS主流尺寸为 5.5~6.5 英寸。
4网络类型
保证各种网络环境能够覆盖,包括WiFi、3大运营商的2G和3G、4G网络、5G网络,有鉴权的wifi和无鉴权的wifi。
按运营商分:电信、移动、联通
按网络模式分:2G、3G、4G、5G、WiFi
按接入点分:wap、net
一般APP网络的兼容主要是针对IPV6网络兼容、弱网兼容、wap和net接入、不同地域(地理位置)的运营网络、有鉴权的wifi和无鉴权的wifi、代理类wifi。
5其它兼容
数据兼容性(不同版本间的数据兼容);
蓝牙设备兼容性测试 (如果是一款使用蓝牙的应用);
存储卡兼容性测试(比如文件管理器);
第三方软件兼容冲突(比如输入法冲突)。
二APP兼容性如何开展?
1需求阶段
需求分析阶段,测试童鞋需要和开发、产品、设计师根据需求的场景、历史运营用户数据、市场占有率数据讨论及确定好当前版本需求兼容的系统、系统版本、厂商、屏幕分辨率、网络等的适配方案。
2测试设计阶段
根据当前市场和线上运营用户的各系统版本、厂商的使用率,结合移动设备分辨率的特性,得出APP的兼容测试矩阵,下图仅供参考。

3测试执行阶段
①测试过程中根据兼容测试矩阵在不同测试轮次中切换不同的测试机进行测试并记录。
②有条件的同学可以搭建STF平台进行组内测试机设备管理平台,所有兼容测试工作可以在PC端远程控制真机完成,省时又省力,还能做到测试组内手机共享使用,减少沟通成本。
③利用业内已有的云测平台进行兼容测试:
目前基本上大的云测平台都有推出首次免费或者日首次免费的随机安装启动标准兼容服务,免费的一般只能做50~100款机型。如果要做全面的机型覆盖和深度兼容则需要付费了,而且目前各大云测平台的收费较高,如果要全面覆盖所有机型的话,是笔不小的开销。
如果测试的app属于受众广泛,运营效果不错,月活过亿的,用户千万、亿级用户的比如微信,qq,支付宝类型的,那么就很有必要投入金钱或者组织人力搭建云测平台进行全面的机型覆盖。
如果测试的app受众用户只有不到万,日活月活很低的产品比如中小银行app、房产交易app,个人认为没有必要投入大量的金钱去兼容全部的机型。但是可以利用云测平台去复现线上用户个别未覆盖机型所遇到的bug,拿到日志和解决方案,这样投入的成本相对小且有针对性。
如果测试的app受众介于以上两者特征之间的,而且效益也不错,月活日活也能达到上万的例如一些理财产品APP、证券类app、电商app,则可以对目前app当前市场各版本和品牌的使用率,获取当前APP用户覆盖的top n款手机,在云测平台进行top n款手机的覆盖测试。
实际上,目前很多的公司,已经提供了兼容性云测服务,例如Testin、TestBird,除此,大型公司也对外推出自己的测试工具,比如谷歌、腾讯WeTest、百度MTC、阿里MQC等等,其实不乏一些付费项目。
4线上阶段
①当通过人工或自动手段完成 APP 兼容性测试,并产品上线后,会收到用户反馈的兼容性问题。依据反馈问题,需补充该兼容性测试场景的用例,用于后续版本测试。
②APP上线发布市场后,可以通过crash平台、bugly等监控平台收集因兼容问题导致的闪退和无法安装、运行的错误信息传到后台服务器端,然后开发根据错误日志进行定位,从而找出问题原因并解决。
③测试及开发童鞋需要对主流手机及ROM更新保持较高的质量敏感性,时刻关注厂商升级资讯和特性,一旦有更新,需要测试线上APP兼容适配情况,快速应变,及时适配到主流机型和ROM。
原文链接:
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为