在进行接口测试过程中,Moco可以通过简单的配置request和response 对象,达到模拟后端返回的效果

  • 支持HTTP、HTTPS、socket协议;
  • 支持在request中设置Headers、cookies、statusCode;
  • 支持get、post、put、delete请求;
  •  无需环境配置,只需要java运行环境即可;

 

1、下载安装

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

java接口埋挡板 接口挡板工具_json

2、moco使用

1)新建文件夹,将下载好的 moco-runner-1.1.0-standalone.jar 文件放入文件夹中去,新建user.json文件,用于配置请求和响应内容

{

      "request":{

          "method":"post", 

          "uri":"/jiekou",

          "headers":{"Content-type":"application/json"},

          "json":{"id":"12306","name":"moco"}

        },

      "response":{

            "status":"200",

            "text":"ceshi"

          }

}

2)

{

  "request":{

      "headers":{"Content-Type":"application/json;charset=UTF-8"},   // 请求 headers

      "method":"post",

      "uri":"/jiekou2",

      "json": {

        "type": "1",

        "data": {

              "citeCaseId": "11111111",

              "party": [

                  {

                      "partyId": "001",

                      "name": "张三",

                      "agent": [

                          {

                              "agentId": "002"

                          },

                          {

                              "agentId": "002"

                          }

                      ]

                  }

              ]

            }

        }

    },

  "response":{

      "status":"200",

      "headers": {

          "Content-Type":"application/json;charset=UTF-8"   // 响应的 headers

        },

      "json":{"code":101,"message":"必要参数缺失。"}

    }

}

3)

{

  "request":

    {

        "headers":{"Content-Type":"application/json"},

        "method":"get",

        "uri":"/getList", 

        "queries":{"sasj":"20100101"}  // 带参数的GET请求,如 localhost:8880/getList?sasj=20100101

    },

  "response":

    {

        "file":"build.xml"   

    // 请求返回文件(可以返回xml中的内容,将xml文件放在与jar包同级目录下即可, "file":"files/build.xml",user.json所在目录下的二级目录files)

    }

}

注意

若要同时模拟多个接口,可以用[ ]括起来,并用,分割,也就是json的格式。

 3、启动mock

cmd 进入moco-runner-1.1.0-standalone.jar 所在文件夹,执行下面命令

java -jar moco-runner-1.1.0-standalone.jar-p 8881 -c user.json

运行成功。直接使用postman或者其他接口调用工具调用接口即可。

 

java接口埋挡板 接口挡板工具_jar_02

 4、分模块

使一个项目会分好几个模块,如登录注册等员工模块、聊天模块、博文模块等,会有很多很多请求,如果我们把不同业务的mock数据都写在一个文件里面,那就太难看了,为此,我们需要做一些改变来解决这个问题

下面以TodoList.json为例

// 在根目录下新建 TodoList.json 文件,内容如下

  { "context": "/user", "include": "user.json" }, 

  { "context": "/newUser", "include": "data.json"} 

]

 这样,当我们访问 

http://localhost:8880/user/userInfo 和 http://localhost:8880/newUser/newUserInfo 时候

会跳到后面对应的 json 再处理一遍

// user.json

[{"request":{"uri":"/userInfo"},"response":{"json":{"username": "Sampson"}}}]


// newUser.json

[{"request":{"uri":"/newUserInfo"},"response":{"json":{"username": "NewSampson"}}}]

Moco支持在全局的配置文件中引入其他配置文件,这样就可以分服务定义配置文件,便于管理。 
配置好文件,在全局文件中引入即可: 
全局配置如下:

java -jar moco-runner-1.1.0-standalone.jar start -p 8880 -g TodoList.json

注意,此时需要通过参数  -g  在加载全局配置文件。,使用的不是  -c  

5、Mock测试存在的问题

使用Mock测试有时可以提高团队的开发效率,但当B、C都开发完成代码后,这时应该把E2E测试代码从使用Mock测试改为调用真实的模块,以避免出现模块之间集成部分漏测的问题。这里说mock存在的问题,主要是让开发和测试不要过分的依赖/相信mock接口。

使用mock时,切记的几点:

1)测试人员不应该被覆盖率高的E2E自动化测试所迷惑,覆盖率高不代表没有问题。尤其在接手新项目中,需要查看E2E测试中有没有使用Mock测试,进一步去判断这些地方使用Mock测试是否合理,这些Mock测试是否应该换成真实模块间的调用和集成。

2)当把mock接口换成实际接口后,测试/开发也必须把之前的测试重新做一遍。

ps: 当你使用mock接口来提高效率,请注意:你的工作量其实是比 直接只用实际接口 多了 一倍的。如果测试时,偷懒,替换成实际接口后,只是简单测试,那么 当实际接口和mock预期接口有差异时,故障便和你相遇了。

建议: mock接口只能主流程联调/ 异常返回测试,不要过分依赖mock接口进行测试。

3)测试完毕,上线前,请一定确保 为了mock而做的相关代码/配置文件的修改,已经完全恢复了