Shell脚本 | 性能测试之启动流量
安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣。(见文末参考链接)
今天我要分享的是通过脚本一键获取应用的启动流量。脚本的编写方式和之前的《Shell脚本 | 性能测试之启动时间》有点类似。其实写了这么多shell脚本,说白了就是把各种平时手动执行的adb命令整合起来,然后再通过awk、grep、sed等命令将特定位置的数据从源文件里取出来经过加减乘除等操作最后输出想要的信息。
所以你看,也没多大技术含量。
那就废话少说,直接上代码吧,注释详细点就好:
#!/bin/bash
# 此脚本运行前,应用安装后已启动过
# 输入参数: <Package_Name>/<Activity_Name>
component=$1
# 截取包名
packagename=$(echo $1 | cut -d"/" -f1)
echo "Package name is '$packagename'"
# 截取uid
userid=$(adb shell dumpsys package $packagename | grep userId= | sed 's/ //g' | tr -d $'\r' | cut -c 8-12)
echo "uid = $userid"
# 停止应用的一切进程和服务
adb shell am force-stop $packagename
# 清除应用数据与缓存
adb shell pm clear $packagename
# 因为应用已经启动过一次了,所以已经有了流量使用的记录。在清空应用进程和所有数据后,开始启动流量测试之前,先记录下初始值。后面一次启动产生的数值减去本次记录的数值,就是后面那次启动的流量消耗。
beforestartrcv1=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
beforestartsnd1=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
# 接收的流量
echo $beforestartrcv1
# 发送的流量
echo $beforestartsnd1
# 启动应用
adb shell am start -n $component
# 等待10s,应用启动后可能会在后台异步加载一些数据资源
sleep 10s
# 获取启动后的应用流量数值(第一轮测试)
afterstartrcv1=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
afterstartsnd1=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
echo $afterstartrcv1
echo $afterstartsnd1
# 本次启动耗费的总流量(参见上面的注释:"后面一次启动产生的数值减去本次记录的数值,就是后面那次启动的流量消耗。")
data1=`echo "($afterstartrcv1+$afterstartsnd1)-($beforestartrcv1+$beforestartsnd1)" | bc`
echo "启动消耗流量测试一:$data1"
# 第二轮,和上面一样的步骤:
# 1、清除应用数据与缓存
# 2、获取初始值
# 3、启动应用,等待10秒
# 4、获取最新的数值,减去初始值后即为本次启动流量消耗
adb shell am force-stop $packagename
adb shell pm clear $packagename
beforestartrcv2=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
beforestartsnd2=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
echo $beforestartrcv2
echo $beforestartsnd2
adb shell am start -n $component
sleep 10s
afterstartrcv2=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
afterstartsnd2=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
echo $afterstartrcv2
echo $afterstartsnd2
data2=`echo "($afterstartrcv2+$afterstartsnd2)-($beforestartrcv2+$beforestartsnd2)" | bc`
echo "启动消耗流量测试二:$data2"
# 第三轮
adb shell am force-stop $packagename
adb shell pm clear $packagename
beforestartrcv3=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
beforestartsnd3=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
echo $beforestartrcv3
echo $beforestartsnd3
adb shell am start -n $component
sleep 10s
afterstartrcv3=$(adb shell cat /proc/uid_stat/$userid/tcp_rcv | sed 's/ //g' | tr -d $'\r')
afterstartsnd3=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'\r')
echo $afterstartrcv3
echo $afterstartsnd3
data3=`echo "($afterstartrcv3+$afterstartsnd3)-($beforestartrcv3+$beforestartsnd3)" | bc`
echo "启动消耗流量测试三:$data3"
echo "------------------------------------"
# 计算三次测试结果的平均值(同样的步骤进行三轮然后取平均值是为了摊平单次测试可能导致的较大误差)
averagedata=`echo "($data1+$data2+$data3)/3" | bc`
echo "应用启动时流量消耗(取三次测试平均值):$averagedata bytes"
运行示例:
参考链接:
【Android】性能测试之获取Android流量数据
欢迎关注微信公众号“测试开发Stack”,更多原创文章第一时间发布
Shell脚本 | 性能测试之启动流量的更多相关文章
- Shell脚本 | 性能测试之启动时间
安卓应用的性能测试,通常包括六个指标:启动时间.内存.CPU.耗电量.流量.流畅度. 除了耗电量,其他五个指标的数据在我们团队中已经可以通过运行脚本的方式获取到. 今天给大家分享下启动时间的脚本吧- ...
- Shell脚本 | 性能测试之内存
性能测试中,内存是一个不可或缺的方面.比如说在跑 Monkey 的过程中,如何准确持续的获取到内存数据就显得尤为重要. 今天分享一个脚本,可以在给定时间内持续监控内存,最后输出成一份 CSV 文件,通 ...
- Shell脚本 | 性能测试之CPU占有率
Android 是一个基于 Linux 内核的移动操作系统,Linux 的 CPU 占有率的计算方式也可以应用到 Android App 上. 今天分享的这个脚本的功能,是在多核情况下计算进程的 CP ...
- shell脚本计算Linux网卡流量
本文介绍了计算linux网卡流量的一个shell脚本,一个通过固定间隔时间获取ifconfig eth0 的字节值而计算出网卡流量的方法,有需要的朋友参考下. 使用shell脚本计算Linux网卡流量 ...
- shell脚本批量/单独启动、停止、重启java独立jar程序
本人最近半年使用阿里dubbo做开发,并在公司内部大力进行推广,将原来一个笨重且不易于维护的大项目切分成多个相对独立的java程序,好处是显而易见的,但是随着切分的独立运行程序包越来越多,程序的部署变 ...
- 写了shell脚本想一键启动三台虚拟机的Zookeeper,却不知道为啥总是启动不了
首先,一键启动的shell脚本是这样的 #! /bin/bash case $1 in "start"){ for i in node01 node02 node03 do ssh ...
- shell脚本之nginx启动脚本、统计日志字段、for循环实战、跳板机
1.NGINX启动脚本 #!/bin/bash # chkconfig: 235 32 62 # description: nginx [ -f /etc/init.d/functions ] &am ...
- [shell脚本] mysql服务启动脚本
服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 ...
- shell脚本带参数启动项目
用maven工程打包时,会将数据库连接一并打进去,如果需要经常修改数据库连接,则需要打开jar包然后修改配置,这样很麻烦耗时并且容易出错. 因此需要将数据库配置放入项目外,这样修改数据库时去固定的配置 ...
随机推荐
- Unicode和多字节的相互转换
多字节转Unicode 四步: Step1 #include <iostream> #include "windows.h" using namespace std; ...
- winSockets编程(四)阻塞模式(服务端)
在阻塞模式下,在I/O操作完成前,执行的操作函数将一直等候而不会立即返回,该函数所在的线程会阻塞在这里.相反,在非阻塞模式下,套接字函数立即返回,而不管I/O是否完成. 重点知识和思想: ////// ...
- Alpha阶段敏捷冲刺(四)
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:实现了统计的基本按钮和界面. 徐璐琳:找到&q ...
- 20155326 2016-2017-2 《Java程序设计》第6周学习总结
20155326 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 InputStream与OutputStream: 串流设计的概念 (1)Java将输入/输 ...
- Trie树的数组实现原理
Trie(Retrieval Tree)又称前缀树,可以用来保存多个字符串,并且非常便于查找.在trie中查找一个字符串的时间只取决于组成该串的字符数,与树的节点数无关.因此,它的查找速度通常比二叉搜 ...
- 《principal component analysis based cataract grading and classification》学习笔记
Abstract A cataract is lens opacification caused by protein denaturation which leads to a decrease i ...
- 第三天:JavaScript的DOM对象和DOM操作HTML
1. DOM操作HTML 1)注意:绝对不要在文档加载完成之后使用docment.write().这样会覆盖原来的文档 <body> <p>hello</p> &l ...
- centos7 修改默认启动级别
systemctl set-default multi-user.target 设定默认为字符界面,也就是3 systemctl set-default graphical.target ...
- IDHTTP的基本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- FFmpeg4.0笔记:rtsp2rtmp
Github https://github.com/gongluck/FFmpeg4.0-study.git #include <iostream> using namespace std ...