Moco框架的搭建使用

一、前言

  之前一直聽mock,也大致瞭解mock的作用,但沒有具體去了解過如何用工具或框架實現mock,以及也沒有考慮過落實mock,因爲在實際的工作中,很少會考慮用mock。最近在學java,剛好了解到moco框架是用於mock的,湊巧就實踐一下基本的運用吧。

二、Mock介紹

  Mock技術又叫測試樁、擋板,就是在測試過程中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以便測試的測試方法。 在具體的測試過程中,我們經常會碰到需要模擬數據或者接口的情況,因爲環境問題或者系統複雜度的問題,我們需要使用 Mock 方式進行數據的模擬。

1、測試行業中的應用場景

1.某個新需求,開發未完成,測試人員使用mock技術,把新增的業務使用mock技術模擬出來,進行初步測試,等開發人員開發完成,再進行真實環境測試。

2.在項目中,經常會用到很多第三方接口,比如充值、防沉迷驗證。第三方接口返回效率低、環境搭建麻煩,可以使用mock技術,先測試整體流程。

2、怎麼用mock?

1.測試團隊開發--技術要求高,使用django、flask等

2.使用現成工具  postman、fiddler等

3.不寫代碼,使用框架(moco)去創建mock   moco.jar+xxx.json  (簡單)

三、Moco框架介紹

  moco可以理解爲一個mock的工具框架,一個簡單搭建模擬服務器的工具,下載下來是一個jar包。

特點:

1.只需要簡單地配置request、response等即可滿足需求

2.支持http、https、socket協議,非常靈活

3.支持在request中設置Headers、Cookies、StatusCode等

4.支持get、post、put、delete等請求方式

5.無需環境配置,有Java環境即可

6.支持熱更新,修改配置後,立即生效,只需要維護接口即可

7.支持多種數據格式,如json、text、xml、file等

8.可與其他工具集成,如Junit、Maven等

四、Moco工作原理

五、Moco框架運行

1、環境說明

  需先安裝JDK並配置環境變量

2、Moco下載

  下載地址:https://github.com/dreamhead/moco

3、Moco目錄結構

  在本地新建一個文件夾,將下載好的jar包放入文件夾,然後新建json配置文件,以下是以自己電腦爲例截圖:

4、Json說明

1)moco-get.json

[
  {
    "description": "一個簡單的get請求",
    "request": {
      "method": "get",
      "uri": "/login"
    },
    "response": {
      "text": "我是login get method",
      "headers":{
        "Content-Type":"text/html;charset=utf-8"
      }
    }
  },
  {
    "description": "帶參數的get請求,p1和p2是兩個參數",
    "request": {
      "method": "get",
      "uri": "/reg",
      "queries": {
        "p1": "v1",
        "p2": "v2"
      }
    },
    "response": {
      "text": "帶參數的get請求",
      "headers":{
        "Content-Type":"text/html;charset=utf-8"
      }
    }
  },
  {
    "description": "get請求返回json類型數據",
    "request": {
      "method": "get",
      "uri": "/login_json"
    },
    "response": {
      "json": {
        "key":"value",
        "請求方式是get":"響應結果爲json類型"
      },
      "headers": {
        "Content-Type": "application/json;charset=utf-8"
      }
    }
  }
]

2)moco-post.json

[
    {
        "description": "定義請求方式,通過method參數定義",
        "request": {
            "uri": "/index",
            "method": "post"
        },
        "response": {
            "text": "hello world"
        }
    },

{
        "description": "定義請求參數,通過queries參數定義",
        "request": {
            "uri": "/index",
            "method": "get",
            "queries": {
                "area": "010",
                "kw": "hello"
            }
        },
        "response": {
            "text": "hello world"
        }
    },
{
        "description": "定義請求頭,通過headers參數定義",
        "request": {
            "uri": "/login",
            "method": "post",
            "headers": {
                "area": "010"
            }
        },
        "response": {
            "text": "hello world"
        }
    },
{
        "description": "定義表單請求體,通過forms參數定義",
        "request": {
            "uri": "/login",
            "method": "post",
            "forms": {
                "username": "tom",
                "password": "123456"
            }
        },
        "response": {
            "text": "login success"
        }
    },
{
        "description": "定義JSON請求體,通過json參數定義",
        "request": {
            "uri": "/login",
            "method": "post",
            "headers": {
                "Content-Type": "application/json"
            },
            "json": {
                "username": "tom",
                "password": "123456"
            }
        },
        "response": {
            "text": "hello world66666"
        }
    },
{
        "description": "定義HTTP響應狀態碼,通過status參數定義",
        "request": {
            "uri": "/index2"
        },
        "response": {
            "status": 500,
            "text": "error"
        }
    },
 {
        "description": "定義JSON響應數據,通過json參數定義",
        "request": {
            "uri": "/login"
        },
        "response": {
            "headers": {
                "Content-Type": "application/json;charset=UTF-8"
            },
            "json": {
                "code": "10000",
                "msg": "操作成功",
                "data": {
                    "uid": 2,
                    "token": "xxx"
                }
            }
        }
    }
]

3)moco-redirect.json

{
    "description":"重定向到指定網站",
    "request":{
      "method":"get",
      "uri":"/login_redirect"
    },
    "redirectTo":"https://www.baidu.com"
  }

字段說明:

  • description:程序不會識別,是寫給我們自己看的;

  • request:請求,裏面的 uri 是我們訪問應用的時候拼接在端口後面的路徑;

  • response:響應內容;

其他說明:post中

  • headers:請求頭,根據是form還是json格式的請求來填寫
  • from格式:"content-type": "application/x-www-form-urlencoded"
  • json格式:"content-type": "application/json"
  • 請求參數格式以及數據,對應headers的content-type
  • form格式關鍵字爲forms
  • json格式關鍵字爲json

5、Moco啓動服務

  有了jar包和json數據,就可以啓動moco了

  打開cmd,切到jar包所在的路徑後,執行指令:java -jar jar包的路徑 http -p 運行端口 -c 要運行的文件路徑

  以自己電腦爲例,啓動成功後效果如下:java -jar moco-runner-1.3.0-standalone.jar http -p 8899 -c moco-get.json

6、驗證

1)打開瀏覽器,輸入地址訪問:

http://localhost:8899/login

http://localhost:8899/reg?p1=v1&p2=v2

http://localhost:8899/login_json

2)post請求的不能直接通過地址訪問,可以用接口工具訪問

  這裏就不演示,類似訪問正常接口

7、拓展-Moco引入配置文件

  moco支持在配置文件中引入其他配置文件,這樣可以分服務/模塊定義配置文件,便於對配置文件的管理。

實現步驟:

1)分服務/模塊定義配置文件,如分別定義moco-get.json、moco-post.json、moco-redirect.json文件

2)定義啓動配置文件,如config.json並引入其他配置文件

3)啓動服務:java -jar moco-runner-1.3.0-standalone.jar http -p 8899 -g config.json

注意:通過-g config.json指定配置文件

 

 

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