# coding:utf-8
import subprocess
import time
#獲取乙個裝置裡面的所有包和流量(如果wifi和資料流量都為0,則不展示)
'''adb shell dumpsys package packages | findstr /c:"userid" /c:"package ["
adb shell cat /proc/net/xt_qtaguid/stats | find "userid"
'''def get_uids_and_packages():
'''獲取所有的uids和packages
:return:
'''uids=
uid=''
packages=
package=''
cmd='adb shell dumpsys package packages | findstr /c:"userid" /c:"package ["'
proc=subprocess.popen(cmd,stdout=subprocess.pipe,stderr=subprocess.pipe,shell=true)
output=proc.communicate()[0]
for line in output.split('\n'):
#判斷結果裡面是否有userid
if 'userid=' in line:
#找到 userid= 的下標
index=line.find('userid=')
#從 userid= 的下標+7,開始遍歷,直到字串結束
for i in range((index+7),len(line)):
#如果是數字,就拼接到uid
if line[i].isdigit():
uid=uid+line[i]
else:
#不是數字的時候,就停止拼接,初始化uid
uid=''
break
#判斷結果裡面是否有package [
elif 'package [' in line:
#找到 package [ 的下標
index_start=line.find('[')
index_end=line.find(']')
#從"["到"]"這裡面的是package
package=line[index_start+1:index_end]
return [uids,packages]
def remove_duplicate_uid():
'''去掉重複的uid,獲得整個裝置的uid,package
:return:
'''uids=get_uids_and_packages()[0]
packages=get_uids_and_packages()[1]
uid_and_packages=
for i in range(len(packages)):
#單個uid和package
uid_package=
#判定是否有重複的uid的標誌位
flag=0
for up in uid_and_packages:
#如果要加入的pid與已經存在相同,標誌位置為1
if up[0] == uids[i]:
flag=1
#如果有重複的就去掉重複的,不新增
if flag==0:
return uid_and_packages
def get_per_flow(uid):
'''根據uid獲取流量
:param uid:
:return:
'''#獲取流量的adb命令
cmd='adb shell cat /proc/net/xt_qtaguid/stats | find "'+uid+'"'
proc=subprocess.popen(cmd,stdout=subprocess.pipe,stderr=subprocess.pipe,shell=true)
output=proc.communicate()[0].split('\n')
#資料流量
rmnet=0
#wifi流量
wlan=0
for line in output:
#第6列資料是下行/接收流量,第八列資料是上行/傳送流量
if 'rmnet' in line:
rmnet=rmnet+int(line.split(' ')[5])+int(line.split(' ')[7])
elif 'wlan' in line:
wlan=wlan+int(line.split(' ')[5])+int(line.split(' ')[7])
return rmnet,wlan
def get_flows():
'''獲取所有的包名和對應流量
:return:返回資料為 [[包名1,資料流量1,wifi流量1],[包名2,資料流量2,wifi流量2],[包名3,資料流量3,wifi流量3]...]
'''package_flows=
for uid_package in remove_duplicate_uid():
rmnet=0
wlan=0
package_flow=
#根據每乙個uid查到對應的資料流量和wifi流量
rmnet,wlan=get_per_flow(uid_package[0])
#如果資料流量和wifi流量都為0,就不統計
if rmnet==0 and wlan==0:
pass
else:
# print(uid_package[1]+':\n'+'data:'+str(rmnet)+',wifi:'+str(wlan)+'\n')
#新增包
#新增資料流量
#新增wifi流量
print(package_flows)
print(len(package_flows))
return package_flows
if __name__=='__main__':
print(time.strftime('%y-%m-%d %h:%m:%s',time.localtime()))
get_flows()
print(time.strftime('%y-%m-%d %h:%m:%s',time.localtime()))
adb 測試命令
模擬器,不用還不行,改一行 就真機測試也不實際,是吧。adb這個指令 要說簡單,網上一大把,但是一些細節總是不注意,可能大家不用吧,或者ddms直接搞,但是我很喜歡命令,覺得ide環境找啊找好頭疼 adb push 簡單說把乙個電腦檔案弄到模擬器上 adb push home hello somef...
adb測試記憶體
coding utf 8 import subprocess import time import datetime adb shell dumpsys meminfo find com.android.settings 設定結果儲存路徑 csv path d autotest meminfo.cs...
效能測試 流量測試
原文資料 流量篇最近在研究ios 的效能測試,時間太緊沒來得及發帖,加通宵擠出時間給大家分享一點東西,希望對大家有所幫助!android 2.2之前 對於android2.2 的流量 版本以前的系統的流量資訊都存放在 proc net dev 或者 proc self net dev 檔案下,讀取檔...