App 性能测试分享

article/2025/9/30 0:02:20

App 性能测试分享

在本文内,主要以Android性能测试为主进行分析

一、性能测试包含

  1、启动时间测试

      测试场景包括 - - - 首次安装启动时间、冷启动、热启动测试

  2、页面响应时间:

      用户从点击一个控件,到下一页面主页面完全展示的时间;

  3、基础度量指标

     像cpu、内存(pss、vss、uss)等、网络、API接口大小,接口响应时间、电池、电量、温度等

  4、Monkey测试

     通过Monkey命令或脚本;执行模拟测试,主要针对的app的稳定性测试和健壮性测试;我们的测试团队对Monkey也做了一些改进开发工作,在Monkey测试过程中发现ANR或者崩溃时,自动收 集崩溃堆栈调试信息,以及该anr或crash对应的上下文信息,自动上传到bug管理系统;

  5、对比测试

    一般为Elong内部版本之间对比;以及Elong与其它同类App之间的对比测试;对比测试一般只有在业务、UI或技术实现有较大变动时,才会去做。

接下来主要详述一下页面响应时间的测试和基础性能指标的测试方法

二、页面响应时间测试

  据我目前所知,页面响应时间有如下几种测试方法

  1、高速摄像机

    通过高速摄像机来拍摄录像,在回放的过程中数帧的方法,来统计响应时间;比如每秒可以拍摄25帧,那每帧的耗时大概是40ms;若某个页面响应时间为30帧,则该页面的响应时间为1200ms;

    该方法的缺点为:

      (1) 效率低下

      (2)测试结果的准确性,依赖于测试人员的主观判断 ;  

   2、通过页面日志埋点

    通过在一个Activity中或才2个相关的上下两个Activity中,埋入2条日志,然后计算这2条日志之间的时间差;目前艺龙使用的是该种方式。

    该方法的缺点:

      1、响应时间依赖于开发人员打点位置的精确性;比如RD并没有将打点打在主线程渲染的结束,而是打在onCreate()方法的开始,或打在某个异步线程里,都会造成测试结果的不准确;

      2、需要构建上下文日志计算模型;随着业务迭代及打点需求的变更,也需要一定的人力成本来维护这些计算模型;

    让我们看一下艺龙日志埋点的一个示例:

      

    从左侧搜索首页中点击【查找酒店】这个Button时,会触发一条类型为Click的日志;在下一酒店列表页主页面渲染完成时,会打印一条类型为show的log;精简之后的日志如下(为了某些方面的原因,日志格式和内容作了一些混淆):   

      

        从左侧的三个字段及右侧的三个字段,可以构建一个“点击展示”模型,然后通过两条日志的时间戳的差值,就可以算出用户从点击这个Button到hotelList页完全展示所经历的时间,大概为1.42秒;

    这也最接近于真实用户所感受到的页面响应时间;

  3、通过内嵌SDK

    之前听过某大型互联网公司某位测试大牛的分享,他们的做法就是在整个App里内嵌了一个SDK,通过这个SDK去统一监控统计所有Activity的响应时间;无疑这种方法的效率是最高的;

  4、通过图像识别的方法

    在16年12月3号360举办的测试之美交流会上,360的一个测试同学提出的基于图像识别的测试方法;主要使用到了stf和sikuli 2种框架;

    stf - - - 一种基于web的智能手机管理平台,它的另一个作用就是可以在web上实时显示手机UI;这也为基于图像识别的测试提供了基础; 传送门  stf 

    sikuli - - - 基于图像识别的一种脚本语言;我们也可以认为它是一种自动化测试框架;它的脚本示例:

                  

     代码示意: 在当前页面中,点击【查找酒店】这个Button;在接下来的5秒内,如果在下一页面中找到了某个图片所对应的酒店,则认为该页面渲染完成;并打印一条true ;

     从脚本示例中我们可以看出,该脚本方法的参数都是一种屏幕截图;所以从理论上讲,只要会截图就可以写出这样的测试脚本;而360的同学,相当于是在上面代码的第一行和第二行后面,各插入一个时间点代码,然后计算这2个时间点之间的差值;就可以计算出页面的响应时间;

 三、基础度量指标 

  像CPU,内存,流量,FPS,电量等性能指标的获取,一般有以下几种方式:

    1、通过Android shell的命令; 如 top、dumpsys meminfo/cpuinfo 包名/pid 等等;

    2、通过Android sdk提供的一些接口 ;

      像获取内存可以用   ActivityManager.getProcessMemoryInfo(pid);获取流量可用 TrafficStats.getUidRxBytes(Integer.parseInt(uid)) 及 TrafficStats.getUidTxBytes(Integer.parseInt(uid)) 2个方法;

    3、通过eclipe或AndroidStudio的插件;

    4、通过第三方测试工具,如腾讯的GT、WeTest,网易的Emmagee,阿里的易测(easyTest) 等;让我们来作一个简单的对比

       

 四、第三方测试工具的原理

    通过阅读Emmagee的源码可知,数据采集原理就是在第三节中提到的1、2两种方法;让我们用一张图来表示下;

      

五、艺龙的性能测试工具ETest

    ETest是在Emmagee的基础上作了大量的改进;ETest致力于解决以下几个问题:

    1、Activity响应时间的获取

      其它公司提供的一些第三方测试工具,由于其功能的通用性,均没有对页面响应时间提供支持;这也是ETest的核心功能;也是很多分析指标的基础;

      

    2、提升时效性,所测即所得

      像Emmagee或者GT,在测试完成后,才会拿到一个测试结果的csv文件,还需要利用Excel转化成图表再进一步分析;这样会有一个较高的数据延时,即使发现一些性能异常,也很难回忆起当时所作的一些操作行为;更不要说一些上下文信息了(比如当时一些Rest接口的响应时间及响应大小,当时的网络情况,app打印的一些Debug 日志等);ETest的实时性能数据渲染,效果如下

      

    3、充分利用日志

      我们在测试的时候,多是用Debug版本来测试;Debug包一般会打印丰富的日志,像一些接口交互日志,操作行为日志,上下文日志等;这些日志在我们执行功能或性能测试的过程中都非常有用;Emmagee充分挖掘和利用了这些日志(特别针对艺龙Debug版本开发的);在测试完成后,可以随时查看某个性能节点2分钟之内日志;方便问题的定位;

      

    4、历史数据有充分利用

      ETest很好的利用了历史测试数据。比如我们使用测试工具对某个版本执行了30轮次的测试,我想统计一下某个页面或某个接口在某个版本(或某款机型)上的平均及最大响应时间;或者我想对比一下任意两次测试集的测试结果,查看一下性能优化效果;在ETest只需简单的点几下就可以看到。

       测试集汇总分析:

         

      

    ps:受篇幅和排版限制,每张图片只截取页面部分功能和部分图表

六、后续计划   

    1、Monkey测试及自动化测试集成

         通过对Monkey和自动化测试的集成;可以将部分性能测试解放出来,在做其它类型测试的时候,同时也做了性能测试;对于性能数据的积累和分析也很有好处;    

    2、对IOS测试的支持

         目前ETest对于IOS的支持已经在开发进展中;计划于2017年上半年实现支持;    

    3、抽象出SDK和RestApi接口

        无论任何app测试平台,想接入性能测试,均只需要简单的嵌入sdk和配置Rest服务地址即可;

    4、开源

        ETest使用的技术和类库,都是基于开源的产品;我们也会在不久之后将ETest开源出来;受益于开源,回馈于开源;也希望感兴趣的同学给我们提供建议和意见;进一步完善我们的成果;

   

标签: app性能测试


http://chatgpt.dhexx.cn/article/oU9GtIZF.shtml

相关文章

app性能测试工具总结(7)

前面讲述过app性能测试需要测试哪些和通过python脚本来执行adb命令,获取数据,当然这只是一种方式下面来看下依赖工具怎么测试, 先说有哪些工具,具体怎么用法,希望各位去找其他的资料,这个不难,…

【APP性能测试】

一、普遍的apk性能测试,主要是以下七类 1、响应 2、内存 3、CPU 4、FPS (app使用的流畅度) 5、GPU过度渲染 6、耗电 7、耗流 二、响应测试 1查看appPackage及appActivity ,执行命令: adb shell dumpsys activity | findstr "mResume…

Android app 性能测试实用工具

主要是想分享安卓专项测试监控两个小工具,一个电耗,一个性能监控,不是什么多大高深技术,只是把一些原理给集成起来,变成一个实用小工具。想用就用,不想用就路过~ 电耗工具--------------------------------…

全网最全移动端App性能测试方法,值得收藏!

关注上方“测试开发技术”,选择星标, 干货技术,第一时间送达! 普遍的apk性能测试,主要是以下七类 1、响应 2、内存 3、cpu 4、FPS (app使用的流畅度) 5、GPU过度渲染 6、耗电 7、耗流 (app除了这些性能测试&#xff0c…

app常见性能测试点

普遍的apk性能测试,主要是以下七类 1、响应 2、内存 3、cpu 4、FPS (app使用的流畅度) 5、GPU过度渲染 6、耗电 7、耗流 (app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测…

APP性能测试工具——GT 使用方法

APP性能测试工具——GT 使用方法 场景介绍 通过GT工具兼容移动端的 CPU、内存、流量、电量、帧率/流畅度等等GT官方使用介绍文档地址:https://gt.qq.com 一、工具下载 应用宝下载GT app并安装 二、工具介绍 1.打开GT,允许访问权限 进入工具AUT页面&am…

APP外包开发性能测试工具

APP的性能测试是指对APP在不同场景下的性能进行测试,包括响应速度、稳定性、负载能力、资源占用等方面。下面介绍一些APP性能测试的方法和工具,希望对大家有所帮助。 1. 压力测试 压力测试是指在模拟高负载情况下对APP进行测试,以测试APP在高…

功能测试(八)—— APP之专项测试、性能测试、性能测试工具SoloPi

目录 APP测试要点 目标 一、APP专项测试 1.1 兼容性 1.2 安装 1.3 卸载 1.4 升级 1.5 干扰测试(交叉事件测试) 1.6 Push推送 1.7 用户体验 二、 性能测试工具 2.1 APP性能测试工具介绍 —— SoloPi简介 2.2 APP性能测试工具 —— SoloPi使用 三、APP性能测试 3.…

UML用例图(二)

1、 基本概念 (1)系统中与实现无关的视图,只关心系统的高级功能,而不关心系统的具体实现细节 (2)通常在项目开始时要先确定,之后不轻易修改(主要需求) 2、用例图由三部…

UML用例图详解

1. 概述 用例图(Use Case Diagram)描述“用户、需求、系统功能单元”之间的关系,是参与者所能观察和使用到的系统功能模型图。 用例图用于需求分析阶段 用例图包含6个基本元素:参与者(Actor)、用例&#xf…

UML用例图、时序图、类图、活动图

1 .类图 1.1关系 实现: 类实现接口 , [表现] implements 泛化: 类继承类 , [表现] extends 组合: 特殊的关联关系, 是整体与部分的关系, 部分与整体同生命周期, [表现] 成员变量 聚合: 特殊的关联关系, 是整体与部分的关系, 部分与整体不同生命周期, [表现] 成员变量关联: 一个…

UML用例图关系(Include 和extend)

用例图关系 三种关系 泛化(Generalization) 包含(Include) 扩展(extend) 下面给大家分别通过举例来介绍一下这三种关系的概念和用法 概念和用法 概念 (1)泛化关系(带…

图书管理系统 UML用例图

细节处还未扣。资料保留

(转)UML用例图

用例图是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(User Case)是外部用户(被称为参与者)所能观察到的系统功能的…

UML的用例图

用例图的构成 1 角色:人员角色——人、事; 角色不一定局限于人,还可以是事物、事儿 2用例:功能的描述; 每一个用例描述了一个完整的系统服务 3 系统边界 4 关系:执行者与用例之间的关系。 泛化 依赖 关联…

UML用例图关系与画法

用例图主要用来描述“用户、需求、系统功能单元”之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。 【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。 用例图所包含的元素如下: 1. 参与者(Actor) 表示与您的应用程序或系统进…

设计模式之UML用例图

用例图主要用来描述“用户、需求、系统功能单元”之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。 【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。 用例图所包含的元素如下:   1. 参与者(Actor) 表示与您的应用程序或…

UML用例图和类图

UML常见关系: 用例图 构成:参与者、用例、关系。 概念: 参与者:外部用户、进程或其他系统的理想化概念。 用例:外部可见的一个系统功能单元,用例名字是一个动词短语字符串,比如,…

【软件工程】2.UML用例图

什么是UML? UML(Unified modeling language) 出现于70年代中期,建模语言数量从不到十种增加到了五十多种,OO(面向对象)方法的用户并不了解不同建模语言的优缺点及相互之间的差异; 90年代中期形成了UML统一建模语言,它是…

UML用例图与类图

1、用例图 用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。 (《UML参考手册》) 用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行(或称为发起了哪个用例)。 用例图多用于静态建模阶段(主要是业务建模和需求建模)。 …