一,關於Mock測試
1,什么是Mock測試?
Mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以便測試的測試方法。
2,為什么要進行Mock測試?
Mock是為了解決不同單元之間由於偶合而難以開發、測試的問題。所以,Mock既能出現在單元測試、集成測試,系統測試過程中。
Mock最大的功能是幫你把單元測試的耦合分解開,如果你的代碼對另一個類或接口有依賴,它能模擬這些依賴。比如一段代碼有這樣的依賴:
當我們需要測試A類的時候,如果沒有Mock,則我們需要把整個依賴數都構建出來,而使用Mock的話,就可以把結果分解,如下圖:
3,Mock對象適用的場景
- 前后端項目中,后端接口尚未開發完成。
- 被測單元依賴的對象較難模擬(比如模擬支付時的各種異常條件)
4,Mock測試的優勢
(1)團隊並行工作
有了Mock后,前后端人員只需要定義好接口文檔,就可以開始並行工作了,互不影響,只在最后聯調階段需要合作;后端與后端之間如果有接口耦合,也同樣能被Mock解決;不會出現一個團隊等待另一個團隊的情況。
(2)測試覆蓋度
假如有一個接口,有100個不同類型的返回,我們需要測試它在不同返回下,系統是否能夠正常響應,但是現實很難模擬。有了mock,想要什么自己設計。
5,Mock測試注意事項
1)測試完畢后,上線前,請一定確保 為了mock而做的相關代碼/配置文件的修改,已經完全恢復。
2)mock接口只能做主流程聯調/異常返回測試,不要過分依賴mock接口進行測試。當mock接口切換成實際接口后,測試/開發必須把之前的測試重新走一遍。
二、Mock測試方法
- Mock Server-Moco
這是一個jar包,只要執行該jar包,指定配置文件,就可開啟一個http服務器提供服務,並且修改配置文件后也無需重啟服務,支持動態加載。我使用的是moco-runner-0.10.2-standalone.jar,運行方式如下:
java -jar moco-runner-0.10.2-standalone.jar start -p 8080 -c XXX.json
XXX.json就是我們的mock配置文件,比如:
[ { "request" : { "uri" : "/foo" }, "response" : { "text" : "Hello, Moco" } }, { "request" : { "uri" : "/foo1" }, "response" : { "text" : "Hello, gongf" } } ]
以上就可以實現當我們訪問127.0.0.0:8080/foo時,返回一個json為{"text":"Hello, Moco"}。
具體其他使用方法請參照官方文檔:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md
2,fiddler
fiddler大家都很熟悉了,在windows環境環境可以自定義返回內容。
還有一個其他mock工具,大家都是通過編寫js代碼或者python,java等代碼達到mock目的,此次就不再介紹了。