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测试的技术,可以让我们在开发没有完成对应接口的时候,有接口文档就提前进入到测试状态,是现在敏捷模式下不可或缺的技术,也是持续集成中一个重要的组成部分。
Moco测试知多少?的更多相关文章
- appium 自动化测试之知乎Android客户端
appium是一个开源框架,相对来说还不算很稳定.转载请注明出处!!!! 前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecraz ...
- json处理三部曲之第三曲:利用Gson处理json
需要导入gson-xxx.jar包 <dependency> <groupId>com.google.code.gson</groupId> <artifac ...
- 一个appium 博客
http://www.cnblogs.com/tobecrazy/category/699177.html appium Java控制Appium server start/stop 摘要: 相信很多 ...
- CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
1.渐变字体 主要是看:-webkit-background-clip: text; 该属性 <style> .b1{ width: 500px; height: 200px; font- ...
- mongodb 3.2.x 启动 Warning 错误处理
[root@restore1 data1]# mongod --dbpath=/data/data1/mongodb_data/ --directoryperdb ** WARNING: You ar ...
- MySQL使用可重复读作为默认隔离级别的原因
一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQL Server等,而MySQL却使用可重复读(Read-Repeatable,RR). ...
- 腾讯优图及知脸(ZKface)人脸比对接口测试(python)
一.腾讯优图 1.开发者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID.S ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试
ResultCode有很多的实现类 cmsCode有很多类型的错误异常 pgeService内当CmsPage这个对象为空的时候,异常类型就可以抛出CmsCode里面的错误代码 if(cmsPage1 ...
- 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询
测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...
随机推荐
- 【python基础】datetime类各种坑
import datetime end_time = 1525104000000 d = datetime.datetime.fromtimestamp(end_time / 1000, None) ...
- 允许远程用户登录访问mysql
方法1.本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改为”%” mysql -u root -proot use mysql; ...
- SpringBoot外部化配置使用Plus版
本文如有任何纰漏.错误,请不吝指正! PS: 之前写过一篇关于SpringBoo中使用配置文件的一些姿势,不过嘛,有句话(我)说的好:曾见小桥流水,未睹观音坐莲!所以再写一篇增强版,以便记录. 序言 ...
- Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...
- [256个管理学理论]001.蝴蝶效应(Butterfly Effect)
蝴蝶效应(Butterfly Effect) 来自于大洋彼岸的让你看不懂的解释: 蝴蝶效应是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨大的连锁反应,是一种混沌的现象.“蝴蝶效应” ...
- 中国电信中兴F412光猫——IPTV与网络单线复用
标题: 中国电信中兴F412光猫--IPTV与网络单线复用 作者: 梦幻之心星 347369787@QQ.com 标签: [光猫, IPTV] 目录: 路由器 日期: 2019-2-30 目录 第一步 ...
- HTTP/2 简介及https原理
注:以下内容节选自<高性能浏览器网络>(出版社:O'Reilly,作者:Ilya Grigorik). 要了解完整版本和相关内容,请访问 hpbn.co. HTTP/2 可以让我们的应用更 ...
- Cypress系列(5)- 自定义 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 Cypress 不仅支持用户自定义 ...
- SpringMVC(四)SpringMVC实现文件上传、异常拦截去、整合SSM
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.文件上传 文件上传在SpringMVC中如何实现: 准备一个文件上传的表单 导入文件上传需要的jar ...
- Java实现 LeetCode 825 适龄的朋友(暴力)
825. 适龄的朋友 人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i] 表示第 i 个人的年龄. 当满足以下条件时,A 不能给 B(A.B不为同一人)发送好友请求: age[B ...