文章出處http://ju.outofmemory.cn/entry/96866
用以下命令可以啟動moco-runner 服務
java -jar moco-runner-<version>-standalone.jar start -p 12306 -c ***.json
其中12306是任意指定的端口號。foo.json是需要加載的配置文件名。<version> 是你下載的Moco的版本號,當前最新版為0.9.2。
上圖中,啟動信息之外的信息,是通過瀏覽器訪問地址:http://localhost:12306后,控制台輸出的信息。此時的配置文件如下:
[ { "response" : { "text" : "Hello, Moco" } } ]
剩下的任務就是構造自己項目的配置文件了。這部分內容的詳細文檔在:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md 值得一提的是,Moco支持動態加載配置文件,所以無論你是修改還是添加配置文件都是不需要重啟服務的。這點非常方便。 關於配置文件,這里OneCoder介紹幾個關鍵的部分: Moco支持在全局的配置文件中引入其他配置文件,這樣就可以分服務定義配置文件,便於管理。例如你有兩個項目Boy和Girl項目需要使用同一個Mock Server,那么可以分別定義boy.json和girl.json配置文件,然后在全局文件中引入即可: 全局配置如下:
[ { "context": "/boy", "include": "boy.json" }, { "context": "/girl", "include": "girl.json" } ]
在boy.json和girl.json中分別定義:
//boy [ { "request" : { "uri" : "/hello" }, "response" : { "text" : "I am a boy." } } ] //girl [ { "request" : { "uri" : "/hello" }, "response" : { "text" : "I am a girl." } } ]
注意,此時需要通過參數-g在加載全局配置文件。即:
java -jar moco-runner-<version>-standalone.jar start -p 12306 -g onecoder.json
否則配置文件解析會報錯。這里容易忽略。 啟動成功后,我們分別通過http://localhost:12306/girl/hello 和 http://localhost:12306/boy/hello 訪問服務,便可得到對應的reponse結果。 其實全局文件的引入方式還有直接include等,不過OneCoder覺得context這種方式應該比較常用,管理起來也比較方便。 接下來要關注的就是每個模塊內的配置文件本身了。基本的request/response已經見過了。request里自然有很多帶參數的,配置如下:
{ "request" : { "uri" : "/getBoy", "queries": { "name":"onecoder" } }, "response" : { "text" : "Hey." } }
上述配置匹配的url即為:http://localhost:12306/boy/getBoy?name=onecoder,返回值即為: Hey. 也就是說,使用這種方式你需要在開發期有固定的測試參數和參數值。 對於rest風格的url,Moco支持正則匹配。
{ "request": { "uri": { "match": "/searchboy/\\w+" } }, "response": { "text": "Find a boy." } }
此時,訪問http://localhost:12306/boy/searchboy/*** 結尾加任何參數均可匹配到。 除了Get外,Post,Put,Delete等請求模式自然是支持的:
{ "request" : { "method" : "post", "forms" : { "name" : "onecoder" } }, "response" : { "text" : "Hi." }}
當然,對於Header、Cookies等請求信息的配置也是支持的。官方文檔介紹的也很清除,這里着重說一下template功能。上面介紹了對於帶參數的請求參數,請求參數的值和返回值都是固定的,這自然太過死板。好在從0.8版本開始,Moco提供了template功能,可以動態的返回一些參數值。例如:
[ { "request": { "uri": "/template" }, "response": { "text": { "template": "${req.queries['name']}" } } } ]
此時通過url:http://localhost:12306/template?name=onecoder 訪問,則會返回onecoder。 這樣就可以通過template這種方式靈活的返回一些值。 最后,再介紹一個redirect
{ "request" : { "uri" : "/redirect" }, "redirectTo" : "http://www.coderli.com" }
用過瀏覽器訪問對應的地址,就會跳轉到我的博客了,哈哈。 更多的配置方式,這里就不一一介紹了。真的可以看文檔就搞定了。總體來說,場景覆蓋的還是很全的,但是總覺得respone的配置不夠靈活,通過修改源碼我們可以擴展一下自己想要的方式。這部分只能有空再看了:)