背景介绍

Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电了——应用耗电大; 2)首次/非首次启动应用,进入应用特别慢——应用启动慢; 3)应用使用过程中,越来越卡——CPU能力不足/内存泄露; 4)应用页面卡顿——帧率较低、页面卡顿。 因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。

Android应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等。本次先介绍启动时间的测试方法。

启动时间对于App的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况),另一种是热启动,即App从被切换到前台(点back退出后再点击图标启动)。QA测试时,一般关注冷启动的启动时间。以下介绍三种测试启动时间的方法,供大家参考,可以有针对性的使用。

1.1 使用adb命令

1.1.1 测试方法 输入adbshell am start -W packagename/MainActivity命令,计算启动时间。如下图:

图1应用第一次启动也就是我们常说的冷启动,这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.这时候adbshell am start -w packagename/MainActivity 返回的结果,就是标准的应用程序的启动时间。注意Android 5.0 之前的手机是没有WaitTime这个值的。关于ThisTime/TotalTime/WaitTime的区别,下面是其解释。WaitTime=endTime-startTime

  • startTime记录的刚准备调用startActivityAndWait()的时间点

  • endTime记录的是startActivityAndWait()函数调用返回的时间点

  • WaitTime = startActivityAndWait()调用耗时。

WaitTime 就是总的耗时,包括前一个应用Activity pause 的时间和新应用启动的时间;ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时;TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。

总结一下,如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。

1.1.2 总结

该方法算出的时间是系统从开始处理启动activity的时间到完成运行layout和draw函数的时间,简单的理解就是启动这个Activity的时间,并不包括点击icon到系统接收到消息的时间。显然,这个时间并不能完整的模拟用户操作场景的启动时间。其次该方法只计算一个Activity的整体启动时间,没有分别统计其中每个函数的时间,不便于定位问题。针对这两个问题,我们接下来看一下下面两个方法是怎样解决的。

我们在测试中关注的其实是用户体验的启动时间,那么上面的时间就不能满足我们的需求了。既然是用户体验我们可以用更直观的方式,使用screenrecord进行屏幕录制然后分析视频。

1.2 使用screenrecord进行屏幕录制

1.2.1 测试方法 (1)输入命令adb shellscreenrecord --bugreport /sdcard/lanch.mp4--bugreport 参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。 (2)点击收集图标,app完全启动后,使用ctrl+c结束视频录制。 (3)使用命令adb pullsdcard/lanch.mp4 ./,导出视频 (4)导出视频到电脑,使用可以按帧播放的视频软件打开(mac上quicktime就可以,win下可以用kmplayer),并按帧播放。 如下图所示:

图2按帧播放视频,视频左上角会显示每一帧的时间(精确到ms)和帧数。如图,11:09:38.031表示时分秒,f=333是帧数。在视频中会看到icon会变暗然后高亮,高亮时就是系统开始处理本次icon点击事件了。可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间就是app的启动时间。

1.2.2 总结 该方法虽然可以模拟用户的操作场景,但是操作成本较高且无法准确清晰明了的知道哪些函数调用时间过长。 以上两种方法,单从启动时间看,是无法定位出具体哪个函数耗时多一些,遇到启动时间大于预定的启动时间阀值时,需一步步的打log,分析查明原因。下面的方法是贴吧目前计算启动时间的办法,可以很清晰的看到每个函数的调用时间。

1.3 代码埋点,查看输出日志

1.3.1 测试方法 在代码中打点,输出日志查看。拿贴吧举例,下图是整个启动要经历的操作。

图3具体每步做了哪些,可以参照下表。

图4这样通过打点输出日志来测试启动时间,QA就可以很方便的查看到具体每个模块的耗时时间了,如下图。

1.3.2 总结

这样打点,可以清晰明了的看出Activity的总耗时及各个函数的耗时情况,这样在测试过程中,如果遇到问题可以很容易的定位到具体的函数。在测试过程中也有针对点,比如贴吧直播后续会以插件的形式整合到贴吧里,测试时,可以多关注plugin初始化的时间。

针对启动时间这一性能指标,个人觉得打点输出日志的方式较为理想,QA在测试过程中发现有疑似问题后,可以给出具体的函数耗时时间。

App测试-怎么测试启动时间?相关推荐

  1. iOS APP启动分析篇——启动时间测试

    APP中业务的更新迭代,使APP变得越来越丰富,越来越复杂,这时可能会导致APP启动耗时,我们都希望APP在功能强大的同时,性能也能保持优越的跑分,能够给用户带来更好的体验.这篇文章将介绍APP启动流 ...

  2. Web\App\接口自动测试常见面试题

    一.Web自动化测试 1.Selenium中hidden或者是display = none的元素是否可以定位到? 不能,可以写JavaScript将标签中的hidden先改为0,再定位元素 2.Sel ...

  3. APP测试:测试流程及常规测试内容

    APP测试 定义:使用人工或自动化来测试某个程序,验证它是否满足规定的需求或者实际结果和预期结果的差别 一.测试流程 1.1 流程图 1.2 测试周期 测试周期可按项目的开发周期来确定测试时间,一般测 ...

  4. android 免费云测平台,免费移动App自动化云测试软件推荐-Testin(云测)

    每当我们完成一个得意的作品APP之后,肯定会立即去上传或者是推广.但是app测试是一项很重要的工作!估计大都是的app测试只是程序员几个人完成.今天,25学堂跟大家分享一个每一个人都可以参与的app自 ...

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

    目录 APP测试要点 目标 一.APP专项测试 1.1 兼容性 1.2 安装 1.3 卸载 1.4 升级 1.5 干扰测试(交叉事件测试) 1.6 Push推送 1.7 用户体验 二. 性能测试工具 ...

  6. 使用fiddler进行app弱网测试

    fiddler----APP弱网测试 转自:http://www.51testing.com/html/01/n-3727001.html APP弱网模拟测试 移动端测试区别于PC端测试的一点就是网络 ...

  7. linux下电池测试软件,你们要的App电量分析测试来了

    原标题:你们要的App电量分析测试来了 Batterystats 是包含在 Android 框架中的一种工具,用于收集设备上的电池数据.您可以使用 adb 将收集的电池数据转储到开发计算机,并创建一份 ...

  8. testflight怎么做版本更新_如何使用TestFlight进行App构建版本测试

    在日常的开发当中,当一个项目在开发过程中或者完成准备上线,都需要我们进行真机测试,否则不可能开发完了就直接扔到了App,等上线了再下载看看,这都是不可能的.那么说到真机测试,大家肯定会想到弄一个99美 ...

  9. Android App专项测试-压力测试篇

    小伙伴们大家好,今天主要分享的主题是Android App专项测试.如何进行Android App专项测试压力测试呢?我们主要通过Android平台的一门工具Monkey.在学习本门课程之前,如果你具 ...

最新文章

  1. Java并发- 读写锁中的性能之王:StampedLock
  2. “拖库”防不胜防,如何早做预防?
  3. 蓝牙核心-L2CAP
  4. BizTalk开发系列(三十四) Xpath
  5. 规划极限编程阅读笔记01
  6. JDBC连接数据库教程,以postgreSQL为例
  7. 摩托罗拉MT788刷机
  8. html图片透明度变化,css,_CSS3动画实现图片透明度变化在微信上无效的解决方案,css - phpStudy...
  9. MySQL数据库优化之索引优化
  10. 爬取mm131套图并下载到本地
  11. [Excel图表实战技巧精粹].Excel.Home.扫描版 百度云
  12. chrome浏览pdf 字体变了
  13. 抖音网页版上线:这回可以在电脑上刷抖音啦!
  14. 简单介绍一下树莓派zero w
  15. 超炫酷的Bat脚本入门教程
  16. 你知道如何从零开始学c++游戏编程吗
  17. 【iOS】UI基础Day2-笔记(毛玻璃、帧动画、音效等)
  18. cf Gym 101086M ACPC Headquarters : AASTMT (Stairway to Heaven)
  19. window 下载安装minio
  20. 高分辨率光学遥感图像水体分类综述2022.03

热门文章

  1. 如何增长U盘的寿命- 小技巧
  2. php菱形循环代码,PHP练习–用for循环打印空心菱形,for菱形_PHP教程
  3. python基础代码技巧_5行Python代码实现批量打水印技巧,值得收藏|python基础教程|python入门|python教程...
  4. 【小技巧】如何对混乱的HTML/CSS/JS代码进行格式化排版
  5. 【CSS】css文字超出显示省略号/文字超过三行显示省略号..
  6. 独家 | 放弃Jupyter Notebooks吧,教你如何用仪表板展示研究成果
  7. 中国微量营养素市场趋势报告、技术动态创新及市场预测
  8. 解决JS双击事件dblclick触发时,同时会执行click事件中的语句
  9. R语言异常值处理方法总结
  10. 交换机与路由器技术-04-远程管理交换机