美文网首页
mock server

mock server

作者: hemiao3000 | 来源:发表于2023-11-30 09:56 被阅读0次

在我们平时的接口测试工作中,系统的业务很少是孤立存在的,大部分业务相互之间都是需要关联调用的。前端与后端的相互协作实现业务逻辑,接口或服务之间相互协作。或者使用第三方公司的服务等。

这些场景给我们的联调测试带来技术的挑战,那么我们应该怎么办呢?我们通常的处理方式是搭建一个临时的 server,模拟服务,提供数据进行联调测试。这时,被称作 mock server 的一类工具就闪亮登场了。

mock server 这类工具的作用就是假扮一个请求的接收方,通常会以硬编码的方式来设定:当收到 xxx 请求时,就返回 xxx 响应信息。

这样,我们就可以通过向它发送请求,来验证请求的发送方的逻辑是否正确。

moco-runner

moco-runner 就是一种 mock server 类的工具。它的官方网址是 https://github.com/dreamhead/moco

从官网上,我们可以下载到 moco-runner 的独立运行版。例如:moco-runner-1.5.0-standalone.jar 。

将 moco-runner-1.5.0-standalone.jar 放到某处<small>(我放置在了我的 D:\ProgramFiles\moco-runner 目录下)</small>。

在 moco-runner 的同级目录下,创建一个 .json 文件,例如,foo.json,在其中写入如下内容:

[
  {
    "request":  {
      "uri": "/"
    },
    "response" : {
        "text" : "Hello, Moco"
      }
  }
]

通过如下命令,以上述的 foo.json 启动 moco Http Server:

java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -c foo.json

现在,通过浏览器访问 http://localhost:12306 ,你将会在页面上看到 "Hello, Moco" 字样。

模拟接口服务的实例

在 moco-runner 的同级目录下,创建一个 order.json 文件,在其中写入如下内容:

[
    {
        "request": {
            "method": "post",
            "uri": "/order",
            "json": {
                "productType": "NORMAL_CARGO",
                "shipConsigneeId": "135401",
                "sRegionId": 22592,
                "customerOuId": 12707,
                "boBusinessTypeId": 10637
            }
        },
        "response": {
            "json": {
                "customerOuId": "12707",
                "projectId": 34512,
                "carrierId": "2343"
            }
        }
    }
]

该 json 文件时在设定 moco-runner Http Server 请求字段及响应的字段内容。在上述例子中,为 POST 请求,且接口为 /order 。

如之前的例子一样,启动 mock server 服务,不过,这次指定的是 order.json 文件:

java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -c order.json

使用 postman / apifox / http-client 等工具进行测试。我这里使用的是 httpclient:

POST http://localhost:12306/order
Content-Type: application/json

{
    "productType": "NORMAL_CARGO",
    "shipConsigneeId": "135401",
    "sRegionId": 22592,
    "customerOuId": 12707,
    "boBusinessTypeId": 10637
}

向 moco-runner Http Server 发送 order.json 中所描述的 POST 请求,不出意外,会得到 order.json 中所描述的响应信息。

思考:这里我们的参数是json格式的,如果我们为 URI 参数(如:/order?id=666),form 参数,该如何做呢?

只需要把 json 改为 queriesforms 就行了。更多详情参见官网文档 apis.md

使用 moco-runner 模拟多个接口

新建 global.json 文件,并将之前的 foo.json 和 order.json 等多个接口描述文件写入其中:

[
  {
    "include" : "foo.json"
  },
  {
    "include" : "order.json"
  }
]

以 global.json 作为配置文件启动 moco-runner Http Server:

java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -g global.json

如果解决返回结果中文字符乱码

在 response 中添加设置编码格式为 "utf-8":

"headers":{
    "Content-Type":"application/json;charset=utf-8"
}

例如:

[
  {
    "request": {
      "method":"get",
      "uri":"/test/weather",
      "queries": {
        "city":"chengdu"
      }
    },
    "response": {
      "headers":{
        "Content-Type":"application/json;charset=utf-8"
       },
      "json":{
        "code": 200,
        "message":"天气很好!"
      }
    }
  }
]

相关文章

网友评论

      本文标题:mock server

      本文链接:https://www.haomeiwen.com/subject/vihqgdtx.html