首页 > 其他分享 >Mock框架moco学习笔记

Mock框架moco学习笔记

时间:2023-12-11 14:33:54浏览次数:34  
标签:请求 get request 笔记 json Moco post moco Mock

目录

一、Moco框架基本介绍

1. 什么是Moco

moco是一个简单搭建模拟服务器的程序库/工具,是一个简单单间stub的框架,主要用于测试和集成。
Mock可以提供以下协议和类型的mock服务:

  • HTTP APIs
  • Socket APIs
  • REST API

2. Moco原理简介

  • Moco会根据一些配置启动一个真正的HTTP服务(监听本地的某个端口)。当发起请求满足一个条件时,它就回复一个应答。Moco的底层没有依赖于像Servlet这样的重型框架,而是基于一个叫Netty网络应用框架,这样就绕过了复杂的应用服务器。
  • Moco本身支持API和独立运行两种方式,通过使用API,测试开发人员可以在JUnit、JBehave等测试框架中使用Moco。也可以世界通过Json脚本使用。

3. Moco的配置和运行

java运行环境+moco-runner.0.11.0-standalone.jar
jar包的下载地址:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/
可以下载jar包:

4. Moco启动以及第一个demo

启动命令:
java -jar ./moco-runner-0.11.0-standalone.jar 服务类型 -p 端口号 -c json配置文件
例如:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8809 -c startup.json
如果要带路径:
java -jar "D:/moco-runner-0.11.0-standalone.jar" http -p 8809 -c "D:\startup.json"

说明:
本地启动了一个http Server,其中监听端口是8809,配置文件是 startup.json。用户可以在本机发起一个请求,如 http://localhost:8809,json不支持注释。description 字段中可以写注释。

二、mock 的启动及第一个demo

1. 创建startup.json文件

[
  {
    "description": "这是我们的第一个mock例子",
    "request": {
      "uri": "/demo"
    },
    "response": {
      "text": "Hello world"
    } 
  } 
]

2. 启动moco

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

3. 浏览器输入本地网址127.0.0.1:8809/demo


这个是一个不带参数的get方法

注意:修改json文件不用重新部署,服务热部署,会自动重启

三、不带参数的get方法:Method(GET)

[
  {
    "description": "模拟一个没有参数的get请求",
    "request": {
      "uri": "/getdemo",
      "method": "get"
    },
    "response": {
      "text": "This is a request with no paramerters"
    }
  }
]

请求结果:

四、带参数的get方法:queries

[
  {
    "description": "模拟一个有参数的get请求",
    "request": {
      "uri": "/getdemo",
      "method": "get",
      "queries": {
        "name": "1",
        "age": "2"
      }
    },
    "response": {
      "text": "This is a GET request with two paramerters"
    }
  }
]

请求结果:

五、不带参数的post方法:Method(Post)

  • json内容:
[
  {
    "description": "模拟一个没有参数的post请求",
    "request": {
      "uri": "/postdemo",
      "method": "post"
    },
    "response": {
      "text": "这是一个没参数的post请求",
      "headers":{
        "Content-Type":"text/html;charset=gbk"
      }
    }
  }
]
  • 启动:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jemeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求
    3)添加监听器-查看结果树
    4)HTTP请求添加参数

    5)查看结果:

六、带参数的post方法:Forms

  • json内容:
[
  {
    "description": "模拟一个有参数的post请求",
    "request": {
      "uri": "/with/params/postdemo",
      "method": "post",
      "forms": {
        "name": "1",
        "age": "2"
      }
    },
    "response": {
      "text": "这是一个有参数的post请求",
      "headers":{
        "Content-Type":"text/html;charset=gbk"
      }
    }
  }
]
  • 启动:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jemeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数

    3)添加监听器-查看结果树

七、Moco框架中如何加入Cookies

1. 请求中带cookies信息的get请求

  • json内容:
[
 {
    "description":"这是一个request请求中带cookies信息的get请求",
    "request":{
      "uri":"/get/with/cookies",
      "method":"get",
      "cookies":{
        "login":"true"
      }
    },
    "response":{
      "text":"返回这是一个request请求中带cookies信息的get请求"
    }
  }
]
  • 启动服务:
java -jar ./moco-runner-0.11.0-standalone.jar http -p 8899 -c startupPost.json
  • 使用jmeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数

    3)添加HTTP cookie管理器:

    4)添加监听器-查看结果树

2. 请求中带cookies的post请求

  • json内容:
[
{
  "description":"这是一个带cookies信息的post请求",
  "request":{
    "uri":"/post/with/cookies",
    "method":"post",
    "cookies":{
      "login":"true"
    },
    "json":{
      "name":"huhansan",
      "age":"18"
    }
  },
  "response":{
    "status":200,
    "json":{
      "huhansan":"success",
      "status":"1"
    },
    "headers":{
      "Content-Type":"text/html;charset=gbk"
    }
  }
}
]
  • 使用jmeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数

    3)添加HTTP cookie管理器:同上
    4)添加监听器-查看结果树


3. response返回中带有cookies信息的get请求

  • json内容:
[
{
  "description":"模拟response返回中带有cookies信息的get请求",
  "request":{
    "uri":"/resopnse/with/cookies",
    "method":"get"
  },
  "response":{
    "cookies":{
      "login":"true",
      "token":"1234567890"

    },
    "json":{
      "name":"zhoujielun",
      "age":"38"
    }
  }
}
]
  • 使用jmeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数

    3)添加监听器-查看结果树

4. 带header信息的post请求

  • json内容:
[
  {
    "description":"这是一个带header信息的post请求",
    "request":{
      "uri":"/post/with/headers",
      "method":"post",
      "headers":{
          "content-type":"application/json"      
      },
      "json":{
          "name":"huqiqi",
          "sex":"women"      
      }
    },
    "response":{
      "json":{
          "huqiqi":"success",
          "status":1                    
      }
  }
]
  • 使用jmeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数
  1. jemeter添加HTTP信息头管理器:


    4)添加监听器-查看结果树


八、Moco框架中如何进行重定向

1. 有重定向的接口(redirectTo)

  • json内容:
[
  {
    "description":"模拟重定向接口",
    "request":{
      "uri":"/redirectto"
    },
    "redirectTo":"/redirectedpath"
  },
  {
    "description":"模拟被重定向的接口",
    "request":{
      "uri":"/redirectedpath"
    },
    "response":{
      "text":"返回重定向结果",
      "headers":{
        "Content-Type":"text/html;charset=gbk"
      }
    }
  }
]
  • 使用jmeter做接口测试:
    1)添加线程组
    2)添加Sampler-HTTP请求和参数:HTTP请求勾选Follow Redirects(跟随重定向):

    3)添加监听器-查看结果树

九、Moco框架响应

1. 约定以指定json作为响应

[
  {
    "request":{
      "uri":"/responseJson"
    },
    "response":{
      "json":{
        "username":"mocor"
      }
    }
  }
]

2. 约定Status:模拟各种状态码以达到我们测试需要的结果

[
  {
    "request":{
      "uri":"/responseStatus"
    },
    "response":{
      "status":200
    }
  }
]

3. 约定响应Headers

[
  {
    "request":{
      "uri":"/responseHeaders"
    },
    "response":{
      "headers":{
        "content-type":"application/json"
      }
    }
  }
]

4. 约定响应Cookies

[
  {
    "request":{
      "uri":"/responseCookies"
    },
    "response":{
      "cookies":{
        "username":"chenlei"
      }
    }
  }
]

标签:请求,get,request,笔记,json,Moco,post,moco,Mock
From: https://www.cnblogs.com/hqq2019-10/p/17894272.html

相关文章

  • 学C笔记归纳 第十一篇——函数1
    库函数学习网站:www.cplusplus.com/reference/clibrary官方英文版:https://en.cppreference.com官方中文版:https://zh.cppreference.com尽量提高英文阅读能力,对后续学习工作帮助非常大。函数命名都是有意义的,大多包含功能英文缩写,库函数的使用必须包含头文件。 函数的组成:r......
  • 平衡树(无旋Treap,范浩强树)学习笔记
    平衡树:YYDS以下是常见的平衡树/要用平衡树实现的算法:Treap(有旋/无旋)Splay树WBLT(WeightBalancedLeafyTree,重量平衡线段树)SBT(SizeBalancedTree,陈启峰树)AVL树B树、B+树笛卡尔树红黑树、左偏红黑树、AA树替罪羊树\(\to\)K-DTree(k-DimensionTree)LT(LeafyTree,平......
  • 读程序员的README笔记07_测试(下)
    1. 自己动手编写测试1.1. QA团队可以帮助你验证你的代码是否稳定,但千万不要把代码直接丢给他们,然后让他们做所有的测试1.2. 避免硬编码的值,不要重复代码1.3. 专注于测试基本功能而不是实现细节,这有助于代码库的重构1.3.1. 测试代码在重构后仍然可以运行1.4. 将测试的......
  • Linux操作系统 文件查找、打包压缩及解压读书笔记
    当涉及Linux文件查找、打包压缩和解压时,确实有很多详细的内容。以下是更详细的解释和示例:1.文件查找在Linux中,find命令用于在文件系统中搜索文件和目录。下面是一些常见用法:基本用法:在整个文件系统中查找文件或目录:bashCopycodefind/-namefilename在当前目录及......
  • AT_dp 做题笔记
    持续更新。更好的阅读体验?更朴素的阅读体验?未完成题目AT_dp_s,AT_dp_t,AT_dp_v,AT_dp_w,AT_dp_x,AT_dp_y,AT_dp_z。AT_dp_aSolution青蛙只能从\(i-1\)或\(i-2\)跳过来,所以转移方程自然地就是\(dp_i=min(dp_{i-1}+|h_i-h_{i-1}|,dp_{i-2}+|h_i-h_{i-2}|)\)。Cod......
  • Django笔记四十四之Nginx+uWSGI部署Django以及Nginx负载均衡操作
    本文首发于公众号:Hunter后端原文链接:Django笔记四十四之Nginx+uWSGI部署Django以及Nginx负载均衡操作这一篇笔记介绍如何使用Nginx+uWSGI来部署Django。上一篇笔记中有介绍直接使用uWSGI作为web服务器来部署Django,这一篇笔记介绍如何使用Nginx来部署。使用Ngin......
  • 程序员的思维修炼 读书笔记01
    Dreyfus模型将学习的过程分为五个不同的阶段或水平:1.新手(Novice)需要详细的指导——要手把手地教。新手不知道这些指导是否有效,或者哪些指导更加重要;因为没有上下文知识可供他们使用进行评估。因此,新手需要频繁迅速的成就感和有规律的反馈。一本好的入门指导书籍要提供有足够多的......
  • openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebac
    openGauss学习笔记-151openGauss数据库运维-备份与恢复-物理备份与恢复之gs_basebackup151.1背景信息openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_basebackup工具做基础的物理备份。gs_basebackup的实现目标是对服务器数据库文件的......
  • C++学习笔记五:变量与数据类型(Auto类型)
    Auto允许编译器自己来推断变量的类型,这种新功能是在c++11引入的。这个关键字结合for循环使用可以节省变量类型的重复输入。VSCode可以在鼠标移动到变量上之后直接显示变量的类型。autovar1{12};//intautovar2{13.0};//doubleautovar3{14.0f};//floatautovar4{15......
  • Linux 笔记
    Whatdoes"{};"meaninthefindcommand?Ifyourun find with exec, {} expandstothefilenameofeachfileordirectoryfoundwith find (sothat ls inyourexamplegetseveryfoundfilenameasanargument-notethatitcalls ls orwhatevero......