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

安卓应用的性能测试,一般包括六个指标:启动时间、内存、CPU、耗电量、流量、流畅度。html

除了耗电量,其余五个指标的数据在咱们团队中已经能够经过运行脚本的方式获取到。shell

今天给你们分享下启动时间的脚本吧~bash

首先,咱们先明确一下安卓应用的启动时间应该如何计算。在这里,我给出一条命令:微信

adb shell am start -W <Package_Name>/<Activity_Name>性能

"adb shell",安卓调试桥(Android Debug Bridge),这个你们都知道,很少解释。"am"指的是什么呢?Activity Manager,活动管理器,经过它能够启动App、启动Activity以及启动广播和服务等等。测试

安卓应用在启动时都会先出现一个欢迎页,它其实就是一个Activity。应用从被点击到出现欢迎页的这段时间,被定义为启动时间。在知道应用欢迎页的 Activity Name 后,就能够经过上面这条命令来获取启动时间。 图中的 "TotalTime" 便是本次启动所花费的时间,单位毫秒(ms)。ui

在知道启动时间的测试方法后,咱们再来肯定启动时间的不一样场景。应用启动时间的场景差别,主要有四个: 一、首次安装:第一次下载应用后的启动时长; 二、覆盖安装:旧版本升级到新版本后的启动时长; 三、冷启动:杀掉应用的全部进程后的启动时长; 四、热启动:back键正常退出应用后的启动时长。调试

目前,咱们团队的启动时间测试只包括首次安装、冷启动和热启动。code

接下来,用脚本说话吧:component

#!/bin/bash
# Author: Shengjie.Liu
# 安装应用,传入参数:apk文件的绝对地址
function install() {
  adb install ${1}
  sleep 5s
  adb shell input keyevent 3
}
# 卸载应用,传入参数:应用包名
function uninstall() {
  adb uninstall ${1}
  sleep 2s
}
# 获取启动时间,传入参数:<包名>/<启动页活动名>
function getStartupTime() {
  adb shell am start -W  ${1} | grep  -i Total | sed 's/ //g' | tr -d $'\r' | cut -d":" -f 2
  sleep 2s
}
# 清除应用全部进程,传入参数:应用包名
function clearApp() {
  adb shell am force-stop ${1}
  sleep 10s
}
# Back键退出应用
function quitApp() {
  adb shell input keyevent 4
  adb shell input keyevent 4
  adb shell input keyevent 4
  sleep 2s
}
# 运行脚本后,提醒输入APK文件地址和包名&启动页活动名
read -p "请输入APK地址:" apk_address
read -p "请输入包名和活动名:" component
# 截取出包名赋值给变量"package_name"
package_name=$(echo ${component} | cut -d"/" -f1)
echo "Package name is '${package_name}'"
# 获取首次安装的启动时间,重复三次,最后取平均值
install ${apk_address}
starttime1=`getStartupTime ${component}`
uninstall ${package_name}
# 第二次
install ${apk_address}
starttime2=`getStartupTime ${component}`
uninstall ${package_name}
# 第三次
install ${apk_address}
starttime3=`getStartupTime ${component}`
sleep 20s
# 三次的启动时间
echo "首次安装时间(ms):$starttime1 $starttime2 $starttime3"
# 平均值
echo "($starttime1+$starttime2+$starttime3)/3" | bc
# The first installation time test is over, beginning warm boot test
quitApp
# 获取热启动的启动时间(同上,重复三次,取平均值)
starttime1=`getStartupTime ${component}`
quitApp
starttime2=`getStartupTime ${component}`
quitApp
starttime3=`getStartupTime ${component}`
quitApp
echo "热启动时间(ms):$starttime1 $starttime2 $starttime3"
echo "($starttime1+$starttime2+$starttime3)/3" | bc
# 获取冷启动的启动时间(同上,重复三次,取平均值)
clearApp ${package_name}
starttime1=`getStartupTime ${component}`
clearApp ${package_name}
starttime2=`getStartupTime ${component}`
clearApp ${package_name}
starttime3=`getStartupTime ${component}`
echo "冷启动时间(ms):$starttime1 $starttime2 $starttime3"
echo "($starttime1+$starttime2+$starttime3)/3" | bc
# 启动时间测试结束,卸载应用
uninstall ${package_name}

由于安卓手机的多样性,此脚本未作容错处理,部分手机在脚本运行过程当中可能会弹出权限确认框或者其余界面,从而致使脚本运行失败。这个问题,你们能够根据本身手机的特性来作对应处理。


欢迎关注微信公众号“测试开发Stack”,更多原创文章第一时间发布!

原文出处:https://www.cnblogs.com/liushengchieh/p/10418279.html

相关文章
相关标签/搜索