Mock虚拟接口技术之Moco框架

一、Moco简介

什么是Moco

Moco是一个简单搭建模拟服务器的程序库/工具,是一个简单搭建的stub框架,主要用于测试和集成。Moco主要用于模拟HTTP、HTTPS和Socket协议的接口。

Moco的原理

  • Moco会根据配置启动一个真正的HTTP服务,监听本地的指定端口。当客户端发起的请求满足某个条件时,服务端会回复一个对应的应答。Moco的底层是基于一个叫Netty网络应用框架,而不是依赖于像Servlet这样的重型框架,所以就绕过了复杂的应用服务器。
  • Moco支持API和独立运行两种方式,测试和开发人员在JUnit、JBehave等测试框架中通常使用API的方式,一般情况则使用json脚本的方式。

二、测试中的应用场景

前端测试中的应用:我们在测试前端时,对于某些不易触发的异常场景,可以使用Mock虚拟技术模拟出相应的场景;

接口测试中的应用:我们在做接口测试时,会遇到被测接口需要调用第三方接口的情况,对于需要第三方接口返回特定数据的场景,需要跟第三方厂商沟通和联调测试,这样测试时间会被拉长,效率低。这个时候我们就可以使用Mock虚拟技术模拟第三方接口,设置特定的返回数据;

接口自动化测试中的应用:在自动化测试中,有的接口会调用第三方接口,如果第三方接口不稳定,就会导致测试用例的执行失败,为了增强自动化测试的稳定性,我们可以使用Mock虚拟技术模拟第三方接口。

三、安装及配置

Moco文档https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

下载地址https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/

启动命令

:需要java运行环境)

java -jar ./moco-runner-0.11.0-standalone.jar http -p 8888  -c startup.json

-p  #访问接口的端口号
-c  #存放接口信息的json文件

启动成功示例

D:\AutoTest>java -jar ./moco-runner-0.11.0-standalone.jar http -p 8888  -c startup.json
28 六月 2023 23:48:21 [main] INFO  Server is started at 8888
28 六月 2023 23:48:21 [main] INFO  Shutdown port is 65479

四、示例Demo

GET请求

GET请求-不带参数

:响应体中中文乱码,可以在响应头中设置Content-Type)

[
  {
    "description": "get请求-不带参数",
    "request": {
      "uri": "/get/demo",
      "method": "get"
    },
    "response": {
      "headers": {
        "Content-Type": "text/html;charset=gbk"     
      },
      "text": "get请求-不带参数"
    }
  }
]
GET请求-带参数
[
  {
    "description": "get请求-带参数",
    "request": {
      "uri": "/get/with/params",
      "method": "get",
      "queries": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "text": "tom and jerry"
    }
  }
]

POST请求

POST请求-form表单
[
{
    "description": "带参数的form表单类post请求",
    "request": {
      "uri": "/post/form/demo",
      "method": "post",
      "forms": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]
POST请求-json
[
    {
    "description": "post请求",
    "request": {
      "uri": "/post/param/demo",
      "method": "post",
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "headers": {
        "Content-Type": "text/html;charset=gbk"
      },
      "json": {
        "msg": "success",
        "code": "200"
      }
      }
    }
]
POST请求-带headers
[
{
    "description": "post请求-带headers",
    "request": {
      "uri": "/post/headers/demo",
      "method": "post",
      "headers": {
        "Content-Type": "application/json",
        "token": "slkdfjlsjfdsl"
      },
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

PUT请求

[
    {
    "description": "put请求",
    "request": {
      "uri": "/put/demo",
      "method": "put",
      "forms": {
        "id": "123",
        "age": "10"
      }
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

DELETE请求

[
{
    "description": "delete请求",
    "request": {
      "uri": "/delete/demo/123",
      "method": "delete"
    },
    "response": {
      "json": {
        "msg": "success",
        "code": "200"
      }
    }
  }
]

请求头带Cookie

GET请求-请求头带Cookie
[
  {
    "description": "带cookie的请求",
    "request": {
      "uri": "/get/with/cookies",
      "method": "get",
      "cookies": {
         "login": "true"
      }
    },
    "response": {
      "text": "请求头中含cookie",
      "headers": {
        "Content-Type": "text/html;charset=gbk"
      }
    }
  }
]
POST请求-请求头带Cookie
[
{
    "description": "post请求-请求头带cookie",
    "request": {
      "uri": "/post/with/cookie",
      "method": "post",
      "cookies": {
        "login": "true"
      },
      "json": {
        "name": "tom",
        "age": "10"
      }
    },
    "response": {
      "status": 200,
      "json": {
        "code": "1000",
        "msg": "success!"
      }
    }
  }
]

重定向

[
  {
    "description": "重定向",
    "request": {
      "uri": "/redirect/demo"
    },
    "redirectTo": "/get/demo"
  }
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值