1、概述:
moco是一個簡單搭建模擬服務器的程序庫/工具,主要用於測試集成。這個基於 Java 開發的開源項目已在 Github 上獲得了不少關注。mock-server用途就是開發在開發的過程中,需要依賴一部分的接口,但是對方沒有提供或者環境等等情況。
例如,當前端開發在開發頁面的時候,需要服務端提供API接口此時服務端沒開發完成,或者說沒搭建測試環境,這個時候前端開發會自己mock一個api服務端,自己給自己提供調用接口的返回數據。
2、運行方式:
moco目前支持多種使用方式,最基本的方式是兩種:API和獨立運行。本文主要講解獨立運行的sever搭建。
獨立運行:moco主要是通過將配置放入json文件中,啟動moco的時候,需要指定使用的配置文件路徑,這樣配置就可以生效了。
3、MOCO的不足:
moco的使用很簡單,配置也很方便,目前更是提供了http、rest、socket服務。但是也僅僅是能stub出接口,模擬出簡單的場景。如果接收到請求后需要做一些處理,如需查詢數據庫、進行運算、或者一些復雜的操作,就無能為力了。所以是否選用moco,就取決於開發者是否只是需要一個簡單的模擬服務器
4、MOCO搭建准備:
Step1:配置jdk:打開cmd窗口,通過java –version 檢查是否成功安裝jdk。
Jdk下載地址為:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,選擇適合自己電腦系統的版本進行下載安裝。
Jdk安裝方法:
● windows:http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html
● linux:http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html
如果出現以下信息則說明安裝正確。
Step 2:下載moco-runner jar文件,目前版本是 0.11.0:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
MOCO基礎搭建
Step1:新建文件夾,將2.2中下載的moco-runner-0.11.0-standalone.jar文件放置此目錄,並在該目錄新建json文件,命名為foo,此文件作為moco的配置文件。
Step2:編寫配置文件,像下面這個樣子描述你的moco 服務的配置:
Step3:通過配置文件 foo.json 啟動 moco服務在命令行輸入:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -c foo.json
其中< version> 替換為下載的 Jar 包的版本,此處為 0.11.0 ,所以執行:java -jar moco-runner-0.11.0-standalone.jar http -p 12306 -c foo.json
-p 指定 Moco 服務端口。
Moco-runner成功啟動如下圖:
需要注意的是,執行以上的命令,需要先 cd 到 Jar 文件所在的目錄,然后 foo.json 文件也需要放在同一個目錄才行,否則會報錯。或者可以通過使用 Jar 文件和 .json 文件絕對路徑的方式也可以。
json 文件路徑也可以使用相對路徑,如:./api/foo.json
用postman訪問moco-runner sever:
如果他人也想訪問,需要提供本機IP就可以了。
啟動服務之后,必然會根據需求stub出各種各樣接口反饋, moco服務可以檢測到配置文件的變更,假如你修改了配置文件,不需要重新啟動moco,服務照樣可以生效。
5、進階操作:
參考moco官方文檔:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md,以下列舉幾個較為常用的配置。
1.url:在request中設置uri,訪問 http://localhost:12306/foo ,就可以獲取到內容bar。
[
{
"request" : {
"uri" : "/foo"
},
"response" : {
"text" : "bar"
}
}
]
2. 帶有參數的請求, 啟動瀏覽器,並訪問http://localhost:12306/foo?parm=blash
[
{
"request" : {
"uri" : "/foo",
"queries" : {
"param" : "blash"
}
},
"response" : {
"text" : "bar"
}
}
]
3.返回特定的status
[
{
"request" :
{
"uri" : "/foo"
},
"response" :
{
"status" : 503
}
}
]
4.返回json數據
[
{
"request" :{
"uri": "/getJson"
},
"response" :{
"json": {
"foo": "bar"
}
}
}
]
5.通過不同的請求方式返回不同的參數,以下通過POST和GET返回不同的參數。
[
{
"request": {
"uri": "/test1",
"method": "POST"
},
"response": {
"json": {
"code":"200",
"desc":" POST success"
}
}
},
{
"request": {
"uri": "/test1",
"method": "GET",
},
"response": {
"json": {
"code":"200",
"desc":" GET success "
}
}
}
]
6.Json請求參數
[
{
"request": {
"uri": "/json",
"json": {
"foo": "bar"
}
},
"response": {
"text": "foo"
}
}
]
6、配置文件:
moco 支持在配置文件中引入其他配置文件,這樣就可以分服務定義配置文件,便於管理。
例如你有兩個不同路徑的 API:http://xxx.com/path1/login 和 http://xxx.com/path2/pay (登錄和支付接口)。
按照上一小節所講,我們可以寫好 login 和 pay 的兩個配置文件(或寫在一起),分別設置 request 的 url 為 /path1/login 和 /path2/pay 。如果需要測試的接口很多,則不利於管理,且 path1、path2 這么混亂的分布於不同的配置文件中,對於以后想要更改也很不方便。
● 正確的姿勢應該是這樣的:
同樣寫好 login.json 和 pay.json 兩個配置文件,然后寫一個配置文件 ,配置如下:
// config.json
[
{"context":"/path1", "include":"login.json"},
{"context":"/path2", "include":"pay.json"}
]
login 和 pay 兩個文件沒有特殊要求,和之前的寫法一樣。比如:
// pay.json
[
{
"request": {
"uri": "/pay",
"method": "POST",
"json": {
"phone":"18688886666",
"password":"123456"
}
},
"response": {
"json": {
"state":"0"
}
}
}
]
// login.json
[
{
"request": {
"uri": "/login",
"method": "POST",
"json": {
"amount":"100"
}
},
"response": {
"json": {
"state":"0"
}
}
}
]
然后啟動 moco 服務的命令是:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -g config.json
要注意的是,最后指定的參數是 -g config.json !
如果只是想引入多個 json 文件的話,全局配置文件中可以不使用 context 字段。比如:
// 不使用 context 字段的 config.json。
[
{"include":"login.json"},
{"include":"pay.json"}
]
。