• 0
  • 2
分享

1、移动端性能监测的主要途径

移动端性能监测的主要途径有三种:一是开发工具自带的监测工具,例如xcode自带的instrument,Android studio自带的Android monitor;二是使用第三方SDK;三是自行开发检测代码。三种途径各有利弊。

开发工具自带的监测工具,包含了很多强大的监测功能,且持续迭代更新,使用方便,为开发阶段的性能测试提供强有力的支持。但是只能在开发工具内部使用,不能独立使用在其他产品周期内。

专门用于性能监测和用户行为、属性分析的第三方SDK,比如Bugly,OneAPM,听云,Firebase,把它们接入项目可以进行性能监测,这些第三方的工具工作原理都是类似的:引入SDK和相关库,在程序入口处启动监测在关键函数之前和之后自动埋点记录上报。然而使用第三方SDK的缺点也是非常明显的,首先是可定制性差,我们需要的一些指标无法收集,SDK收集的我们又不完全需要,很有可能为了简单的几个值,让安装包增大许多。除性能指标外,SDK是否统计了其他数据,我们并不完全知道,涉及到安全性问题。

自行在项目中植入监测代码的优势就是安全可靠,并且可定制化指标,有针对性。缺点就是需要开发成本,而且在代码中监测App的性能本身可能也会带来额外的性能损耗。

2、移动端核心性能指标

App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。

衡量一个App的性能有很多方面的指标,不同App的特征会有不同的侧重指标。其中,核心的性能检测指标(普遍会监测的指标)有

  • 内存占用量(MEM)

  • CPU使用率(CPU)

  • 页面刷新帧率(FPS)

  • 网络状况(Net)

  • 流量消耗(Flow)

  • 卡顿(Flag)

  • 崩溃(Crash)

  • 启动时间

3、不同迭代周期对移动端性能测试的需求

一个App的迭代生命周期,可大体分为开发期、测试期、线上期。

  • 开发时期,需要能够检查性能异常点并通知给开发者;

  • 测试时期,需要使用测试工具产生性能测试报告;

  • 上线时期,通过监控平台上报性能数据,实现线上问题定位和追查。

不同的迭代周期对于测试工具具有不同需求:

开发和测试阶段:直观看到性能测试的结果,一个可以全面检测App性能指标的本地监测工具就可以满足需求。

上线阶段:我们对于用户使用的应用无法做到像针对测试阶段的应用的可控程度,所以需要通过引入性能监测SDK的方式,在运行阶段将运行在用户设备中的应用性能指标上传至监控平台,便于监测应用线上的性能表现并定位问题。

4、主流移动端性能测试工具简述

4.1.Xcode-Instrument

Instrument是Apple官方提供的一个强大的内置在xcode中的性能调试工具集。其中,Activity Monitor(活动监视器):监控进程级别的CPU,内存,磁盘,网络使用情况,可以得到应用程序在手机运行时总占用的内存大小;Core Animation(图形性能):这个模块显示程序显卡性能、CPU使用情况以及页面刷新帧率;Network:用链接工具分析程序如何使用TCP/IP和UDP/IP链接;Energy Log:耗电量监控。Instrument主要用于在调试过程中随时发现问题,及时优化,但是这个工具只能供有应用源码的程序员使用,无法测量用户真实使用场景下的性能。

4.2.Android monitor

Android Studio内置了四种性能监测工具Memory Monitor、Network Monitor、CPU Monitor、GPU Monitor,可以使用这些工具监测App的状态。Memory Monitor工具主要是用来监测App的内存分配情况,判断是否存在内存泄漏;Network Monitor是用于显示App网络请求的状态;GPU Monitor工具可以将进行UI渲染工作所花的时间表现出来;CPU Monitor可以对代码中的方法进行检测。

4.3.Matrix

Matrix是一款微信研发并日常使用的应用性能接入框架,支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。数据监测结果存储到后台,没有直观的展示界面。Matrix-iOS/

macOS主要监控崩溃、卡顿和爆内存。Matrix-android监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等。

4.4.GT

GT(随身调)是直接运行在手机上的“集成调测环境”。利用GT,仅凭一部手机,无需连接电脑,即可对App进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等)、开发日志的查看、Crash日志查看、网络数据包的抓取、App内部参数的调试、真机代码耗时统计等。

GT支持iOS和Android两个手机平台,其中:

  • iOS版是一个Framework包,必须嵌入App工程,编译出带GT的App才能使用;iPhone和iPad应用都能支持。

  • Android版由一个可直接安装的GT控制台App和GT SDK组成。GT控制台可以独立安装使用;SDK需嵌入被调测的应用、并利用GT控制台进行信息展示和参数修改。

4.5.Emmagee

Emmagee是一款实用、方便的性能测试工具,适用于指定的Android App,它可以监控CPU、内存、网络流量、电池电流和状态(某些设备不受支持)。此外,它还支持自定义收集数据的时间间隔,在浮动窗口中呈现实时进程状态等。

安装之后,打开Emmagee会显示出目前系统已经安装的应用(可在设置中配置间隔)。选择一个应用之后,点击“开始测试”按钮,Emmagee会自动启动被测应用,并在最上方显示流量、CPU、内存等数据,在该状态下可任意使用被测应用,Emmagee会自动进行相关数据的记录,终止测试之后会生成相应的报告,并保存在Android目录中。

4.6.Soloπ

Soloπ是支付宝在移动端上实现的一套无线化、非侵入、免Root的 Android 专项测试方案。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。支持 CPU、内存、FPS、流量等常规指标的实时获取,同时支持将性能数据记录下来,存储到本地并通过报表形式展示,支持性能加压。

4.7.Testin

Testin性能测试,通过自动化的测试工具,在上线前模拟正常、峰值以及异常等多种场景,从而对App的各项性能指标进行测试。包括:负载测试、压力测试、配置测试、并发测试、容量测试、可靠性测试。

负载测试:通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量。

压力测试通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别。

配置测试:通过测试被测试软件的软硬件配置,获得不同配置的性能指标,用于选择最佳的设备及参数配置。

并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。

容量测试:在确定的软、硬件条件下,构造一定数量的虚拟用户访问,从而获取不同数量级别的服务器性能指标,以确定数据库能够处理的最大会话能力、最大容量等。

可靠性测试:采用系统能够支持的最大并发用户数,持续执行一段时间(7*24小时),通过综合分析执行指标、资源监控指标,来确定系统处理最大工作量的性能情况。

4.8.Bugly

Bugly是腾讯推出的一款免费的崩溃收集工具。面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。移动开发者 ( Android / iOS ) 可以通过监控,快速发现用户在使用过程中出现的 Crash (崩溃)、Android ANR( application not response) 和 iOS 卡顿,并根据上报的信息快速定位和解决问题。用户只要登陆 Bugly 网站,就可以清晰的看到被监测产品有多少 Crash,影响了多少用户的使用,并可以根据 Bugly 提供的 Crash 日志进行问题修复。

4.9.OneAPM

Mi是OneAPM针对移动设备上App推出的移动应用性能监控工具。Mi展示移动应用的交互性能,崩溃率,HTTP 错误率,网络错误率等核心性能指标、用户访问轨迹、用户动作等行为数据,以及活跃用户等运营数据。从用户动作、网络请求、崩溃三个核心指标对用户体验进行评估,并结合应用版本、操作系统、设备、地域等多个维度总览用户分布情况。完整记录每个用户的访问轨迹,通过查看单次用户访问,回溯过程中出现的缓慢动作,错误请求和崩溃。详尽展示某类崩溃影响的设备、操作系统、应用版本、发生次数、影响用户等信息,还原崩溃发生轨迹,定位崩溃代码行。

4.10.听云App

听云App是听云平台提供的移动端性能监测工具。监控真实用户使用过程中的崩溃、错误、卡顿、网络性能差等问题。可以跟踪App应用移动设备端用户进行屏幕操作时的交互性能;统计多种错误类型,直观定位到具体报错URL、以及崩溃时的堆栈信息;可以深入追踪HTTP错误、网络错误和崩溃的原因,提高App质量。

5、主流移动端性能测试工具横向对比

针对不同的产品迭代周期,选取了目前业内比较成熟的工具,对比各自的优缺点。

各工具性能指标覆盖情况对比如下表:

4.png

6、结论

不同的移动端性能测试工具各有优劣势,在工具选择上,需要综合考虑主要监测的性能指标和工具的特长。对于研发测试阶段适用的工具,GT、Emmagee、soloπ在andriod端可直接安装apk进行测试,方便快捷。对于线上用户使用情况的监控,有些工具指标覆盖比较全面,但是对某些指标的监测不够深入,可考虑叠加另外一个或多个工具进行组合使用。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   盲区预警(BSW blind spot detection)  通过车辆周围排布的传感器及盲点探测器,在超车、换道、大雾、雨天等易发生危险的情况下,通过后视镜以及仪表显示提醒驾驶员。当驾驶员开启该功能时,车速处于20-70km/h的行车工况下,未开启转向时,当同向车道有同速度车辆,进行后视镜显示报警信息,当开启转向时,增加仪表信息显示报警。  车道偏离预警(LDW lane departure warning)  当系统开启时,摄像头会时刻采集车道线,通过图像处理获取车辆的位置参数,当检测到车辆偏离汽车轨道时,传感器会及时手机车辆数据和驾驶员操作状态,发出警报,如果驾驶员打开转向灯,则不发...
            0 0 690
            分享
          •  绩效面谈结束,从会议室出来,有一种不真实的感觉——这个季度我竟然拿了S?!要知道,上个季度和上上个季度,我的绩效是C。 C在我司意味着什么你们知道吗? 拿3次C就意味着严重不胜任,公司就会让我收拾收拾包袱滚蛋。而我,那时候,离第三个C,就只差一个季度了。回过头来看,还是很感慨的,我真的在三个月的时间里,从部门里的渣渣绝地逆袭了。但其实只有我知道,我不是靠自己做到的,而是有人不离不弃地拉了我一把。01我在这家公司干后端开发干到第二年,表现开始下滑,拿到第二个C的时候,我真的心灰意懒, leader 跟我说结果的时候,我心里都盘算着开始写简历了。但是我 leader 却很严肃地问我究竟...
            0 0 674
            分享
          •   等价类划分法  等价类划分法即把所有可能输入的数据划分为若干个区域,然后从每个区域中取少数有代表性的数据进行测试。等价的意思就是说程序对它们的处理方式都是一样的。  有效等价类  有效:是因为它们都是符合需求文档中定义的数据;  等价:是因为它们都是同一类型的数据。  无效等价类  无效:是因为它们都是不符合需求文档中定义的数据;  等价:是因为它们都是同一类型的数据。  等价类划分(测试点):  等价类划分法设计测试用例  边界值分析法  在功能测试中,边界值分析法也是测试人员常用的一个方法,它通常被视为对等价类划分法的一种补充。边界值分析法是取稍高于或稍低于边界的一些数据进行测试。为什...
            0 0 671
            分享
          • 一、正则表达式语法(一) 字符与字符类1、特殊字符:\.^$?+*{}[]()|以上特殊字符要想使用字面值,必须使用\进行转义2、字符类包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]表示可以匹配一个任意非数字的字符。字符类内部,除了\之外,其他特殊字符不再具备特殊意义,都表示字面值。^放在第一个位置表示否定,放在其他位置表示^本身,-放在中间表示范围,放在字符类中的第一个字符,则表示-本身。字符类...
            12 13 1489
            分享
          • 相信很多小伙伴想要自学性能测试,但网上的资料查阅出来的都比较干燥,对实际的性能测试经验并没有什么提升,本文从测试前的准备带你了解如何成为一名性能测试工程师。在开始性能测试前,我们需要跟项目组确认的几点内容:性能测试环境与生产环境服务器资源差异,并做差异分析,如测试环境的服务器资源与生产环境的服务器资源差距较大,需反馈给项目组,不然测出来的结果没有太大的参考意义;开始测试前,确认日志级别,日志级别需要与生产保持一致。如生产的日志是Info级别,则在测试环境的日志也应该是Info级别;确认数据库铺底数据(采用的方式为:让运维取生产上的每日成交量的数据库数据量),如数据库都是空表在测试查询交易的时候...
            0 0 1215
            分享
      • 51testing软件测试圈微信