挡板起因
- 当今是多服务多协作的时代,任何系统不再是孤岛,而是相互依赖。
- 由于存在多系统间环境稳定难、数据准备难、并行开发难问题,造成多系统间联调测试需要大量的沟通成本、排查成本,为了解决这个让人头疼的问题,引出了挡板的概念。
- 其实挡板测试主要是为了模拟外围的系统、服务、接口而开发的mock。
- 如电商系统调用第三方支付进行订单的付款、充值等场景,在双方遵循接口协议的同时,不管开发联调、功能测试还是性能测试都能够让技术人员专注自己的功能实现。
- 一句话为了减少外围系统的影响,在接口协议的框架下专注自己的功能,减少扯犊子。
解决问题
- 挡板解决不稳定的问题:Mock服务非常简单,业务逻辑简单甚至没有,所以它足够稳定。
- 快速构造复杂数据:通过自定义返回结果,可以构造非常复杂的数据,不需要第三方给我们准备数据,即可以做业务验证。
- 快速构造异常场景:对于一些异常的情况,比如网络延迟高、重试机制、特殊异常返回都可以用挡板来构造。
- 契约测试、驱动测试开发、性能测试、演示测试统统适用。
框架说明
-
先复习下我们一般的系统架构,如下面的电商系统,会调用外围的系统支付、短信、实名认证、邮件通知等,对外通讯协议有tcp、https、http、smtp。
这里主要说明了调用外围系统的情景,其实内部之间的系统调用比这复杂。 -
我们在引入挡板的架构后,挡板对于核心系统访问应该是透明的,是美丽的谎言,具体架构如下:
-
我们再深入了解下挡板的架构,从功能的角度分为动态数据、静态数据提供。
-
挡板前置
提供接口的服务,用什么协议、用什么端口。
-
静态数据
静态的数据就是在写测试代码之前根据需要准备好,利用json数据格式(1.2)或其他文件的数据(1.1)存储,他的数据基本上是无需改动的。
-
动态数据
动态的数据就是在测试代码运行的时候才生成或根据业务去查询数据。
数据无上下文关系只是一些动态的数据输出,利用动态的函数生成数据(2.1),动态的函数生成可以使用mockjs,它里面提供常用的数据生成,后面详细介绍。
数据存在上下文关系,当前接口需要前面接口数据,利用数据库或NOSQL提供数据(2.2)。
-
定时回调
利用定时任务能够根据业务需求定时的把数据推到核心系统,是整个业务调用链路闭合。他的数据来自于静态或动态的数据。
技术选型
根据上面的架构要求,在繁多的开源框架中,选择了<label style="color:red">mountebank+mockjs</label>,其他的框架很多在这里不做评论,软件没有好坏之分,适合很重要!
mountebank本身相当强大,引用官方的话说mountebank可以提供跨平台、多协议的测试mock,就像我们所说的桩代码一样提供测试驱动,
是当前开源当中最强大的,完全可以治愈你的痛。
一句话mountebank简单便捷的实现挡板服务。
mountebank 简写 mb,注意后面直接称呼了。
mockjs本身也是可以提供mock的功能,我主要是看中了他强大的丰富的数据类型,生成动态的数据那是相当方便。
先尝尝鲜:
Mock.mock({
"number|1-100": 100
})
这个函数就很容易的得到1到100的随机数,相当方便吧。
环境安装
由于mountebank是基于nodejs,所以首先要安装下nodejs,版本要求是v6或以上(他的强大之处在这里就不多说了,做前端的朋友心里有数)。
官方下载https://nodejs.org/en/download/
或者
yum install -y nodejs
那就mb和其他的组件一起安装了
#安装mountebank
npm install -g mountebank
#http请求提交试用
npm install superagent --save
#日志打印
npm install log4js
#获取UUID试用
npm install uuid --save
#获取时间
npm install moment
#mysql连接用
npm install mysql -S
#定时任务
npm install cron
#mock常用函数组件
npm install mockjs
系统测试利器之挡板实战(二)
系统测试利器之挡板实战(三)
系统测试利器之挡板实战(四)
系统测试利器之挡板实战(五)
系统测试利器之挡板实战(六)
系统测试利器之挡板实战终结(七)