Moco测试知多少?

什么是mock?

Mock就是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来替代它,帮助我们测试这种场景。

一般前端工程师会在后端工程师还没有完成后台接口开发的时候,自己根据事先约定好的api文档自己mock一个接口,用来调试他的前端页面。

这里的mock我们就可以理解为创建了一个虚拟的接口。

我们测试人员在测试的时候,有时候遇到需要第三方接口返回特定数据以符合特定的测试场景,这种情况需要和第三方厂商进行沟通,联调测试,效率低成本高,此时我们就可以利用mock的方式,自己创建一个虚拟的第三方接口返回,来代替。

不光是第三方接口,有时候测试一些异常场景的前端展示,也可以用mock的方式快速模拟出这种场景.

在自动化测试的场景,我们也会遇到因为依赖的第三方接口不稳定,而导致自动化测试用例执行失败,影响了我们自动化测试用例的执行效率,我们同样可以把这些依赖的接口用mock来代替,增强自动化测试的稳定性。

下载moco

Moco是一个简单易用的mock工具,可以通过简单的配置request和response 对象,达到模拟请求效果。

我们可以直接去github上获取moco的jar包

https://github.com/dreamhead/moco

这里展示了关于moco的介绍和源码,我们可以点击箭头处直接下载它的jar包

配置json文件

我们需要先编辑一个json文件,用来定义不同的请求得到的不同返回值.

新建一个文件,格式改为json.然后打开这个文件进行编辑.如图:

其中description代表的是注释,里面内容可以填一些这个请求相关的注释内容,帮助增加这个json文件的可读性,uri就是我们这个接口的统一资源标识符,可以根据你想摸你的接口自定义,下面的response里的内容代表了返回的值

此时我们编辑好了一个简单的mock文件,我们来看看效果。

 启动moco

首先把我们下载下来的moco的jar包和刚刚编辑好的json文件放到同一个文件夹路径下,如图:

然后在该路径下打开cmd命令行

在该路径下,输入cmd,按回车,弹出命令行.

输入命令:java -jar moco-runner-1.1.0-standalone.jar http -p 8888 -c test.json

其中jar包的名称你们根据自己下载的jar包版本来写,后面的http代表这个模拟的是http请求,-p 8888 定义是端口号,-c test.json 写的是我们编辑的那个json文件名,根据你们自己编辑的文件名称来写。

执行命名后,如图:

此时我们mock的服务以及启动成功了,相当于在我们本地的8888端口上启动的,所以我们可以通过浏览器访问一下localhost:8888/demo 来看看返回的结果,注意,这里/demo就是我们在json文件中定义的uri。

如图,我们访问后得到了json文件中编辑的返回值。

以上我们就完成了用moco来帮助我们生成mock。

 同一个请求不同的入参mock不同的返回值

刚刚我们的请求是一个get请求,且不带任何参数,如果我们想mock

多种情况的话,就可以在json文件中编辑多种情况的请求,格式如图:

图中我们给了这个请求2中入参的情况,分别返回2种值,我们可以使用postman来试下,或者直接在浏览器打开,如图:

当请求入参分别为123和444的时候,返回的值不同。

如果你修改一个你没有配置的入参,此时请求就会报错,如图:

 配置不同的请求类型

刚刚我们试的都是get请求,我们可以通过在文件中配置请求类型来生成一个post类型的请求,如图:

如图我们是在request中加入了method参数,把它的值设置为post,然后增加了form的入参,在其中添加我们这个请求的入参,我在这里设置了2种入参的请求,分别对应的返回值也不同,分别为当param1=test1和test2的情况,我们来试试看。

由于post类型的请求我们不能直接用浏览器来发起,这里我们可以借用接口测试工具,发送请求,我这里用了postman,发送请求如图:

 

如图所示分别为test1和test’2的返回情况,说明我们的post请求mock也完成了。

总结

Moco还可以通过在json文件中添加cookies,header,重定向这些参数,来模拟各种情况下的请求和返回值,大家可以根据自己工作的需求去对这些东西进行了解。

Moco是热更新的,所以当你启动了jar包的服务之后,即使此时修改了json文件中的内容,你也不需要重启服务,就可以生效了。

掌握了mock测试的技术,可以让我们在开发没有完成对应接口的时候,有接口文档就提前进入到测试状态,是现在敏捷模式下不可或缺的技术,也是持续集成中一个重要的组成部分。

原文地址:https://www.cnblogs.com/vvvviptest/p/12848545.html