IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest零基础入门到精通(05)Moke技术详解 -> 正文阅读

[开发测试]pytest零基础入门到精通(05)Moke技术详解

什么是Moke?

在我们软件测试过程中,比如项目开发期间,我们需要提前接入自动化阶段,但是这个时候开发接口并没有开发好,这个时候,我们就可以通过Mock技术来构造一个虚拟对象来替代业务接口,以达到相同的效果,这个虚拟对象就是Moke。

Moke的介绍

实现mock的技术很多,这些技术中,可以分为两类,mock数据和mock服务:

  • mock数据:即 mock 一个对象,写入一些预期的值,通过它进行自己想要的测试。常见的有:
    EasyMock、Mockito 、WireMock、JMockit。主要适用于单元测试。
  • mock 服务:即mock 一个 sever,构造一个依赖的服务并给予他预期的服务返回值,适用范围广,更加适合集成测试。如 moco框架。

Moco 是类似一个 Mock 的工具框架,一个简单搭建模拟服务器的程序库/工具,下载就是一个JAR包。

  • 只需要简单的配置 request、response 等即可满足要求
  • 支持 http、https、socket 协议,可以说是非常的灵活性
  • 支持在 request 中设置 Headers , Cookies , StatusCode 等 对 GET、POST、PUT、DELETE 等请求方式都支持
  • 无需环境配置,有 Java 环境即可
  • 修改配置后,立刻生效。只需要维护接口,也就是契约即可
  • 支持多种数据格式,如 JSON、Text、XML、File 等
  • 可与其他工具集成,如 Junit、Maven等

下载moco

https://github.com/dreamhead/moco

配置json文件

我们需要先编辑一个json文件,用来模拟不同的请求,返回不同的响应。新建一个文件,格式改为json,然后打开这个文件进行编辑,内容如下:

 [{
  "description":"demo",
  "request":{
   "uri":"/demo1"
   },
  "response":{
   "text":"Hello,demo1"
  }
 }]
  • description:表示接口的描述,由于json无法写注释,所以提供了用这个key
  • uri:uri是我们这个接口的统一资源标识符,可以根据模拟的接口自行定义
  • response:response里的内容即为返回的值

以上我们就定义了一个非常简单的moke接口。

启动moco

moco项目是采用java开发的,所以启动moco前,需要安装jdk。未安装请先安装

把我们下载下来的moco的jar包和刚刚编辑好的json文件放到同一个文件夹路径下,如图:

在这里插入图片描述

然后我们在这个目录下打开cmd,输入如下命令:

java -jar moco-runner-0.11.0-standalone.jar http -p 9090 -c test.json

在这里插入图片描述

其中:

  • java -jar moco-runner-0.11.0-standalone.jar 是启动我们安装的jar包
  • http:代表这个模拟的是http请求
  • -p 9090 :定义是端口号
  • -c test.json 是我们编辑的那个json文件名。

启动成功之后,我们来访问:http://localhost:9090/demo1.

在这里插入图片描述
这样我们定义了一个简单的moke的接口。

我们可以在单独封装一个简单的 .bat 文件

配置不同的请求

约定URI

 [{
  "description":"demo1=约定URI",
  "request":{
   "uri":"/demo1"
   },
  "response":{
   "text":"Hello,demo1"
  }

约定请求参数

[{
	"description":"demo2=约定请求参数",
	"request":{
		"queries":{
			"key1":"abc",
			"key2":"123"
		  }
		},
	"response":{
		"text":"Hello,demo2"
	}
}]

约定请求方法

[{
	"description":"demo3=约定请求方法",
	"request":{
		"method":"DELETE"
		},
	"response":{
		"text":"Hello,demo3"
	}
}]

约定请求头

[{
	"description":"demo4=约定请求头",
	"request":{
		"headers":{
			"Content-Type":"application/xml"
			}
		},
	"response":{
		"text":"Hello,demo4"
	}
}]

约定请求体-form

[{
	"description":"demo5=约定请求体参数-form",
	"request":{
		"forms":{
			"key1":"abc"
			}
		},
	"response":{
		"text":"Hello,demo5"
	}
}]

约定请求体参数-json

[{
	"description":"demo6=约定请求体参数-json",
	"request":{
		"json":{
				"key1":"value1",
				"key2":"value2"
			}
		},
	"response":{
		"text":"Hello,demo6"
	}
}]

uri-startsWith匹配

[{
	"description":"demo7=uri-startsWith匹配",
	"request":{ 
		"uri":{
				"startsWith":"/sq"
			}
		},
	"response":{
		"text":"Hello,demo7"
	}
}]

uri-endWith匹配

[{
	"description":"demo8=uri-endsWith匹配",
	"request":{ 
		"uri":{
				"endsWith":"sq"
			}
		},
	"response":{
		"text":"Hello,demo8"
	}
}]

uri-contain包含

[{
	"description":"demo9=uri-contain匹配",
	"request":{ 
		"uri":{
				"contain":"fcl"
			}
		},
	"response":{
		"text":"Hello,demo9"
	}
}]

定义返回状态码

[{
	"description":"demo10=响应状态码",
	"request":{ 
		"uri":"demo10"
		},
	"response":{
		"status":200
	}
}]

定义返回响应头

[{
	"description":"demo11=响应头",
	"request":{ 
		"uri":"demo11"
		},
	"response":{
		"headers":{
			"Content-Type":"application/json"
		}
	}
}]

重定向

[{
	"description":"demo12=重定向",
	"request":{ 
		"uri":"demo12"
		},
	"redirectTo":"http://www.baidu.com"
}]

返回JSON格式的数据

[{
    "description":"demo13=返回json格式的数据",
	"request":{
		"uri":"/demo13"
	 }, 
	"response":{
		"json":{"key1":"value1","key2":"value2"}
    }
}]

总结

Moco还可以通过在json文件中添加cookies、header、重定向这些参数,来模拟各种情况下的请求和返回值,可以根据自己工作的需求去对这些东西进行了解。

Moco是热更新的,所以启动了jar包的服务之后,即使修改了json文件中的内容,也不需要重启服务就生效。

掌握了mock测试的技术,可以让我们在开发没有完成对应接口的时候,有接口文档就提前进入到测试状态,是现在敏捷模式下不可或缺的技术,也是持续集成中一个重要的组成部分。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章           查看所有文章
加:2021-11-27 10:12:06  更:2021-11-27 10:13:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:24:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码