monkeysocks開發日誌--動機

monkeysocks的目標是爲開發以及測試提供一個穩定的環境。html

前幾天據說公司的測試團隊在鼓搗數據固化的東西,說白了就是在測試啓動時構建一個臨時性的數據庫,操做完以後再銷燬,這樣的好處是不形成測試反作用,同時屏蔽環境的差別。java

可是目前公司內部SOA用的太多了,僅僅靠數據庫固化明顯不現實,公司的架構團隊作了一個將全部remote service放到本地啓動的東西,可是這樣子啓動開銷有點難以接受。有沒有更可行的方案?git

以前也有人作過一個單測的東西,能夠將全部RPC調用的結果序列化成文本文件,下次調用時再序列化出來,這樣其實就屏蔽了遠程調用。可是Java語言層面的機制致使要把千奇八怪的對象序列化下來,原本就是不可完成的任務(有些對象自己就不是POJO,還有在getter、setter寫邏輯的)。github

因而我有一個大膽的設想:其實Java的外部依賴無非是網絡IO,就是TCP/UDP包嘛,那我能不能作一個工具,錄製一個穩定環境的網絡流量,而後固化下來,最終在調用時進行重放,豈不是一勞永逸?數據庫

可是TCP/UDP畢竟是系統底層的東西,並且我想對每一個Java進程單獨作重放,因此只能從Java內部機制入手了。網絡

有兩個方法:架構

用cglib改寫全部網絡IO相關的接口,改用固化調用。oracle

設置Java全局socks代理,並啓動socks server,在socks server裏作代理。maven

顯然第二種方法更簡單,有四兩撥千斤的感受!ide

找到一個Java socks server,jsocks,最第一版本比較老,google code上有一個改進版,用的是ant,由於之後要集成確定要用maven,因而就作了點maven化的處理,考慮之後單獨作成一個項目,如今先改了測試下可行性吧。https://github.com/code4craft/jsocks

Java裏面設置全局socksProxy的方法見http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

鼓搗一下,成功啓動起來,明天先對公司的項目進行試用。

相關文章
相關標籤/搜索