jszy 2020-06-09
随着移动设备的普及和使用范围越来越广,APP的性能测试变的越来越重要。比起之前的性能测试,APP性能测试有着自己的特色和KPI,难度也随之增加。
APP的自动化测试工具发展跟不上设备的发展速度,虽然有不少工具提供了设备模拟器来运行程序,但是和真机测试有较大差异,基本只能作为功能性测试使用。好消息就是,有些厂商提供了在线的真机自动化测试方案。
和传统测试的差异
1. 移动站点:和传统的只是一个普通的手机站不同(WAP站),随着HTML5的兴起和智能设备开放的传感器接口,移动站点很多时候很像一个APP,但依然使用的是HTTP或者HTTPS协议,从协议来说,很多测试和之前的WEB测试差异并不大。
2. 本地化APP:APP的测试最为复杂,虽然开发环境如DDMS XCODE都自带有一定性能测试测试功能,但主要是单APP运行时的性能测试,是在并发、压力等方面薄弱,且因为移动测试远不如传统测试发展的时间长,因此很多专项工具很匮乏,需要自动开发或者借助传统性能测试工具实现。
3. 混合型:APP加移动站的形式实现,很多移动端并不是单独的APP或者移动站点,而是混合使用,比如LINKEDIN的APP,本地化APP用来做UI,大量的内容是以移动站的形式放到云端, APP向网站请求网页数据,然后在APP端展现给客户。测试这类APP的时候,更为复杂,因为需要同时测试移动站和APP的。
移动测试分类:
系统分类
黑莓:小众类,非特殊原因,国内一般不需要测试
IOS:重要的分类
Android:重要分类
WINDOES PHONE:此OS依然属于小众,市场占用率低。
测试项分类:
我们暂不讨论和传统性能测试重叠的部分
- 电量消耗测试:当下智能设备的电池依然是瓶颈,一般手机只能支撑1天左右的使用,加之现在各种电源消耗监控软件,一个耗电量高的APP非常容易被用户投诉或者流失用户。即便是QQ,曾经也因电量问题,而遭到用户的大量抱怨,因此电量消耗测试必不可少。较为简单的电量测试方法,用很干净的手机,将第三方APP全部卸载,后台不要运行其他程序,从充足的100%电量开始测试,监测电量消耗。
- 网络测试:一般大家更多在关注APP的健壮性、服务器的负载能力、各手机系统兼容性、电池等,同时也要重视手机网络下的数据传输,这个很影响用户体验。网络的不稳定容易导致一些问题,如:
- 程序未知异常:如程序无响应,异常退出、程序未处理的网络异常、前后不一致。
- 交互异常:如图片显示不完整、信息显示不全、、传输超时、信息显示错乱等.
- 数据库异常:客户端和服务器传输信息时,如果不注意保证两边存储的信息一致性,就很容易导致数据不一致,导致异常。
- 性能测试难度大:数据传输异常时,需要花费时间进行异常数据处理,因此丢包、抖动、有限的带宽,对性能影响很大。性能测试就需要在各种网络环境下进行测试。
- 功能问题:网络传输的异常可能会导致客户端和服务器的不一致问题,如UI和数据,这些会导致功能问题。
随着4G的发展,移动设备大多通过蜂窝网络(手机网络)进行联网,虽然WIFI已经非常普遍,但是并不是随时都拥有WIFI信号。
手机网络基本分为:WAN 无线WAN WIFI 2G GPRS 3G 4G 运营商分为:电信 联通 移动, 网络特点:
移动网络特点:有高延迟、抖动、丢包、包错误、包重排序等特点。
信号不稳定:信号覆盖存在死角问题,有些区域信号覆盖不到或者很差,比如地铁、电梯、公司或家里的特定地点,这就导致连接会随时中断。
传输时数据丢失:通过手机网络传输时,容易遇到网络阻塞等问题从而导致数据丢失,即使使用TCP/IP,数据丢失依然影响用户的使用体验。如果处理不好数据丢失问题,很容易造成一系列用户体验问题,比如无响应、功能失常等问题。
带宽窄:4G以下一般都存在网络速度慢的问题,4G的信号覆盖也存在不稳定问题,经常被切换到3G, WIFI一般被多人连接和共享,因此并不是WIFI速度就会很快。
连接不可靠(蜂窝网络在打电话的时候大多会断网,而电话随时又都可能进来,加之很多人在行进的时候使用手机,因此信号存在不稳定,从而导致连接的不稳定),
速度不稳定、高延迟(2G和3G网络非常慢,但是使用者很多,4G虽然快,但是4G信号的覆盖存在问题),因此性能测试时,对网络的测试非常重要。双11天猫的顺利运行,其负责人就说,他们保证了网络很差的情况下,依然保持了浏览的顺滑。
3. 移动的网络问题存在,如果移动端不使用异步设计,不谨慎考虑网络问题,很容易导致性能和使用体验的滑铁卢。如果用户感觉到没有及时得到响应,很可能不是继续等待信息,而是重新请求,很容易导致服务器指数倍数的增加负载,造成恶性循环。
网络仿真测试很难克服的困难(这些困难也是性能测试的挑战):
- 真实网络出现问题时,因为当时网络环境很复杂或一些信息没有记录完整,导致问题很难复现
- 难以完整搭建出类似真实网络的测试环境。
- 无法完整覆盖真实网络中的各项网络设置。
- 测试人员无法真实在各地进行真实网络测试。
测试项 测试内容
网络性能测试 模拟真实网络的环境,如随时波动的带宽(网速)、网络类型(WIFI/3G/GPRS/4G/EDGE,还有中国特色的跨网),注意用户在各种网络下的使用体验
网络阻塞测试 APP应该测试各种业务场景下的数据包丢失,特别是重要的场景
多网络测试 使用手机时,很可能不断的在各种网络环境切换,如在使用APP时,在3G/2G/4G/WIFI网络之间进行切换
真实环境测试 应该尽量在真实环境中进行覆盖测试
使用工具:各公司一般使用工具不同,简单的如linux的“tc”命令,微软的模拟器(Network Emulator for Windows Toolkit),具体使用方法请自行查询资料, 复杂的有网络模拟器,如infosys的Windtunnel 以及FACEBOOK的网络流量控制工具ATC “https://github.com/facebook/augmented-traffic-control“,以后有时间的时候 进行具体介绍。
移动端性能测试准备:
测试移动端性能之前,我们要先将要测试的内容进行抽象,抽象出两大类
1. 设备相关测试:虽然IT行业很重视跨平台、跨浏览器,但有些功能是需要强设备相关的,比如指纹、支付等。设备品牌不同、型号不同、OS版本不同、浏览器不同,其结果就可能不同。这对于性能测试是个很大挑战。
2. API测试(设备无关,抽象成API测试):APP使用API相互之间、和服务器之间进行交互,性能测试时,对这些API提取出来,并根据测试场景,分析其使用方法和压力情况,设计出合理的性能测试方法。API的性能测试和传统的API性能测试较为雷同。
测试设计
依据是否关注在移动端在真机的性能表现分为:监测APP在真机性能和不监测APP在真机性能。
1. 不监测APP在真机性能:一般来说是需要监测APP在真机性能,但并不是全部的,上面我们有说过,有些是网页形式的,这时主要是测试移动WEB网页的性能, 而不是APP真机性能。
移动站点:测试移动站点的时候需要使用浏览器,但是浏览器和电脑的浏览器不同,需要使用移动浏览器来测试,中国市场的移动浏览器主要为:UC QQ 百度 360 谷歌浏览器, 海外市场的占有率请自行查资料。
测试移动站时,需要模拟移动浏览器,服务器是依靠HTTP请求头的”User-Agent”字段值来区分浏览器类型, 不同的浏览器其User-Agent是不同的, 有的测试工具可以自定义此字段值, 可以通过自定义此字段值来模拟各个浏览器.
移动APP: APP的各项功能都是一个个函数组成的, 将APP的功能抽象到API中, 通过脚本调用API来实现性能测试.
2. 监测真机性能: 测试并发和负载的真机性能时,不可能使用大量的真机进行测试, 我们可以使用少量真机并配合自动化脚本. 用自动化测试脚本调用API或HTTP请求,形成大规模测试, 再使用少量真机访问服务, 记录KPI数据,并观测其反应. 各IDE和OS都提供了基本的一些性能检测功能, 能够满足一般的性能需求。