这个测试可以使用adb工具,adb的安装方式

测试策略

  1. 安装后首次启动
  2. 常规冷启动
  3. 热启动(一般这个都很少测试)

针对1和2的测试方法

步骤1:在cmd中输入如下命令

adb logcat * > D:\log.txt

步骤2:再在手机上打开将要测试的apk,apk启动完成后,cmd上按ctrl+c结束导入日志

步骤3:在D盘找到log.txt,ctrl+f,输入Displayed(搜索Displayed单词),Displayed后面有显示时间,有些app有多个Displayed,启动时间为所有Displayed时间的总和





此处的启动时间为609+738 (ms)

还有一个方法,可以获取到1,2,3的时间,如下

步骤一:获取测试apk的包名(可以问开发要),可以通过adb获取,

  1. 先启动apk
  2. 在cmd中输入命令:
adb shell dumpsys window w | findstr \/ | findstr name =

得到如下,其中name后面的则是需要的包名/组件

mSurface=Surface(name=com.sina.weibo/com.sina.weibo.VisitorMainTabActivity)

步骤二: 在cmd输入启动apk的命令,里面则有启动时间

adb shell  am start -W -n com.sina.weibo/.VisitorMainTabActivity

输出如下,其中,ThisTime则为启动的总时间

Status: ok
Activity: com.sina.weibo/.VisitorMainTabActivity
ThisTime: 1326
TotalTime: 1326
WaitTime: 1354
Complete

毕竟手每次点要等待特别麻烦,那么就用python脚本来实现获得每次的启动时间吧。代码如下

#!/user/bin/python
# _*_ coding: utf-8 _*_
import csv
import re
import os
import time Package_activity="com.sina.weibo/.VisitorMainTabActivity"
Packagename = "com.sina.weibo"
runnum = 10
class App():
def __init__(self):
self.content = ""
self.startTime = 0
self.flag = 1
def LauchApp(self):
cmd = "adb shell am start -W -n " + Package_activity
self.content = os.popen(cmd)
def StopApp(self):
if self.flag == 1:
cmd = "adb shell am force-stop " + Packagename
else:
cmd = "adb shell input keyevent 3"
os.popen(cmd) def GetLaunchedTime(self):
for line in self.content.readlines():
if "ThisTime" in line:
self.startTime = line.split(":")[1]
break
print (self.startTime)
return self.startTime class Controller(object):
def __init__(self):
self.app = App()
self.counter = 0
self.laughtime = [("timestamp","elapsedtime")] def testprocess(self):
self.app.LauchApp()
elpasedtime = self.app.GetLaunchedTime()
time.sleep(3)
self.app.StopApp()
currenttime = self.getCurrentTime()
self.laughtime.append((currenttime,elpasedtime)) def run(self):
while self.counter > 0:
self.testprocess()
self.counter = self.counter - 1 def getCurrentTime(self):
currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
return currentTime def SaveDataToCSV(self):
if self.app.flag == 1:
csvfile = file("coldstart_Time.csv","wb")
else:
csvfile = file("hotstart_Time.csv", "wb")
writer = csv.writer(csvfile)
writer.writerows(self.laughtime)
csvfile.close() def coldLaugh_run():
controller = Controller()
controller.counter = runnum
controller.app.flag = 1
controller.run()
controller.SaveDataToCSV() def hotLaugh_run():
controller = Controller()
controller.counter = runnum
controller.app.flag = 0
controller.run()
controller.SaveDataToCSV() if __name__ == "__main__":
coldLaugh_run()
hotLaugh_run()

说明下:

a. 其中def SaveDataToCSV(self)这个函数中的file("hotstart_Time.csv", "wb"),python3将file改为open

b. adb安装apk

前提:需要把手机给root

命令:adb install 路径名/包名.apk

数据分析:

  1. 在得到数据后,我们一般将第一行数据去掉,取后几次数据分析
  2. 得到数据,我们要先算出平均值,再者就是要画出取线图查看波动情况
  3. 可与竞品对比此数据,做参考用以判断好坏
  4. 版本之间对比数据
  5. 一般冷启动的时间都在3-5s内
  6. 热启动启动的时间比冷启动要少

App性能测试之启动时间(安卓)手动+脚本的更多相关文章

  1. Android App性能测试之adb命令

    本篇文章总结了Android App性能测试过程中常用的adb命令.通过这些adb命令,可以查看App的性能数据,为评判性能好坏作参考. CPU相关 显示占用CPU最大的5个应用 adb shell ...

  2. Shell脚本 | 性能测试之启动时间

    安卓应用的性能测试,通常包括六个指标:启动时间.内存.CPU.耗电量.流量.流畅度. 除了耗电量,其他五个指标的数据在我们团队中已经可以通过运行脚本的方式获取到. 今天给大家分享下启动时间的脚本吧- ...

  3. Android App性能测试之二:CPU、流量

    CPU---监控值的获取方法.脚本实现和数据分析 1.获取CPU状态数据 adb shell dumpsys cpuinfo | findstr packagename 自动化测试脚本见cpustat ...

  4. Android APP 性能测试之 GT 工具

    一.介绍: GT(随身调)是 APP 的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, Integrated Debug Environment).利用 GT,仅 ...

  5. APP性能测试之卡顿比(FPS)

    fps概念: FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数.FPS是测量用于保存.显示动态视频的信息数量.每秒钟帧数愈多,所显示的动作就会愈流畅. 卡顿人体感觉标准 ...

  6. Shell脚本 | 性能测试之启动流量

    安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...

  7. 25条提高iOS App性能的建议和技巧

    这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or fol ...

  8. 25条提高iOS App性能的技巧和诀窍

    25条提高iOS App性能的技巧和诀窍 当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核. 然而,由于IO ...

  9. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

随机推荐

  1. Trie树详解(转)

    特别声明 本文只是一篇笔记类的文章,所以不存在什么抄袭之类的. 以下为我研究时参考过的链接(有很多,这里我只列出我记得的): Trie(字典树)的应用——查找联系人 trie树 Trie树:应用于统计 ...

  2. ucore-lab1-练习6report

    练习6--完善中断初始化和处理 1.  中断向量表中一个表项占多少个字节?其中哪几位代表中断处理代码的入口? 答:系统将所有的中断事件统一进行编号(0-255),这个编号称为中断向量.中断向量表的一个 ...

  3. mapreduce 学习笔记

    mapreduce基础概念 mapreduce是一个分布式计算框架(hadoop是mapreduce框架的一个免费开源java实现). mapreduce要点 主节点(master node)控制ma ...

  4. 学习一下sticky-footer

    什么是sticky-footer? 当页面长度不够长的时候,页脚粘贴在视窗底部:如果页面足够长时页脚会被内容向下推送. 实现方式: 1.负margin布局方式 给内容div加一个父div,设置父div ...

  5. How to find SPRO path by t-code name

    e.g:OB58 F1->Technical Information Find Table Name->V_T011 3.SM30 V_T011 Customizing Continue ...

  6. 关于Android UI 优化

    之前项目为了同时兼容tv和手机端的UI,使用了百分比布局来动态计算控件的宽高,这种适配方案只关心屏幕的宽高(分辨率),与屏幕的像素密度无关. 在新的项目里也使用了这种方案.但是由于项目的运行硬件计算能 ...

  7. PyCharm中 Django1.11配置Mysql数据库

    1.Django 中配置MySQL数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名称 ...

  8. python 标准库 glob ,python glob 学习

    glob库是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用 windows 下的文件搜索差不多.查找文件只用到三个匹配符: ”*”, 匹配 个或多个字符: “?”, ”?” ...

  9. Linux permission denied问题

    初试Linux 本来想试一试递归的mkdir -p结果遇到了permission denied,但是自己明明是管理员啊 查了博客,在文件名前加上chmod 777 ,例如chmod 777  temp ...

  10. 30. pt-upgrade

    用来测试新老版本数据库对sql的结果是否一致.两台开发测试数据库,一台是老版本,一台是新版本,来做比较,生产库别用. pt-upgrade h=192.168.100.101,P=3306,u=adm ...