• Mock工具之Moco使用


    一、什么是Mock

    mock英文单词有愚弄、嘲笑、模拟的意思,这里主要是模拟的意思

    二、什么是Moco

    • 开源的、基于java开发的一个mock框架
    • 支持http、https、socket等协议

    三、Mock的特点

    • 只需要简单的配置request、response等即可满足要求

    • 支持在request 中设置headers、cookies等

    • 支持GET、POST、PUT、DELETE等请求方法

    • 无需环境配置,有Java环境即可

    • 修改配置文件后,立刻生效

    • 对可能用到的数据格式都支持,如json、text、xml、file等。

    四、什么场景会用到

    • 模拟第三方接口的返回
    • 后端接口还没有开发完毕,前端想要进行联调
    • 接口测试过程中,可能某些接口依赖有问题,也可以使用mock

    五、Moco的原理

    • 根据json配置文件,启动一个http的服务,监听指定的端口

    六、环境准备

    七、环境搭建

    • 安装jdk,配置环境变量
    • 把moco-runner-1.5.0-standalone.jar 和配置文件如moco.json放同一目录image

    八、Moco配置文件

    moco配置文件格式必须是json格式。配置文件是个数组,也就是说,可以在一个文件中配置多个接口的请求和响应

    配置文件常用字段image

    九、启动

    1. # http 指定协议
    2. # -p 指定端口
    3. # -c 指定配置文件
    4. java -jar moco-runner-1.5.0-standalone.jar http -p 8088 -c moco.json

    十、示例

    • demo1
    1. [
    2. {
    3. "description":"这是一个moco例子",
    4. "request":{
    5. "uri":"/demo"
    6. },
    7. "response":
    8. {
    9. "text":"Hello,Moco",
    10. "status": "200"
    11. }
    12. }
    13. ]
    • get请求,不带参数
    1. [
    2. {
    3. "description":"这是一个get请求,不带参数",
    4. "request":{
    5. "uri":"/goods",
    6. "method": "get"
    7. },
    8. "response":
    9. {
    10. "headers": {
    11. "Content-Type": "text/plain; charset=GBK"
    12. },
    13. "text":"这是一个GET请求,不带参数",
    14. "status": "200"
    15. }
    16. }
    17. ]
    • get请求,带参数
    1. [
    2. {
    3. "description": "这是一个get请求带参数",
    4. "request": {
    5. "uri": "/goods",
    6. "method": "get",
    7. "queries": {
    8. "id": "g01"
    9. }
    10. },
    11. "response":
    12. {
    13. "headers": {
    14. "Content-Type": "application/json;charset=utf-8"
    15. },
    16. "json":{"name": "百世可乐","price": 3},
    17. "status": "200"
    18. }
    19. }
    20. ]

    image

    • post请求,带参数,带的是json参数
    1. [
    2. {
    3. "description": "这是一个post请求带参数",
    4. "request": {
    5. "uri": "/goods",
    6. "method": "post",
    7. "json": {
    8. "id": "g01"
    9. }
    10. },
    11. "response":
    12. {
    13. "headers": {
    14. "Content-Type": "application/json;charset=utf-8"
    15. },
    16. "json":{"name": "百世可乐","price": 3},
    17. "status": "200"
    18. }
    19. }
    20. ]

    image

    • post请求,带headers参数
    1. [
    2. {
    3. "description": "post请求,带headers参数",
    4. "request": {
    5. "uri": "/goods",
    6. "method": "post",
    7. "cookies":{"ssid":"666666"},
    8. "headers":{"authorization": "bearer 123456"},
    9. "json": {
    10. "id": "g01"
    11. }
    12. },
    13. "response":
    14. {
    15. "headers": {
    16. "Content-Type": "application/json;charset=utf-8"
    17. },
    18. "json":{"name": "百世可乐","price": 3},
    19. "status": "200"
    20. }
    21. }
    22. ]

    image

    • post请求,带forms参数
    1. [
    2. {
    3. "description": "这是一个post请求,带forms参数",
    4. "request": {
    5. "uri": "/login",
    6. "method": "post",
    7. "forms": {
    8. "username": "admin",
    9. "password":"123456"
    10. }
    11. },
    12. "response":
    13. {
    14. "headers": {
    15. "Content-Type": "application/json;charset=utf-8"
    16. },
    17. "json":{"msg": "登录成功"},
    18. "status": "200"
    19. }
    20. }
    21. ]

    image

    • 重定向
    1. [
    2. {
    3. "description": "这是一个重定向",
    4. "request": {
    5. "uri": "/redirect",
    6. "method": "get"
    7. },
    8. "redirectTo": "http://www.baidu.com"
    9. }
    10. ]

    十一、多配置文件模式

    为了模拟多个接口,以及方便管理这些接口,moco-runner增加了配置模式,具体如下:

    • 首先,创建多个接口文件,比如:login.json,index.json
    • 然后,在当前文件夹下创建配置文件,config.json,用于管理接口文件login.json,index.json
    • 最后,用参数-g启动服务

    接口文件moco.json

    1. [
    2. {
    3. "description": "Moco Demo",
    4. "request": {
    5. "method": "get",
    6. "uri": "/demo"
    7. },
    8. "response": {
    9. "text": "Hello Moco"
    10. }
    11. },
    12. {
    13. "description": "users",
    14. "request": {
    15. "method": "get",
    16. "uri": "/users"
    17. },
    18. "response": {
    19. "headers": {
    20. "Content-Type": "application/json;charset=utf-8"
    21. },
    22. "json": {
    23. "code": 200,
    24. "msg": "success",
    25. "data": [
    26. {
    27. "id": 1,
    28. "username": "张三"
    29. },
    30. {
    31. "id": 2,
    32. "username": "李四"
    33. },
    34. {
    35. "id": 3,
    36. "username": "王五"
    37. }
    38. ]
    39. }
    40. }
    41. },
    42. {
    43. "description": "这是一个get请求,不带参数",
    44. "request": {
    45. "uri": "/goods",
    46. "method": "get"
    47. },
    48. "response": {
    49. "text": "这是一个GET请求,不带参数",
    50. "status": "200"
    51. }
    52. }
    53. ]

    接口文件index.json

    1. [
    2. {
    3. "description": "index",
    4. "request": {
    5. "method": "get",
    6. "uri": "/index"
    7. },
    8. "response": {
    9. "text": "Hello home"
    10. }
    11. }
    12. ]

    配置文件config.json

    1. [
    2. {"include":"index.json"},
    3. {"include":"moco.json"}
    4. ]

    十二、中文乱码问题

    加上参数 -Dfile.encoding=utf-8java -Dfile.encoding=utf-8 -jar moco-runner-1.5.0-standalone.jar http -p 8088 -c moco.json

  • 相关阅读:
    说说Mysql的四种隔离级别
    JavaSE - 调用和重写Object类中的toString方法、equals方法以及理解Arrays类中的toString方法
    主成分分析笔记
    Java之线程详解(一)——线程概念知识、创建线程的几种方式
    【Linux】UDP协议
    欠酸洗,异物压入,斑迹和脏污 学习笔记
    Linux 网络编程 tcp server 笔记
    一幅长文细学华为MRS大数据开发(五)——MapReduce和Yarn
    Llama3-8B到底能不能打?实测对比
    论文阅读--Energy efficiency in heterogeneous wireless access networks
  • 原文地址:https://blog.csdn.net/heiwa110/article/details/133706160