easy-mock本地部署與集成測試

1 本地部署easy-mock

項目地址:https://github.com/easy-mock/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

啓動成功

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圖:
fail
傳參正確返回success圖:
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();
        }
    }
}

本文地址:
如有問題,歡迎留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章