美文网首页
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