通過mock-server模擬響應與代理轉發
接口測試與界面測試過程中,會存在期望請求返回預期結果;非期望請求接口數據正常返回的場景。使用mock-server可以滿足如下:
- 涉及數據查詢接口,根據數據查詢返回決定后續操作。避免修改數據庫造成數據污染。
- 指定某些測試請求,可以對期望進行匹配,其余進行轉發。將正常使用接口mock數據指定到某個case。
記錄一下測試過程中用到的mock-server,更多內容查看官網教程
工具選用
使用mock-server,主要用到了其中的3個功能:期望匹配、模擬響應、請求轉發

期望匹配與模擬響應

期望匹配與請求轉發
安裝mock-server
1. 啟動方式
mock-server的安裝方式比較多,這里使用比較簡單的jar包直接在服務器上啟動(需要java環境)。
java -jar <path to mockserver-jetty-jar-with-dependencies.jar> -serverPort <port> [-proxyRemotePort <port>] [-proxyRemoteHost <hostname>] [-logLevel <level>]
# -serverPort <port> 代理監聽端口
# -proxyRemotePort <port> 不符合期望的轉發到指定端口
# -proxyRemoteHost <hostname> 不符合期望的轉發到指定ip
# -logLevel <level> 日志級別:TRACE, DEBUG, INFO, WARN, ERROR, OFF or Java Logger levels: FINEST, FINE, INFO, WARNING, SEVERE or OFF。可以不從命令行指定,使用-Djava.util.logging.config.file="日志配置文件"來指定java自帶日志java.util.logging的配置文件指定日志
2. 設置期望
設置期望有兩種方式:
- 在啟動服務時使用 -Dmockserver.initializationJsonPath=“期望配置文件” 指定期望(期望文件可以放在zookeeper或者consul每次啟動使用命令獲取)。
- 在服務啟動后使用自帶接口:/reset、/expectation管理。接口文檔地址:mock-server接口文檔
期望配置文件參數:
- 期望從上到下依次匹配
- 期望支持正則
- 請求body包含期望body參數即為匹配,詳細參數見期望配置文檔:期望配置文檔
- 返回指定任意類型或者轉發。
[{
"httpRequest": { # 期望1
"path": "/stat/userScope/props", # 請求路徑匹配,支持正則
"body": { # 請求體匹配
"ai": "0a1b4118dd954ec3bcc69da5138bdb96",
"userScope": "cs1:141155"
}
},
"httpResponse": {
"body": {
"data": [{
"data": "some first response"
}
],
"status": "success"
}
}
},
{
"httpRequest": {# 期望2
"path": "/.*"
},
"httpForward": { # 代理轉發請求
"host": "qa-qs0",
"port": 6068,
"scheme": "HTTP"
}
}
]
3. 編寫shell腳本管理
使用shell腳本啟動停止服務也可以將mock-server配置到systemctl。腳本是centos下寫的比如netstat命令與macos有點沖突,所以在macos下使用可能有點問題。

腳本運行方式
# 目錄結構
mockserver
├── conf
│ ├── logging.properties
│ └── mock-server.json
├── lib
│ └── mockserver-netty-5.8.1-jar-with-dependencies.jar
├── log
│ ├── mock-server.log.0
│ └── mock-server.log.0.lck
└── mock-server.sh
測試與附件
1. 測試期望

預期期望-預期返回

預期期望-代理轉發
2. 通過接口管理期望

重置期望

設置期望

修改期望后-請求返回
3. logging.properties例子
# To use this file set System Property on JVM as follows: -Djava.util.logging.config.file=/path/to/logging.properties
# Logging
handlers = java.util.logging.FileHandler, org.mockserver.logging.StandardOutConsoleHandler
.level = ALL
org.mockserver.level = INFO
io.netty.handler.ssl.SslHandler.level = WARNING
java.util.logging.SimpleFormatter.format = %1$tF %1$tT %4$s %5$s %n
# File Logging
java.util.logging.FileHandler.pattern = log/mock-server.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.limit=50000
java.util.logging.FileHandler.count=3
java.util.logging.FileHandler.level=DEBUG
java.util.logging.FileHandler.append=true
# Console Logging
org.mockserver.logging.StandardOutConsoleHandler.level = ALL
org.mockserver.logging.StandardOutConsoleHandler.formatter = java.util.logging.SimpleFormatter