什么是網(wǎng)絡(luò)流量?
我們的收集通過運(yùn)營商的網(wǎng)絡(luò)訪問Internet,運(yùn)營商替我們的手機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文,數(shù)據(jù)報(bào)文的總大?。ㄗ止?jié)數(shù))即流量,這里的數(shù)據(jù)報(bào)文包含手機(jī)上下行的報(bào)文。由于數(shù)據(jù)報(bào)文采用IP協(xié)議傳輸,運(yùn)營商計(jì)算的流量一般是包含IP頭的數(shù)據(jù)報(bào)文大小。
1、tcpdump+Wireshark抓包測試法
流量測試最直接的方法就是抓包。在App運(yùn)行期間,把手機(jī)收發(fā)的所有報(bào)文度抓取下來,再計(jì)算收發(fā)報(bào)文總大小,即App消耗的流量。但是如果我們需要測試某一個(gè)App消耗的流量需要禁用其他APP的連網(wǎng)權(quán)限。
1)限制其他app的聯(lián)網(wǎng)權(quán)限,因?yàn)橛行〢pp的進(jìn)程是常駐后臺的,即使不運(yùn)行,也會有網(wǎng)絡(luò)報(bào)文??梢越柚恍┦謾C(jī)管家軟件禁用網(wǎng)絡(luò)。
2)手機(jī)上抓包,下載tcpdump,手機(jī)連接電腦,獲得root權(quán)限。
3)將?tcpdump?(forAndroid)上傳至Android手機(jī)上,在命令提示符窗口中輸入命令:adbpush? ?? /data/local/tcpdump
4)給?tcpdump?增加可執(zhí)行權(quán)限
adb shell
su
chmod 6755 /data/local/tcpdump
5)啟動抓包,使用命令/data/local/tcpdump-v -i any -s 0 -w /sdcard/zhangyu.pcap

Got后面的數(shù)字表示當(dāng)前抓到的包的數(shù)量。如果有變化,表示有網(wǎng)絡(luò)流量。
6)導(dǎo)出抓包結(jié)果adb pull /sdcard/zhangyu.pcap
7)用Wireshark打開剛才的抓包結(jié)果,點(diǎn)擊StatisticsàSummary,流量的數(shù)值為Bytes一行的Displayed一欄。

2、使用安卓自身提供的TCP收發(fā)長度統(tǒng)計(jì)功能
一般APP和后臺服務(wù)器之間的通信都是基于TCP的,所以我們可以利用此統(tǒng)計(jì)來測試我們APP的流量,而且安卓提供的該統(tǒng)計(jì)功能是按照APP緯度來統(tǒng)計(jì)的,不需要禁止其他app的連網(wǎng)權(quán)限。
1)使用ps命令查看所測app的uid,例如貼吧的uid為10000+191=10191
Android中查看UID的方式:
cat data/system/packages.list
adbshell
su
ps |grep com.baidu.tieba

2)進(jìn)入/proc/uid_stat/1191目錄,cat獲取當(dāng)前tcp_snd和tcp_tcv的初始值

3)此時(shí)可以開始測試了,測試完成后再次獲取tcp_snd和tcp_tcv的值

4)所測時(shí)間內(nèi)的流量計(jì)算
發(fā)送流量:tcp_snd_new-tcp_snd_old=2032150-893233=1128917bytes
接收流量:tcp_rcv_new-tcp_rcv_old=18648825-1350829=17297996bytes
弱網(wǎng)環(huán)境
在進(jìn)行手機(jī)應(yīng)用測試時(shí),經(jīng)常需要模擬網(wǎng)絡(luò)不穩(wěn)定的狀態(tài)下對測試執(zhí)行的影響。調(diào)研了幾款工具,可以通過手動設(shè)置數(shù)據(jù)丟包率,以及網(wǎng)絡(luò)時(shí)延等參數(shù),模擬弱網(wǎng)環(huán)境。如Charles、clumsy、netlimite、atc等。
1、幾款工具的比較
1)Charles、Fiddler這樣的軟件只支持短連接,也就是說只有走短連接的接口才生效,長連接的不能使用。
缺點(diǎn):不支持長連接
2)Atc工具和蘋果自帶的ios developer (開發(fā)者選項(xiàng))的使用方法是一樣的,需要在手機(jī)端操作,atc工具需要搭建一系列環(huán)境后,手機(jī)訪問一個(gè)ip地址就能看見控制頁面,然后修改相應(yīng)的參數(shù)即可。
缺點(diǎn):不宜操作,每次修改網(wǎng)絡(luò)場景需要把被測app置于后臺,切換到網(wǎng)絡(luò)模擬界面改參數(shù),然后再切回被測app。影響被測app的操作連貫性。
3) clumsy、netlimite等這類軟件易安裝,安裝在電腦端,手機(jī)通過共享網(wǎng)絡(luò)連接電腦,實(shí)時(shí)的將系統(tǒng)接收和發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)包攔截下來,人工的造成延遲,掉包和篡改操作后再進(jìn)行發(fā)送。
4)購買一些儀器,在全公司范圍搭建一個(gè)弱網(wǎng)環(huán)境。
缺點(diǎn):搭建成本高,需要有專門的技術(shù)人員支持。
綜合比較以上四類工具,第三類推薦在日常測試過程中使用。下面就拿clumsy舉例,介紹一下環(huán)境的搭建及使用。
2、clumsy環(huán)境搭建及使用
1)環(huán)境準(zhǔn)備
windows筆記本,clumsy安裝文件,共享網(wǎng)絡(luò)
2)安裝clumsy
clumsy免安裝程序,下載完成后,直接點(diǎn)擊exe可執(zhí)行文件即可。
下載地址:https://pan.baidu.com/s/1pLAjm2J密碼: mk8i
3)創(chuàng)建共享網(wǎng)絡(luò)
a、電腦連接網(wǎng)線,打開網(wǎng)絡(luò)和共享中心

b、點(diǎn)擊本地連接---屬性---共享---勾選第一個(gè),并選擇一個(gè)家庭網(wǎng)絡(luò)連接(此時(shí)本地連接會顯示共享的字樣)

c、cmd--輸入命令(啟動cmd,最好用管理者身份啟動)
netshwlan set hostednetwork mode=allow ssid=zhangyu1 key=123456789(ssid和key對應(yīng)共享網(wǎng)絡(luò)的名稱和密碼,key不能低于8位)
netshwlan start hostednetwork
至此手機(jī)就會搜索到電腦共享的網(wǎng)絡(luò),然后連接即可。
3、clumsy參數(shù)說明及使用
界面如下:

clumsy
首先根據(jù)用戶選擇的?filter?來攔截指定的網(wǎng)絡(luò)數(shù)據(jù)。在 filter
中可以設(shè)定你感興趣的協(xié)議(tcp/udp),端口號,是接收還是發(fā)出的端口。你也可以通過簡單的邏輯語句來進(jìn)一步縮小范圍。當(dāng) clumsy
被激活時(shí),只有符合這些標(biāo)準(zhǔn)的網(wǎng)絡(luò)數(shù)據(jù)會被進(jìn)行處理,而你不感興趣的數(shù)據(jù)仍然會由系統(tǒng)正常傳輸。
當(dāng)被 filter 的網(wǎng)絡(luò)數(shù)據(jù)包被攔截后,你可以選擇 clumsy 提供的功能來有目的性的調(diào)整網(wǎng)絡(luò)情況:
1.???延遲(Lag),把數(shù)據(jù)包緩存一段時(shí)間后再發(fā)出,這樣能夠模擬網(wǎng)絡(luò)延遲的狀況。
2.???掉包(Drop),隨機(jī)丟棄一些數(shù)據(jù)。
3.???節(jié)流(Throttle),把一小段時(shí)間內(nèi)的數(shù)據(jù)攔截下來后再在之后的同一時(shí)間一同發(fā)出去。
4.???重發(fā)(Duplicate),隨機(jī)復(fù)制一些數(shù)據(jù)并與其本身一同發(fā)送。
5.???亂序(Out of order),打亂數(shù)據(jù)包發(fā)送的順序。
6.???篡改(Tamper),隨機(jī)修改小部分的包裹內(nèi)容。
類似模擬網(wǎng)絡(luò)環(huán)境的軟件很多,大家可以針對自己的情況選擇,不要找環(huán)境搭建過于繁瑣的工具,簡單易用就好。