為何使用Mountebank
??在實施測試的過程中,碰到以下場景秉颗,你腦海里第一時間是不是想到找開發(fā)、找開發(fā)送矩、找開發(fā)蚕甥。
- 下游應(yīng)用測試環(huán)境不穩(wěn)定,導(dǎo)致自動化測試腳本經(jīng)常執(zhí)行失敗栋荸。
- 調(diào)用方請求進行測試菇怀,但是本應(yīng)用的接口尚未開發(fā)完成凭舶。
- 某些業(yè)務(wù)場景使用正常的測試方法很難模擬,比如接口調(diào)用超時等爱沟。
- 系統(tǒng)尚未開發(fā)完成帅霜,但急需給客戶進行展示。
- TDD模式實施過程中經(jīng)常碰到協(xié)同模塊尚未開發(fā)完成呼伸。
??作為一名測試人員身冀,如果我們具備了以上問題的解決能力,測試效率肯定大大的提升括享。
??moutebank作為一個開源的搂根、跨平臺、支持多協(xié)議的服務(wù)模擬工具铃辖,有效地幫助測試人員解決以上問題剩愧。
??我們也可以看看官網(wǎng)推薦使用mountebank的理由。
Trivial to get started
??mountebank is easy to install, without any platform dependencies. mountebank aims for fun and comprehensive documentation with lots of examples, and a nice UI that lets you explore the API interactively.
A platform, not just a tool
??mountebank aims to be fully cross-platform, with native language bindings. Servers are extensible through scripting when the out of the box functionality isn't enough.
Powerful
??mountebank is the only open source service virtualization tool that is non-modal and multi-protocol. Commercial solutions exist, but their licensed platforms make it hard to move the tests closer to development and may even require a specialized IDE. mountebank provides service virtualization free of charge without any platform constraints
Mountebank工作原理
??moutebank的工作原理娇斩。
Mountebank安裝
- 安裝Nodejs
- 安裝Mountebank
- npm install -g mountebank
- 啟動Mountebank
- mb命令啟動mountebank隙咸。
Mountebank使用示例
-
啟動mountebank
- mb --configfile d:\mountebank_ejs\main.ejs --allowInjection
- 啟動mountebank后,再進入http://localhost:2525/imposters成洗,發(fā)現(xiàn)mock腳本已注入到imposters五督。
moutebank注入.png
-
接著使用jmeter編寫一個簡單的jmx腳本進行測試驗證。
jmx測試腳本.png -
運行腳本
腳本結(jié)果.png
針對運行結(jié)果瓶殃,咱們結(jié)合以下mock腳本createAccount.ejs源碼進行分析充包,發(fā)現(xiàn)ejs腳本分了兩大塊,predicates和responses遥椿,對應(yīng)就是前置條件和響應(yīng)信息基矮。predicates里我們使用了關(guān)鍵字deepEquals,表示深度匹配。再回看jmx腳本冠场,咱們上送的path和body滿足predicates條件家浇,所以運行腳本后返回了對應(yīng)的responses。
"deepEquals": {
"path": "/v1/createAccount",
"body": "\"accountNo\":\"123\""
}
??至此碴裙,咱們完成了一個簡單mountebank示例钢悲,mountebank提供了更高級的用法,比如代理proxy舔株、javascript注入等莺琳。總之载慈,mountebank足以實現(xiàn)你所有的mock場景惭等。文章最后附上mock腳本源碼,有興趣的童鞋可以嘗試办铡,相信你會愛上mountebank辞做。
各腳本源碼如下:
main.ejs源碼
{
"imposters": [
<% include proxy.ejs %>,
<% include iiacct.ejs %>
]
}
iiacct.ejs源碼
{
"port": 8187,
"protocol": "http",
"stubs": [
<% include recharge.ejs %>,
<% include withdraw.ejs %>,
<% include createAccount.ejs %>
]
}
createAccount.ejs源碼
{
"predicates": [
{
"contains": {
"path": "/v1/createAccount",
"body": "\"merchantId\":\"123\""
}
}
],
"responses": [
{
"is": {
"statusCode": 500,
"headers": {
"Server": "Apache-Coyote/1.1",
"Content-Type": "text/json;charset=UTF-8",
"Content-Length": 298,
"Date": "Tue, 05 Sep 2017 06:49:14 GMT",
"Connection": "close"
},
"body": "{\"data\":{\"errCode\":\"iia-trade-00010\",\"errMsg\":\"商戶不存在\"},\"message\":\"業(yè)務(wù)處理失敗\",\"status\":\"GW-10510\",\"sign\":\"6tbbBajxsMTsql1Gl/VSsI7BHilAvCtA9J0FGiN7+p3Nde7vwZVd9taneNIp4M1zsRhqXXHMFTp67ZFTUItcI8PB4UFnltXomCCW1Jya7dI+hpQilUs2rLQ1WcumGN3GqjWaE472FQbOX2muzcUjJbsMosTo+P0SPawhO5m83Uw=\"}",
"_mode": "text",
"_proxyResponseTime": 135
}
}
]
},
{
"predicates": [
{
"deepEquals": {
"path": "/v1/createAccount",
"body": "\"accountNo\":\"123\""
}
}
],
"responses": [
{
"is": {
"statusCode": 500,
"headers": {
"Server": "Apache-Coyote/1.1",
"Content-Type": "text/json;charset=UTF-8",
"Content-Length": 299,
"Date": "Wed, 06 Sep 2017 07:53:46 GMT",
"Connection": "close"
},
"body": "{\"data\":{\"errCode\":\"iia-acct-00003\",\"errMsg\":\"賬戶不存在123899\"},\"message\":\"業(yè)務(wù)處理失敗\",\"status\":\"GW-10510\",\"sign\":\"v31ud5d5le/XspEbZevxgu3y5oBfW8lAlyWbeL3O4UnZlIY6Fw8kPreoti4de/CbEI0TpoGCkMAz5NWEAXcX4sny2DM8MK8ZxFAZ2x17H4obaxHKcu09n4a2deEHyaie4k021/8q1t5fucO7ZoEI9QZvyGj/JhC7AzEq1RagFOk=\"}",
"_mode": "text",
"_proxyResponseTime": 661
}
}
]
}