mb概述
安装好mb以后,直接通过mb命令启动服务,默认端口是2525,浏览器输入(http://localhost:2525) 访问试试看!
在RHEL7和Centos7下可以设定后台服务自动启动,配置的方法可以在这里配置方法获得,在这里不多扩展。
本人喜欢写段shell脚本来启动、停止mb服务,详情见后面。
-
mb命令启动常用参数
选项 | 描述 | 默认 |
---|---|---|
--command | start,stop,restart, replay(删除代理,转化为代理捕获的响应值,后面代理详解) | start |
--port 2525 | 指定mb运行的端口好,默认是2525 | 2525 |
--configfile imposters.ejs | mountebank将加载指定的模板文件,为了方便管理会把配置存储在EJS模板中。后面详细说明。 | N/A |
--logfile mb.log | mountebank用于存储日志的文件 | mb.log |
--loglevel debug | 日志级别 debug, info, warn, error | info |
--allowInjection | 是否允许脚本注入,mb支持针对谓词, 存根响应,行为装饰, 等待行为函数和 tcp请求解析的 JavaScript注入,但默认情况下禁用它们。 | false |
--localOnly | 请求隔离,仅接受来自localhost的请求 | false |
--ipWhitelist | 白名单环境隔离 | 所有IP地址 |
--pidfile | 为stop命令存储pid的文件 | mb.pid |
-
常用术语
- 冒名顶替者(imposter)
从社会角度来说他就是一个诈骗团伙,里面会有很多的骗子。
从技术角度来说imposter就是一个服务或系统骗子,他有端口、协议提供测试的服务,可以根据测试需要创建多个imposter。- 存根(stub)
用于为imposter生成响应的一组配置。一个imposter可以具有0个或多个stub。
从社会角度来说就是骗子公司的一个部门或产品线。
从技术角度来说stub就是提供一个服务的响应,一个请求的地址。
- 谓词(predicate)
配置响应stub的条件。每个stub可以有0个或更多predicate。
从社会角度来说就是要找相应的人做相应的事。
从技术角度来说predicate就是根据条件做相应的功能,返回对应的数据。
- 响应(response)
产生响应数据。每个stub可以有0个或更多响应。
- 响应类型(response type)
每个stub响应由定义响应行为的特定响应类型定义。目前支持的响应类型是:is,proxy,inject。
is是默认的类型,就是一般的应答输出。
proxy是代理响应类型,它允许记录重放行为。
inject允许您注入JavaScript函数以创建响应对象。
- 存根行为(stub behavior)
向响应添加其他的自定义处理,如可以后面通过shell脚本执行nodejs来获取动态的数据。
如果对上面的概念还不明白,没有关系,后面就让代码给你解释。
-
代码说明一切
前面对于他的结构说明了一番,不懂得没有关系,我们go on!
下面就是一个imposter,其实他就是一个json格式的文件,为了方便说明我在json里面加了注释(懂技术的人都会明白,这样会死的很惨!)。
{
"port": 8081,<!-- 端口号 -->
"protocol": "http",<!-- 通讯协议 -->
"stubs": [
{
"predicates": [
{
"equals": {
"method": "POST",<!-- 提交方式 -->
"path": "/customers/123"<!-- 访问地址 -->
}
}
],
"responses": [<!-- 响应数据 -->
{
"is": {
"statusCode": 200,
"headers": {
"Server": "Apache-Coyote/1.1",
"Access-Control-Allow-Origin": "*",
"Content-Type": "text/json;charset=UTF-8",
"Content-Length": 298,
"Date": "Tue, 05 Sep 2017 06:49:14 GMT",
"Connection": "close"
},
"body": {
"head": {
"rspcode": "100",
"respMsg": "成功",
"serialNo": "d7af14e5-a99e-4881-9b1b-695b7a760a64"
},
"body": {
"code": "S4393493",
"startDate": "2019-04-09",
"level": "3",
"endDate": "2020-04-08"
}
}
},
"_behaviors": {
"shellTransform": ["node ./dcs/test.js"]<!-- 这里可以通过shell脚本执行nodejs来修改body的数据 -->
}
}
]
},
{
"responses": [
{
"is": { "statusCode": 404 }<!-- 地址不匹配情况 -->
}
]
}
]
}
正常访问的情况下返回结果为:
{
"head": {
"rspcode": "100",
"respMsg": "成功",
"serialNo": "d7af14e5-a99e-4881-9b1b-695b7a760a64"
},
"body": {
"code": "S4393493",
"startDate": "2019-04-09",
"level": "3",
"endDate": "2020-04-08"
}
}
是不是很简单?
系统测试利器之挡板实战(一)
系统测试利器之挡板实战(三)
系统测试利器之挡板实战(四)
系统测试利器之挡板实战(五)
系统测试利器之挡板实战(六)
系统测试利器之挡板实战终结(七)