什么是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. xshell使用技巧

    XShell是一款Windows下的一款远程连接Linux主机的工具,类似的软件还有SecureCRT,putty等,但是个人感觉XShell好用,功能强大.. 一.复制和粘贴 linux的Shell ...

  2. Java-KTVByLinkedList模拟点歌工具

    import java.util.LinkedList; import java.util.Scanner; public class KTVByLinkedList { public static ...

  3. 阿里短信回持.net sdk的bug导致生产服务cpu 100%排查

    一:背景 1. 讲故事 去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk. 网址:https://help.aliyun.com/documen ...

  4. NodeJS——大汇总(一)(只需要使用这些东西,就能处理80%以上业务需求,全网最全node解决方案,吐血整理)

    一.前言 本文目标 本文是博主总结了之前的自己在做的很多个项目的一些知识点,当然我在这里不会过多的讲解业务的流程,而是建立一个小demon,旨在帮助大家去更加高效 更加便捷的生成自己的node后台接口 ...

  5. python 05—字典

    一.字典的键是唯一的 键:简单对象,例[字符串.整数.浮点数.bool值] list不能作为键,但可以作为值. 例: score = { '萧峰' : 95, '段誉' : 97, '虚竹' : 89 ...

  6. IDEA字节码学习查看神器jclasslib bytecode viewer介绍

    转载来自:https://blog.csdn.net/w605283073/article/details/103209221 一.背景 很多人想学习Java反汇编后的字节码,但是一方面缺乏好的资料, ...

  7. MySQL 高级—— 锁机制

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.锁的概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计 ...

  8. 【Redis面试题】如何使用Redis实现微信步数排行榜?

    1. 前言 之前写过一篇博客,讲解的是Redis的5种数据结构及其常用命令,当时有读者评论,说希望了解下这5种数据结构各自的使用场景,不过一直也没来得及写. 碰巧,在3月份找工作面试时,有个面试官先问 ...

  9. Java实现 LeetCode 502 IPO(LeetCode:我疯起来连自己都卖)

    502. IPO 假设 力扣(LeetCode)即将开始其 IPO.为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本. 由于资源有限,它只能在 IPO 之前完 ...

  10. Java实现蓝桥杯VIP 算法训练 阶乘末尾

    试题 算法训练 阶乘末尾 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定n和len,输出n!末尾len位. 输入格式 一行两个正整数n和len. 输出格式 一行一个字符串,表示 ...