Mock Server的一個實現:Moco
Moco其實就是Mock Server的一個實現。在日常的開發及測試過程中,我們不難發現不同模塊之間的測試、協作和集成有時候是一件很困難的事情,往往因為某個模塊開發進度落下了,或是某個模塊沒有配置正確,使得其他模塊的測試和開發進度受到限制。通常這被稱為短板效應。
先來看一下Moco作者(鄭曄)對該工具的定義:
Moco是一個可以輕松搭建測試服務器的框架/工具/程序庫。
產生緣由
集成,尤其是基于HTTP協議的集成——web service,REST等,在我們的項目開發中被廣泛應用。
以前,我們每次都要往Jetty或Tomcat等應用服務器上部署一個新的WAR。大家都知道,開發部署一個WAR的過程是很枯燥的,即使在嵌入式服務器上也是如此。而且,每次我們做一點改動,整個WAR都要重新組裝。
使用場景
我是一個企業級軟件開發人員,每次面對集成就是我頭疼開始的時候,漫長集成拉鋸戰拖延了我們的進度。幸好有了Moco,幾行配置就可以模擬一個服務,我再也不需要看集成服務團隊的臉色了。
我是一個移動開發人員,老板催得緊,可服務器端開發進度慢,我空有一個漂亮的iphone應用,發揮不出作用。幸好有了Moco,很快就可以搭建出一個模擬服務,我再也不用把生命浪費在無效的等待上了。
我是一個前端開發人員,做Inception的時候,客戶總想看到一個完整的應用演示,可哪有時間開發后端服務啊!幸好有了Moco,幾下就可以弄出一個模擬服務,我做的頁面一下就有了生命力。
使用MocoMoco目前支持多種使用方式,最基本的方式是兩種:API和獨立運行。
如果你編寫的是個Java應用(或是以其它JVM上的語言編寫的應用),你可以采用直接調用API;我們也可以獨立運行的方式,在配置文件中,配置一個屬于自己的服務器。
Moco其實就是Mock Server的一個實現。在日常的開發及測試過程中,我們不難發現不同模塊之間的測試、協作和集成有時候是一件很困難的事情,往往因為某個模塊開發進度落下了,或是某個模塊沒有配置正確,使得其他模塊的測試和開發進度受到限制。通常這被稱為短板效應。
在筆者的工作經歷中也經常碰見此類現象,由于負責的模塊依賴其他底層模塊,在進行性能測試時必須先將其他底層模塊全部部署調試通順,才能進行下一階段的性能作業。而其他模塊如若尚未開發完畢,亦或開發完較難搭建,在部署調試過程中往往就會花費大量時間和精力。當筆者嘗到Mock Sever這種技術帶來的方便后,也想要將其分享給大家。(以下示例均為超級簡化版,僅僅演示Moco框架的基本使用)
示例一
背景:Web服務A已開發完畢,A的登錄功能依賴第三方OAuth。
任務:對A的登錄功能進測試。
難點:不可能到第三方服務注冊大量用于測試的賬戶。不可能自己實現一套OAuth系統。性能測試時不可能直接使用第三方服務。
上代碼:
public class MocoTest {
private Runner runner;
private static final int PORT = 80;
private static final String URL= "http://localhost/login?userName=*$#";
private static final String RESPONSE = "{\"code\":400}";
@Before
public void setup() {
HttpServer server = httpserver(PORT);
server.response(RESPONSE);
runner = runner(server);
runner.start();
}
@After
public void tearDown() {
runner.stop();
}
@Test
public void test() throws IOException {
// do something
Content content = Request.Get(URL).execute().returnContent();
// do something
assertThat(content.asString(), is(RESPONSE));
}
} 直接在測試代碼中模擬第三方服務。
示例二
背景:Web服務A已開發完畢,Web服務B尚處于開發過程,B是A的基礎服務。
任務:對A進行測試。
難點:B還沒開發完成,A根本無法測試。
上代碼:
login.json
{
"request" :
{
"uri" : "/login"
},
"response" :
{
"text" : "{\"code\":200}"
}
}
java -jar moco-runner-<version>-standalone.jar start -p 80 -c login.json 簡單兩步,就運行起了簡化版的B模塊的模擬服務。
So easy。有木有很心動?Moco項目地址