Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Mock Server利器 - Moco

Mock Server利器 - Moco

編輯:關於Android編程

Moco介紹

在開發過程中,經常會使用到一些http網絡接口,而這部分功能通常是由第三方開發團隊或者是後端同事進行開發的,在我們開發時不能給我們提供服務,更有甚者,要集成的服務在開發時還不存在。這為我們的聯調和測試造成了麻煩,常見的解決方案是搭建一個web server。

為什麼要開發Moco這個框架?

具體到模擬服務上,處理的手法也是各種各樣,因為服務以HTTP集成居多,無論是Web Service,還是REST,所以,一種典型的做法是,開發一個模擬服務,打成WAR包,部署到一個應用服務器上。而我們知道,一旦牽扯到應用服務器部署,就是非常耗時的,部署的時間量級通常是分鐘級的。而且,模擬服務器通常不是一次性的工作,我們需要在開發過程中,反復調整,這就進一步增加了維護一個模擬服務器的成本。有的應用服務器是非常消耗資源的,要用專門的機器來部署它。更進一步,如果機器資源有限,團隊就只能共享一台機器,這樣,即便我為測試自己的部分做一個小的改動,很有可能因為得不到機器的使用權,而要等上幾天時間

Moco就是針對這樣一個特定的場景而生的。Moco是一個簡單搭建模擬服務器的程序庫/工具,這個基於 Java 開發的開源項目已經在 Github 上獲得了不少的關注。該項目的簡介是這樣描述自己的:Moco 是一個簡單搭建 stub 的框架,主要用於測試和集成。

開發團隊只要根據自己的需要進行相應的配置,就會很方便得到一個模擬服務器。而且,由於 Moco 本身的靈活性,其用途已經不再局限於最初的集成測試,比如,Moco 可以用於移動開發,模擬尚未開發的服務;Moco 還可以用於前端開發,模擬一個完整的 Web 服務器等等。

Moco本身支持API和獨立運行兩種方式。通過使用API,開發人員可以在JUnit、JBehave等測試測試框架裡使用Moco,極大程度地降低了集成點測試的復雜度

Moco可以提供以下服務:

HTTP APIs Socket APIs REST API

Moco原理簡介:Moco會根據一些配置,啟動一個真正的HTTP服務(會監聽本地的某個端口)。當發起請求滿足一個條件時,它就給回復一個應答。Moco的底層沒有依賴於像Servlet這樣的重型框架,而是基於一個叫Netty網絡應用框架直接編寫的,這樣一來,繞過了復雜的應用服務器,所以,它的速度是極快的

Moco已經在github上開源,可點擊連接:https://github.com/dreamhead/moco

Moco獨立運行所需環境

Moco獨立運行時所需准備的有:

Java運行環境 moco-runner-0.11.0-standalone.jar

如何運行Moco

啟動http服務

Moco的運行非常簡單,只需要一行命令即可
如在命令行中運行:java -jar http -p -c < configuration -file>

:moco-runner-0.11.0-standalone.jar包的路徑 :http服務監聽的端口 :配置文件路徑

image_1aukc7jbn1rh51p2ma761dd5v4j9.png-52.4kB

這就在本地啟動了一個http server,其中監聽端口是12345,配置文件是MocoApi.json。只要在本機發起一個請求,如:http://localhost:12345,該請求就會被這個web server handle

如果別的機子想訪問這個服務,只要把localhost替換成本機IP即可

啟動https服務

啟動https服務,需要先生成證書,並用如下命令啟動服務:地方多發呆發地方的地方的地方的發呆發:java -jar https -p -c < configuration -file> --https --cert mocohttps --keystore mocohttps

:moco-runner-0.11.0-standalone.jar包的路徑 :http服務監聽的端口 :配置文件路徑 :證書路徑

image_1aukcamtmf2v14d14pi1r5ria6m.png-46.1kB

這就在本地啟動了一個http server,其中監聽端口是12346,配置文件是MocoApi.json,證書文件是test.cer

Moco HTTP(s) API配置

啟動服務之後,必然會根據需求stub出各種各樣接口反饋,我們會把這個配置放在一個json文件中,啟動Moco的時候,需要指定使用的配置文件路徑,這樣配置就可以生效了。Moco服務可以檢測到配置文件的變更,假如你修改了配置文件,不需要重新啟動Moco,服務照樣可以生效。更詳細的配置介紹請查看:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

配置文件的工作原理大致如下:
image_1aukcdkko1htkpba1hjt14srit213.png-53.4kB

如何在配置文件添加注釋

json不支持注釋,想要添加注釋的話,可以在description字段中加入描述
image_1aukces4c1bld1ilv120vtc713rk1g.png-21.5kB

約定請求Body

image_1aukcg2219uc4a89v2eia169i1t.png-63.5kB

約定接口的uri

image_1aukcgr1h1pvg1iqede15mtjtv2a.png-35.2kB

約定請求參數

image_1aukcheemo95pmp1q351n0vjq12n.png-40.6kB

約定請求方法

image_1aukci164cq717av19nc1cp0b0q34.png-32.7kB

約定HTTP版本

image_1aukcin2p1cnoenf1nfe1hn895u3h.png-38.2kB

約定請求頭部

image_1aukp23qh1io01g611k67l49ie9.png-47.6kB

約定cookie

image_1aukp2ppph2215lv4mp165n1begm.png-45.5kB

約定請求form

image_1aukp3eip1unv1s971l1s8ke1pr713.png-47.1kB

表單可以添加多項,多項的時候,必須全部匹配,接口才算匹配成功

約定以指定xml作為請求body

image_1aukp4l8rblj9p712cq13au1nlc1g.png-69.9kB

用xpath對請求進行匹配

image_1aukp54ud10dcbhi1a981sii1j1t.png-47.8kB

約定以指定json作為請求body

image_1aukp62mg1c1p1ilpa371fg71okd2a.png-118.5kB

用正則表達式對請求進行匹配

image_1aukp6kjk1cgktok1ksl3pl11ra2n.png-50.1kB

匹配操作

image_1aukp79rk6stah19u7138o10df34.png-132kB

設置Response content

image_1aukpa21f1nt21hrq15iv5111lcc3h.png-71kB

設置Response 狀態碼

image_1aukpam111jae1kj31trj1vqau2d3u.png-50.7kB

設置Response HTTP版本

image_1aukpb88b17f119i1oatsdi1pti4b.png-58.3kB

設置Response 頭部

image_1aukpboqh15l6ib31gvrcjo1dbq4o.png-45.9kB

設置重定向

image_1aukpca591qrht381uv31cvt43g55.png-39.9kB

設置cookie

image_1aukpcqun1tq911n314fv1o8r12hi5i.png-42.1kB

掛載文件

image_1aukpdacf1sq3p241s14qbqdnb5v.png-34.4kB

template的用法

Moco內置了一些變量,在response中可以使用這些變量,讓反饋更加智能,以下列舉了常用的變量

req.version req.version req.method req.content req.headers req.queries req.forms req.cookies

使用舉例如下:
image_1aukpfh4037cdgjsdoevg10396c.png-114.1kB

Moco在單元測試中使用

Moco除了可以單獨運行外,還可以在單元測試中運行,測試過程中,Moco會啟動一個web server來處理我們的請求

image_1aukpgl0jlqs7fn10ha1e5n1kmu6p.png-156.2kB

運行在單元測試中的moco server也可以選擇加載json配置文件
image_1aukph7s4vpdjegi1fkp1jfn76.png-169.7kB

通過stub後台,便可對http請求進行測試了<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMSBpZD0="moco的不足">Moco的不足

Moco的使用很簡單,配置也很方便,目前更是提供了http、rest、socket服務。但是也僅僅是能stub出接口,模擬出簡單的場景。如果接收到請求後需要做一些處理,如需查詢數據庫、進行運算、或者一些復雜的操作,就無能為力了。所以是否選用Moco,就取決於開發者是否只是需要一個簡單的模擬服務器。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved