0
点赞
收藏
分享

微信扫一扫

Mock service之Mountebank入门

为何使用Mountebank

  在实施测试的过程中,碰到以下场景,你脑海里第一时间是不是想到找开发、找开发、找开发。

  • 下游应用测试环境不稳定,导致自动化测试脚本经常执行失败。
  • 调用方请求进行测试,但是本应用的接口尚未开发完成。
  • 某些业务场景使用正常的测试方法很难模拟,比如接口调用超时等。
  • 系统尚未开发完成,但急需给客户进行展示。
  • TDD模式实施过程中经常碰到协同模块尚未开发完成。

  作为一名测试人员,如果我们具备了以上问题的解决能力,测试效率肯定大大的提升。
  moutebank作为一个开源的、跨平台、支持多协议的服务模拟工具,有效地帮助测试人员解决以上问题。
  我们也可以看看官网推荐使用mountebank的理由。

Mountebank工作原理

  moutebank的工作原理。

Mountebank安装

  • 安装Nodejs
    • Nodejs下载
  • 安装Mountebank
    • npm install -g mountebank
  • 启动Mountebank
    • mb命令启动mountebank。


Mountebank使用示例

  • 启动mountebank

    • mb --configfile d:\mountebank_ejs\main.ejs --allowInjection
    • 启动mountebank后,再进入http://localhost:2525/imposters,发现mock脚本已注入到imposters。

  • 接着使用jmeter编写一个简单的jmx脚本进行测试验证。


  • 运行脚本


针对运行结果,咱们结合以下mock脚本createAccount.ejs源码进行分析,发现ejs脚本分了两大块,predicates和responses,对应就是前置条件和响应信息。predicates里我们使用了关键字deepEquals,表示深度匹配。再回看jmx脚本,咱们上送的path和body满足predicates条件,所以运行脚本后返回了对应的responses。

"deepEquals": {
"path": "/v1/createAccount",
"body": "\"accountNo\":\"123\""
}

  至此,咱们完成了一个简单mountebank示例,mountebank提供了更高级的用法,比如代理proxy、javascript注入等。总之,mountebank足以实现你所有的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\":\"业务处理失败\",\"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\":\"业务处理失败\",\"status\":\"GW-10510\",\"sign\":\"v31ud5d5le/XspEbZevxgu3y5oBfW8lAlyWbeL3O4UnZlIY6Fw8kPreoti4de/CbEI0TpoGCkMAz5NWEAXcX4sny2DM8MK8ZxFAZ2x17H4obaxHKcu09n4a2deEHyaie4k021/8q1t5fucO7ZoEI9QZvyGj/JhC7AzEq1RagFOk=\"}",
"_mode": "text",
"_proxyResponseTime": 661
}
}
]
}
举报

相关推荐

0 条评论