一、前言
之前一直聽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
指定配置文件