流量对于用户来说,是一种资源,所以我们必须保证我们的app在正常情况下没有异常流量的出现,如何对流量进行监控呢?
1、获取进程ID命令
adb shell ps | findstr packagename
2、获取进程ID的流量
adb shell cat/proc/pid/net/dev
我们可以看到流量数据,主要注意receive和transmit
receive指的是当前app接收的数据流量
transmit指的是app发送请求的数据流量
我们的流量就应该是他们两者之和
Io代表本地流量
eth1代表网卡流量输出
我们首先获取一次,之后进行对app的一系列操作,再次获取,通过流量差值计算出本次测试获取到的流量消耗
代码:
# -*- coding: utf-8 -*-
# @Time : 2020/4/7 16:54
# @Author : Willam.zja
# @FileName: traffic.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/enemy_sprites
import os
import sys
sys.path.append(os.getcwd())
from common.libs.commandLines import dosLine
from common.libs.dataHelper import getCurrentTime
import time
from common.libs.saveToCsv import saveToCsv
class Controller(object):
def __init__(self,count):
self.counter = count
self.all_data = [('timestamp','traffic')]
def testprocess(self):
receive = 0
transmit = 0
receive2 = 0
transmit2 = 0
#获取进程ID
result = dosLine.execute_result('adb shell ps|findstr com.android.browser')
pid = result[0].split(' ')[4].strip()
#获取进程使用流量
traffic = dosLine.execute_result('adb shell cat /proc/{}/net/dev'.format(pid))
for i in traffic:
if 'eth0' in i:
i = '#'.join(i.split())
receive = i.split('#')[1]
transmit = i.split('#')[9]
# print(receive,transmit)
elif 'eth1' in i:
i = '#'.join(i.split())
receive2 = i.split('#')[1]
transmit2 = i.split('#')[9]
# print(receive2,transmit2)
#计算流量和
all_traffic = int(receive) + int(transmit) + int(receive2) + int(transmit2)
#将字节转换为KB
all_traffic = all_traffic/1024
#存入数组
self.all_data.append((getCurrentTime(),all_traffic))
def run(self):
x= self.counter + 1
while self.counter > 0:
print('第{}次执行'.format(x - self.counter))
print(self.all_data)
self.testprocess()
self.counter -= 1
time.sleep(5)
def run_main(self):
self.run()
fn = self.all_data[0][1]
saveToCsv(fn,self.all_data)
if __name__ == '__main__':
cpuController = Controller(11)
cpuController.run_main()
数据生成后进行分析:
从数据可见,我们第一次获取到流量是8191KB,经过多次对app的操作,最后一次获取到的流量消耗是20300,那么我们本次测试流量消耗为20300-8291也就是12109KB,那么这个值怎么用,如何分析呢?主要是和竞品或者是版本之间对比,比如我测试的上一个版本是v1.2 执行固定操作消耗流量5M, 本次测试是v1.3,同样的操作消耗掉12M,那么就要分析和开发确认,为什么这个版本流量消耗会翻倍,在就是竞品测试,我们产品做一个搜索操作流程耗费20M,人家只耗费10M,这就是我们测试流量的意义