0x01.Why?

做移動測試的同學(xué)經(jīng)常會在app和server中間架設(shè)一個(gè)代理(例如charles或者fiddler等),由經(jīng)代理,app和server之間的交互及交互內(nèi)容變得可視化,使得我們不再摸黑測試。事實(shí)上,能夠很好的掌握app和server端的交互不僅對于測試,對于開發(fā),對于產(chǎn)品的整個(gè)質(zhì)量提高都是有非常大益處的。但是,有些場景下,架設(shè)代理變得不易,或者難于滿足要求,舉幾個(gè)例子:

  • 想要找出正常用戶使用時(shí)候,哪些場景最耗流量(你不能讓用戶掛代理,如果有針對網(wǎng)絡(luò)流量的優(yōu)化,掛代理也看不出問題來)。

  • 想要找出請求的各種接口中,哪些服務(wù)不穩(wěn)定,如間歇出現(xiàn)4xx或者5xx錯(cuò)誤,這需要統(tǒng)計(jì)大量的數(shù)據(jù),單一客戶端掛代理是做不到的(當(dāng)然服務(wù)端監(jiān)控如果做得好也能實(shí)現(xiàn))。

  • 想要找出某些特定條件下(如弱網(wǎng),網(wǎng)絡(luò)切換等)客戶端自己產(chǎn)生的請求錯(cuò)誤或者超時(shí)等等。

  • 想要查看一些特殊場景下接口是否會發(fā)生重復(fù)調(diào)用,錯(cuò)誤調(diào)用序列。這些issue往往藏的很深,不易出現(xiàn)。這時(shí)候往往需要分析日志的pattern來把問題揪出來,這時(shí)候你就會發(fā)現(xiàn),代理軟件做日志分析很麻煩,也要導(dǎo)出來專門分析,而且總掛著代理極為不方便(至少不能切換網(wǎng)絡(luò),日志也要根據(jù)app做篩查,因?yàn)橐话愣际侨髁拷厝。?/p>

這時(shí)候需求就變成了:最好在app內(nèi)部能夠截取所有的HTTP/HTTPS流量,以某種方式保存下來,并且能夠以某種方式傳遞給需要用這些數(shù)據(jù)的人。這其實(shí)是一種APM(Application Performance Monitoring)的概念,國外最早已經(jīng)有人實(shí)現(xiàn)了這種功能,如 newrelic https://newrelic.com/ 國內(nèi)也有一些類似的廠商了。

0x02. How?

先想一下我們每天都在使用的代理工具是如何實(shí)現(xiàn)的呢?代理工具會攔截所有的http的請求,記錄下我們需要的信息后替代客戶端重新發(fā)送相同的請求給服務(wù)端;攔截返回,記錄下想要的東西后返回給客戶端。如果JAVA寫的多,你可能看到過各種 interceptor 來截取流量。OKHttp的作者介紹這款被廣泛應(yīng)用的http client的時(shí)候曾經(jīng)說過:OKHttp只不過是請求和響應(yīng)之間做了一堆interceptor而已。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式