• 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"
            }
          }
        }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    "headers":{
              "Content-Type":"text/html;charset=gbk"
            }
    
    • 1
    • 2
    • 3

    测试接口请求结果:

    在这里插入图片描述

    3.2 Get请求:

    {
      "description": "这是一个带参数的Get请求的Demo",
      "request": {
        "uri": "/getWithParam",
        "method": "get",
        "queries": {
          "name": "张三",
          "sex": "20"
        }
      },
      "response": {
        "text": "我张三会来了",
        "headers":{
          "Content-Type":"text/html;charset=gbk"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试接口请求结果: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"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试接口请求结果:

    在这里插入图片描述
    注意:带中文值的入参,如果换成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"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    测试接口请求结果:

    在这里插入图片描述

    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"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    测试接口请求结果:

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

    3.6 重定向请求:

    {
      "description": "重定向到百度",
      "request": {
        "uri":"/redirect"
      },
      "redirectTo":"http://www.baidu.com"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    测试接口请求结果:

    在这里插入图片描述

    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
    • 2
    • 3
    1. 如果服务器上想让mock服务一直运行,使用命令:
    nohup java -jar  ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json > /dev/null 2> /dev/null &
    
    • 1

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

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

    原因是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 &
    
    • 1

    日志信息记录如下:

    在这里插入图片描述

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

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

  • 相关阅读:
    用C++实现设计模式中的单件
    docker 实战系列
    1.软件测试基础
    ipython、jupyter 在代码执行前修改待执行的代码
    RTT WK2412 spi-uart
    JAVA【设计模式】享元模式
    STC89C52定时器/中断快速上手示例讲解
    JWT整合Gateway实现鉴权(RSA与公私密钥工具类)
    我的Qt作品(15)使用Qt+OpenCV实现一个卡尺工具,具备找线和找圆的功能
    # NSSCTF Round#V
  • 原文地址:https://blog.csdn.net/baidu_28340727/article/details/126068508