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

Moco测试知多少?的更多相关文章

  1. appium 自动化测试之知乎Android客户端

    appium是一个开源框架,相对来说还不算很稳定.转载请注明出处!!!! 前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecraz ...

  2. json处理三部曲之第三曲:利用Gson处理json

    需要导入gson-xxx.jar包 <dependency> <groupId>com.google.code.gson</groupId> <artifac ...

  3. 一个appium 博客

    http://www.cnblogs.com/tobecrazy/category/699177.html appium Java控制Appium server start/stop 摘要: 相信很多 ...

  4. CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆

    1.渐变字体 主要是看:-webkit-background-clip: text; 该属性 <style> .b1{ width: 500px; height: 200px; font- ...

  5. mongodb 3.2.x 启动 Warning 错误处理

    [root@restore1 data1]# mongod --dbpath=/data/data1/mongodb_data/ --directoryperdb ** WARNING: You ar ...

  6. MySQL使用可重复读作为默认隔离级别的原因

    一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQL Server等,而MySQL却使用可重复读(Read-Repeatable,RR). ...

  7. 腾讯优图及知脸(ZKface)人脸比对接口测试(python)

    一.腾讯优图 1.开发者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID.S ...

  8. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试

    ResultCode有很多的实现类 cmsCode有很多类型的错误异常 pgeService内当CmsPage这个对象为空的时候,异常类型就可以抛出CmsCode里面的错误代码 if(cmsPage1 ...

  9. 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询

    测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...

随机推荐

  1. excel2007灵活计算2个日期之间的工作日

    C1单元格公式:=NETWORKDAYS(A1,B1,$F$2:$F$10)+COUNTIFS($I$2:$I$3,">="&A1,$I$2:$I$3,"& ...

  2. 已解决[Authentication failed for token submission,Illegal hexadecimal charcter s at index 1]

    在初次学习使用shiro框架的时候碰到了这个问题,具体报错情况如下: [org.apache.shiro.authc.AbstractAuthenticator] - Authentication f ...

  3. MySQL常用控制台指令

    MySQL服务的启用与停止 MySQL服务的启用: net start mysql80 MySQL服务的停止: net stop mysql80 MySQL的登入与退出 数据库的登入: mysql - ...

  4. 软件攻城狮究级装B指南

    引言 装B于无形,随性而动,顺道而行,待霸业功成之时,你会发现:装B是牛B最好的的试金石. -- SuperDo 第一章.人间兵器(准备工具) <论语·魏灵公>:“工欲善其事,必先利其器. ...

  5. 郭盛华:DNS新漏洞可使黑客可以发起大规模DDoS攻击

    近日,知名网络黑客安全专家.东方联盟创始人郭盛华微博披露了有关影响DNS协议的新缺陷的详细信息,该缺陷可被利用来发起放大的大规模分布式拒绝服务(DDoS)攻击,以击倒目标网站.该漏洞称为NXNSAtt ...

  6. discuz mlv3.x命令注入

    本次漏洞是由于Discuz! ML对于cookie字段的不恰当处理造成的cookie字段中的language参数未经过滤,直接被拼接希尔缓存文件中,而缓存文件随后被加载,造成代码执行. 共有60出利用 ...

  7. 深入理解JS:var、let、const的异同

    目录 序言 var 与 let 的区别 作用域 重复声明 绑定全局对象 变量提升与暂存死区 let 与 const 异同 参考 1.序言 var.let 和 const 都是 JavaScript 中 ...

  8. Rocket - regmapper - RegisterCrossing

    https://mp.weixin.qq.com/s/82iLT-fmDg9Comp2p9bxKg 简单介绍RegisterCrossing的实现. 1. BusyRegisterCrossing 简 ...

  9. Rocket - diplomacy - enumerateBits

    https://mp.weixin.qq.com/s/KsZqe9W_DM6W6JecK_irvA   介绍AddressSet.enumerateBits方法的实现,主要是x & (-x)的 ...

  10. css定位和css3的基本

    定位方式:position需要搭配left|right |top |bottom 1.相对定位:相对于自身的位置进行偏移position: relative; 2.绝对定位:相对于有position属 ...