zoukankan      html  css  js  c++  java
  • 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 $'
    ' | 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 $'
    ')
    beforestartsnd1=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    # 接收的流量
    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 $'
    ')
    afterstartsnd1=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    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 $'
    ')
    beforestartsnd2=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    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 $'
    ')
    afterstartsnd2=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    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 $'
    ')
    beforestartsnd3=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    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 $'
    ')
    afterstartsnd3=$(adb shell cat /proc/uid_stat/$userid/tcp_snd | sed 's/ //g' | tr -d $'
    ')
    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”,更多原创文章第一时间发布

  • 相关阅读:
    ByteArrayInputStream(字节数组输入流) 示例
    ASP.NET 页面对象模型
    HTML常用标记
    [elementui]上线iconfont乱码
    time与timeEnd测试运行时间
    放大镜效果
    canvas
    [css] 样式列表
    千分符
    centos源失败
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/10472351.html
Copyright © 2011-2022 走看看