Mock测试,何去何从

2016-10-24   出处: Qtest之道  做/译者:闫耀珍  

 

上面的情景是否是似曾相识呢?现今的业务系统已经不多是孤立存在的了,尤为对于一个大公司而言,各个部门之间的配合很是密切,咱们或多或少都须要使用兄弟团队或是其余公司提供的接口服务,固然,咱们也会给其余兄弟部门提供接口。这样的话,就对咱们的联调和测试形成了很大的麻烦。假如各个兄弟部门的步伐彻底一致,那么问题就会少不少,希望望是美好的,现实是残酷的,要作到步伐一致基本是不可能的。因此,对于这种状况,咱们的解决方案一般是搭建一个临时的mock server来模拟那些兄弟部门未开发完成的接口,以达到单方面联调测试的效果,咱们下面会介绍一些mock小工具。通常来讲,搭建这种临时的mock server比较简单,可是每每也意味着功能简单,有时候可能咱们得须要为不一样的接口进行重复开发以实现特定功能。这样的话问题就来了,随写随仍不是咱们互联网人一向的做风,咱们须要将这种基础服务传承下去,要服务于众多的其余互联网人,咱们称之为share。那么能不能构建一个通用的mock server呢?本身动手丰衣足食,萌生了本身开发一套mock系统,就有了如今的雏形——xMock,且听我慢慢道来关于mock的二三事。前端

1、什么是mock?

mock这个单词解释起来,本意就是模拟或者效仿。咱们能够把mock理解为一个替身,在软件开发领域,一般就是指模拟对象。java

 

2、为何须要Mock?Mock是为了解决不一样的单元之间因为耦合而难于开发、测试的问题。因此,Mock既能出如今单元测试中,也会出如今集成测试、系统测试过程当中。  python

                                            

如上图所示,A接口依赖于B、C、D三个接口,若是这三个接口没有都准备好的话,咱们必须对它们进行模拟才能继续A接口的开发调试。nginx

 

3、Mock的好处是什么? 
1. 团队能够并行工做

有了Mock,先后端人员只须要定义好接口文档就能够开始并行工做,互不影响,只在最后的联调阶段往来密切;后端与后端之间若是有接口耦合,也一样能被Mock解决;测试过程当中若是遇到依赖接口没有准备好,一样能够借助Mock;不会出现一个团队等待另外一个团队的状况。这样的话,开发自测阶段就能够及早开展,从而发现缺陷的时机也提早了,有利于整个产品质量以及进度的保证。git

 

2. 开启TDD模式,即测试驱动开发

单元测试是TDD实现的基石,而TDD常常会碰到协同模块还没有开发完成的状况,可是有了mock,这些一切都不是问题。当接口定义好后,测试人员就能够建立一个Mock,把接口添加到自动化测试环境,提早建立测试。github

 

3. 能够模拟那些没法访问的资源

好比说,你须要调用一个“墙”外的资源来方便本身调试,就能够本身Mock一个。web

 

4. 隔离系统

假如咱们须要调用一个post请求,为了得到某个响应,来看当前系统是否能正确处理返回的“响应”,可是这个post请求会形成数据库中数据的污染,那么就能够充分利用Mock,构造一个虚拟的post请求,咱们给他指定返回就行了。数据库

 

5. 能够用来演示

假如咱们须要建立一个演示程序,而且作了简单的UI,那么在彻底没有开发后端服务的状况下,也能够进行演示。说到演示了,假如你已经作好了一个系统,而且须要给客户进行演示,可是里面有些真实数据并不想让用户看到,那么一样,你能够用Mock接口把这些敏感信息接口所有替换。json

 

6. 测试覆盖度

假若有一个接口,有100个不一样类型的返回,咱们须要测试它在不一样返回下,系统是否可以正常响应,可是有些返回在正常状况下基本不会发生,难道你要想方设法地给系统作各类手脚让他返回以便测试吗?好比,咱们须要测试在当接口发生500错误的时候,app是否崩溃,别告诉我你必定要给服务端代码作些手脚让他返回500 。。。而使用mock,这一切就都好办了,想要什么返回就模拟什么返回,妈妈不再用担忧个人测试覆盖度了!windows

 

 4、有哪些mock小工具既然Mock好处这么多,仍是赶忙看看有哪些Mock方法吧。下面我介绍下我接触过的一些Mock小方法。

1. Mock Server-Moco这是一个jar包,只要执行该jar包,指定配置文件,就可开启一个http服务器提供服务,而且修改配置文件后也无需重启服务,支持动态加载。我使用的是moco-runner-0.10.2-standalone.jar,运行方式以下:```java -jar moco-runner-0.10.2-standalone.jar start -p 8080 -c ***.json```***.json就是咱们的mock配置文件,好比:

具体其余使用方法请参照官方文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

 

2. www.jsonohyeah.com

这是一个在线mock网站,操做简单,但url是自动生成的,接口逻辑也没法实现定制化。考虑这样一个场景:前端人员在使用mock接口时,确定但愿接口地址和最终上线的地址彻底同样,这样就无需在联调时修改接口地址了,只需配置一个hosts,否则的话,改来改去不免改错。对于这样的场景,这个mock网站就实现不了,更不用说其余更加定制化的需求。

 

3. fiddlerfiddler你们都很熟了,可谓是居家旅行之必备,在windows环境能够随便自定义返回内容,但一个很大的缺点是,它不跨平台,而咱们平时的不少场景下,是须要在Linux下进行mock的。还有一些其余mock工具,大多都是经过编写js代码或者python、java等代码来达到mock目的,此处就再也不介绍了。

介绍了这么多mock工具,那么哪一个最好使呢?个人要求其实很少,一是数据要好管理,别让我管理一堆文件;二是mock接口最好能够设置成和真实接口彻底一致,这样就只须要切换hosts就能够切换mock接口和真实接口,不须要修改代码;三是跨平台,mock接口在windows和Linux下都须要可用。至于跨域、动态加载什么的,这是必须条件。个人要求确实很少,但上面介绍的都无法所有知足。

 

5、xMock系统诞生始末xMock是BS架构,web页面录入接口信息后,能够在任何平台下调用mock接口,知足了跨平台;接口信息保存在数据库中,解决了文件方式很差管理的问题;web页面录入接口信息,任何人均可以轻松操做,不须要代码知识,使用门槛低;经过nginx访问配置好的mock接口,后台统一处理请求信息,进行url匹配,解决了mock接口和真实接口一致性的问题。xMock系统使用很是简单,只要三步:填写项目信息,在对应项目下填写接口信息,配置hosts便可访问。页面以下:

xMock系统的核心——mockserver,采用nginx做为前端代理,将接收到的全部请求所有转发到后台mockserver,mockserver接收到请求后,对url进行预处理,根据url以及请求方式,在数据库中查找对应的响应并返回,流程以下图:

好,xMock系统搭建起来了,正好有个需求,咱们须要调用360移动开放平台的一个获取特定帐号下app信息的接口,可是这个接口在测试环境下没法获得想要的信息,好了,咱们按照真实接口的返回格式,将咱们想要的返回以及其余信息录入xMock,而后在Linux配置hosts,将接口地址指向提供mock服务的ip,web产品页面调用接口,欧耶,顺利返回了设置好的内容!

这就是mock带给咱们的便利。

 

相关文章
相关标签/搜索