mock-server 之 mock 接口測試


1、mock 介紹

  • mock 除了用在單元測試過程中,還有一個用途,當前端開發在開發頁面的時候,需要服務端提供 API 接口,此時服務端沒開發完成,或者說沒搭建測試環境,這個時候前端開發會自己 mock 一個 API 服務端,自己給自己提供調用接口的返回數據 mock-server 用途就是開發在開發的過程中,需要依賴一部分的接口,但是對方沒有提供或者環境等等情況

2、搭建 moco 環境

  • 工具
    • moco-runner-1.1.0-standalone.jar
      • 下載地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
    • jdk1.8  
      • 下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • 搭建步驟
  • 下載完成后,保存到電腦本地的一個目錄,然后在同一目錄下新建一個 test.json 文件,里面寫入如下內容
  • 注意:一定要注意 Json 格式問題    

[
  {
    "response" :
      {
        "text" : "Hello World!"    #text 在瀏覽器頁面拋出 response 文本內容 "Hello World!"
      }
  }
]
  • 接下來啟動moco服務,在 cmd 窗口進入到 moco-runner-1.1.0-standalone.jar 所在的文件夾目錄,輸入下面的命令,出現下圖結果則代表服務啟動成功
    • java -jar moco-runner-1.1.0-standalone.jar http -p 6666 -c test.json
      • -p 指定 Moco 服務端口

  • 最后在瀏覽器地址欄輸入:http://localhost:6666/
    • 注意:谷歌瀏覽器不支持,請使用火狐或者IE瀏覽器打開
  • 結果如下

3、moco 進階操作

  • 在 request 中設置 uri,訪問 http://localhost:6666/uri,就可以獲取到內容 HelloWorld!
[{
    "request": {
        "uri": "/test"    #在 request 中添加了 uri 
    },
    "response": {
        "text": "Hello World!"
    }
}]

  • url 帶有參數的請求,啟動瀏覽器,並訪問 http://localhost:6666/uri?parm=value
[{
    "request": {
        "uri": "/test",
        "queries":{                #定義地址欄拼接的參數
        "param":"value"
        }
    },
    "response": {
        "text": "Hello World!"
    }
}]

  • 返回特定的狀態碼 status
[{
    "request": {
        "uri": "/test",
        "queries": {
            "param": "value"
        }
    },
    "response": {
        "status": 222,            #定義返回狀態碼
        "text": "Hello World!"
    }
}]

  • 返回 json 報文數據
[{
    "request": {
        "uri": "/test"
    },
    "response": {
        "json": {                    #定義返回的報文內容
            "code": "0000",
            "msg": "success",
            "data": {
                "userId": "111222",
                "username": "17779828887",
                "password": "123456",
                "nickName": "Jack"
            }
        }
    }
}]

  • 定義 post 請求方式和 forms 請求參數
[{
    "request": {
        "headers": {
        "Content-Type": "application/x-www-form-urlencoded"        # 傳參類型為 form 表單
        },
        "method": "POST",
        "forms": {        # form 表單傳參需要使用 forms 定義參數
            "phone": "17779828887",
            "password": "123456"
        }
    },
    "response": {
        "json": {
            "uid": "123",
            "nickName": "xiaozheng"
        }
    }
}]

  • 定義 post 請求方式和 json 請求參數
[{
    "request": {
        "uri": "/test",
        "method": "POST",            # 定義 post 請求方式
        "headers": {
            "Content-Type": "application/json"        # 傳參類型為 json 
            },
        "json": {                # json 傳參需要用到 json 定義參數
            "username": "17779828887",
            "password": "123456"
        }
    },
    "response": {
        "json": {
            "code": "0000",
            "msg": "post success",
            "data": {
                "userId": "111222",
                "nickName": "Jack"
            }
        }
    }
}]

  • 定義 get 請求方式
[{
    "request": {
        "uri": "/test",
        "method": "get",        #定義 get 請求方式
        "queries": {                #參數采用拼接在地址欄的方式
            "username": "17779828887",
            "password": "123456"
        }
    },
    "response": {
        "json": {
            "code": "0000",
            "msg": "post success",
            "data": {
                "userId": "111222",
                "nickName": "Jack"
            }
        }
    }
}]

4、moco 常見問題

  • 返回報文出現中文亂碼問題處理
    • 在 response 中添加設置編碼格式為 "Content-Type": "text/json;charset=UTF-8"

"response": {
        "json": {
            "code": "0000",
            "msg": "成功",
            "data": {
                "status": 0
                }
        },
        "headers": {
            "Content-Type": "text/json;charset=UTF-8"
        }
}
  • 返回報文出現中文展示不全的問題,如下
    • 解決方法,在啟動 moco 服務命令中加入 -Dfile.encoding=UTF-8
java -Dfile.encoding=UTF-8 -jar moco-runner-1.1.0-standalone.jar http -p 8080 -c userLogin.json

 5、配置文件

  • 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,如下:
// config.json
# 定義了 context,則在接口 URL 中需要加入 context 值
# http://xxx.com/path1/login
# http://xxx.com/path2/pay
[ {"context":"/path1", "include":"login.json"}, {"context":"/path2", "include":"pay.json"} ]
    • 如果只是想引入多個 json 文件的話,config.json 文件中可以不使用 context 字段,如下
// 不使用 context 字段的 config.json。
# http://xxx.com/login
# http://xxx.com/pay
[ {"include":"login.json"}, {"include":"pay.json"} ]  
    • 如果 xxx.json 文件與 moco-runner 工具不在一個目錄下,則需要在 config.json 文件中的 include 值中加入路徑,如下

#在 include 的值中帶入文件路徑

[
   {"include":"login/login.json"},
   {"include":"pay/pay.json"}
]
    • login 和 pay 兩個文件沒有特殊要求,和之前的寫法一樣。如下:  
// login.json

[{
    "request": {
        "uri": "/login",
        "method": "POST",
        "json": {
            "phone": "18688886666",
            "password": "123456"
        }
    },
    "response": {
        "json": {
            "state": "0",
            "userId": "111222"
        }
    }
}]
// pay.json

[{
    "request": {
        "uri": "/pay",
        "method": "POST",
        "json": {
            "amount": "100",
            "price": "3",
            "userId": "111222"
        }
    },
    "response": {
        "json": {
            "state": "0",
            "orderId": "9321231324221"
        }
    }
}]
    • 然后啟動 moco 服務的命令是:
      • 注意:最后指定的參數是 -g config.json    
java -jar moco-runner-<version>-standalone.jar http -p 12306 -g config.json

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM