1 本地部署easy-mock
下面直接在linux系統中安裝(如果要使用docker安裝請自行查詢其他資料)
-
(ps:注意:安裝easy-mock必須先安裝nodejs,我之前碰到過一個問題。現象是“服務都起來了,數據庫、redis都配置好了,但是打開easy-mock主頁就報錯”。最後查出日誌中有“node-gyp”的問題,然後我把node-gyp升級到4.0.0,再刪除安裝生成的node_modules目錄,然後重新運行npm install命令就好了。這個問題應該是安裝的部分依賴不對導致的)
-
(0) 注:本文大部分安裝步驟和官網一直,也可去看官網:官網教程
-
(1) 直接下載easy-mock源碼,或者使用如下git命令獲取源碼
git clone https://github.com/easy-mock/easy-mock.git
- (2) 下載完畢後,進入easy-mock目錄中,使用如下命令安裝
npm install
- (3) 找到config/default.json文件,修改裏面的mongodb配置和redis配置(如果mongodb和redis都是和easy-mock在同一臺機器,並且沒有做特殊設置的話,使用默認配置就行,不需要修改)。配置文件如下:
{
"port": 7300,
"host": "0.0.0.0",
"pageSize": 30,
"proxy": false,
"db": "mongodb://localhost/easy-mock",
"unsplashClientId": "",
"redis": {
"keyPrefix": "[Easy Mock]",
"port": 6379,
"host": "localhost",
"password": "",
"db": 0
},
"blackList": {
"projects": [],
"ips": []
},
"rateLimit": {
"max": 1000,
"duration": 1000
},
"jwt": {
"expire": "14 days",
"secret": "shared-secret"
},
"upload": {
"types": [".jpg", ".jpeg", ".png", ".gif", ".json", ".yml", ".yaml"],
"size": 5242880,
"dir": "../public/upload",
"expire": {
"types": [".json", ".yml", ".yaml"],
"day": -1
}
},
"ldap": {
"server": "",
"bindDN": "",
"password": "",
"filter": {
"base": "",
"attributeName": ""
}
},
"fe": {
"copyright": "",
"storageNamespace": "easy-mock_",
"timeout": 25000,
"publicPath": "/dist/"
}
}
- (4) 使用如下命令啓動easy-mock
npm run dev
- (5) 使用瀏覽器訪問 http://127.0.0.1:7300 如圖
2 如何導入swagger
- (1) 點擊“創建項目”的按鈕(也就是右下角的“+”號)
- (2) 下圖需要填一個swagger.json的地址。(如果你也是springboot+swagger的項目,後面的/v2/api-docs是固定的)
- (3) 創建完畢後,項目如圖
3 使用java進行集成測試
3.1 前言
現在我們的項目大都是微服務,服務之間都通過restful接口進行調用。假設A服務需要調用B服務的某些接口,但是B服務不能很快的開發完畢,那麼A服務就要等着B服務開發完畢,這樣資源就浪費了。爲了解決這個問題,mock技術就誕生了。
B服務可以先不急着實現,可以先把接口都定義好,包括接口的url、參數列表、請求頭和響應體。把這些信息再導入到easy-mock中,那麼A服務就可以調用了。這樣的話,A和B就可以並行開發。
而且,在實際開發中,一個項目的開發都是先定義好接口,再去實現具體的代碼的。也就是說easy-mock還充當着接口管理的角色。
3.2 實現
下面我使用jbot項目中的 /jbot/produce 這個接口爲例做集成測試。爲了簡單起見,我只使用該接口中的projectName參數。(ps:不用去管這個接口的實際作用,就當作一個普通的接口看,能夠傳入參數,然後返回結果就行)
我要實現的功能是:
新建一個本地項目,去調用easy-mock中jbot項目的/jbot/produce這個接口。然後jbot的該接口根據不同的projectName參數返回不同結果。
- (1) 在easy-mock中,點擊/jbot/produce這個接口的“編輯”按鈕(就是接口旁邊的“鉛筆✎”圖標),在打開的頁面中配置接口響應體,如下:
// 如下代碼邏輯是,如果傳入的projectName參數爲“wangll”,則返回“success”字符串,否則返回“fail”
{
data: function({
_req
}) {
if (_req.query.projectName === 'wangll') {
return "success"
} else {
return "fail"
}
}
}
寫完後,點擊“更新接口”
我們先在easy-mock中模擬一下,點擊接口旁的“預覽”按鈕(也就是“眼睛”圖標),在打開界面中可以模擬接口的調用。
傳參不對返回fail圖:
傳參正確返回success圖:
- (2) 通過上面操作,easy-mock中就操作完了,然後我們創建一個java項目去遠程調用上述接口(ps:創建項目與發送http請求的操作請自行百度,下面我們直接上代碼)
點擊接口旁“複製接口地址”的接口(也就是“鎖鏈”的圖標),我複製的如下:
http://192.168.40.254:7300/mock/5cf78503f8bed0ed396119e1/jbot/v2.0/jbot/produce
接口解釋:5cf78503f8bed0ed396119e1是每個用戶都不一樣,其他的都是自己配置的
代碼如下:
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
// 使用的是springboot的restTemplate
public class TestMock {
@Test
public void testMock(){
try {
RestTemplate restTemplate = new RestTemplate();
Map<String,Object> m = new HashMap<>();
m.put("projectName","aaaaa");
Object e = restTemplate.getForObject("http://192.168.40.254:7300/mock/5cf78503f8bed0ed396119e1/jbot/v2.0/jbot/produce",Object.class,m);
System.out.println(e.toString());
}catch (HttpClientErrorException e){
e.printStackTrace();
}
}
}
本文地址:
如有問題,歡迎留言