Mock工具之Moco使用教程

一、什么是Moco

在开发过程中,经常会使用到一些http网络接口,而这部分功能通常是由第三方开发团队或者是后端同事进行开发的,在我们开发时不能给我们提供服务,这为我们的联调和测试造成了麻烦,这个时候就需要使用到mock测试。

Moco是一个简单搭建模拟服务器的程序库/工具:Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起请求满足一个条件时,它就给回复一个应答。

二、安装&配置

Jar包下载:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
Moco文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

启动命令:
java -jar ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json
-p 就是port 端口号, -c 后面就是配置接口内容的json文件。

启动成功效果:

在这里插入图片描述

三、接口配置&测试

3.1 第一个简单的请求:

all.json文件中增加以下request&response内容

[
    {
      "description": "这是第一个demo",
      "request": {
        "uri":"/demo"
      },
      "response": {
        "text":"这是第一个demo",
        "headers":{
          "Content-Type":"text/html;charset=gbk"
        }
      }
    }
]

注意:moco模拟请求返回中文乱码问题,添加响应头编码格式为gbk,就可以解决返回结果中文乱码

"headers":{
          "Content-Type":"text/html;charset=gbk"
        }

测试接口请求结果:

在这里插入图片描述

3.2 Get请求:
{
  "description": "这是一个带参数的Get请求的Demo",
  "request": {
    "uri": "/getWithParam",
    "method": "get",
    "queries": {
      "name": "张三",
      "sex": "20"
    }
  },
  "response": {
    "text": "我张三会来了",
    "headers":{
      "Content-Type":"text/html;charset=gbk"
    }
  }
}

测试接口请求结果:http://localhost:9090/getWithParam?name=张三&sex=20

在这里插入图片描述

3.3 Post请求:
{
  "description": "这是一个带参数的post请求",
  "request": {
    "uri": "/postWithParam",
    "method": "post",
    "forms": {
      "name": "张三",
      "sex": "man"
    }
  },
  "response": {
    "text": "我张三带着参数回来了",
    "headers":{
      "Content-Type":"text/html;charset=gbk"
    }
  }
}

测试接口请求结果:

在这里插入图片描述
注意:带中文值的入参,如果换成x-www-form-urlencoded格式(post请求的默认格式),则会请求失败:

在这里插入图片描述
在这里插入图片描述
这是Moco目前的问题,没有解决,英文的入参则没有问题:

在这里插入图片描述

3.4 返回值为Json格式的请求:
{
  "description": "电话号码注册post请求",
  "request": {
    "uri": "/postWithPhone",
    "method": "post",
    "forms": {
      "type": "1"
    }
  },
  "response": {
    "json":{
      "code": "0000",
      "msg": "请求成功",
      "data": {
        "userId": 111111,
        "phone": "12011111111",
        "cardNo": "8000000000"
      }
    }
  }
}

测试接口请求结果:

在这里插入图片描述

3.5 带cookie信息才能访问的post请求:
{
 "description": "这是一个需要带有cookie信息才能访问的post请求",
  "request": {
    "method": "post",
    "uri": "/postWithCookie",
    "cookies": {
      "login":"true"
    },
    "json": {
      "name": "zhangsan",
      "age": "18"
    }
  },
  "response": {
    "status":200,
    "json": {
      "name":"张三",
      "status": "1"
    }
  }
}

测试接口请求结果:

在这里插入图片描述
在这里插入图片描述

3.6 重定向请求:
{
  "description": "重定向到百度",
  "request": {
    "uri":"/redirect"
  },
  "redirectTo":"http://www.baidu.com"
}

测试接口请求结果:

在这里插入图片描述

3.7 前后端联调mock实战:
  1. moco本地运行起来之后,后端server地址: 127.0.0.1:9090
  2. 通过前端页面操作请求来调用mock接口试验:
    在这里插入图片描述

四、搭建Moco服务器供其他人调用

既然本地可以使用,那么放在服务器上去运行,则可以让更多的人(包括研发)使用,提供一个简易的mock服务。下载Moco的包到服务器上并解压,然后运行:

在这里插入图片描述
访问Moco服务:http://服务器IP:9090/postDemo
在这里插入图片描述
服务器上mock返回日志:

在这里插入图片描述

注意点:

  1. 前面说过本地运行时,如果返回内容有中文,需要加上一段header指定格式为gbk才能正常显示中文。测试时发现服务器上运行,mock返回内容Json文件中,反而需要去掉这一段,返回内容才能正常显示中文,有这一段反而会中文显示乱码:
"headers":{
  "Content-Type":"text/html;charset=gbk"
}
  1. 如果服务器上想让mock服务一直运行,使用命令:
nohup java -jar  ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json > /dev/null 2> /dev/null &

如果只是在前面加nohup,会报错:

nohup: ignoring input and appending output to ‘nohup.out’

原因是nohup执行会产生日志,默认是写到nohup.out文件中,文件没有写入权限。需要配合后面的命令 > /dev/null 2> /dev/null & 将 nohup 的日志输出到 /dev/null,这个目录类似于linux的一个黑洞,会让所有到它这的信息自动消失。

如果想保留日志,可以新建一个文件,比如moco.log, 然后nohup时指定日志写到moco.log中:

nohup java -jar  ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json >moco.log &

日志信息记录如下:

在这里插入图片描述

=====================================================================================

以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值