当前位置: 首页 > news >正文

一文3000字从0到1带你进行Mock测试(建议收藏)

​什么是mock?

​mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为

为什么要使用Mock?

之所以使用mock测试,是因为真实场景很难实现或者短期实现起来很困难。主要场景有:

  • 真实对象可能还不存在(接口还没有完成开发)
  • 真实对象很难搭建起来(第三方支付联调)
  • 真实对象的行为很难触发(例如网络错误)
  • 真实对象速度很慢(例如一个完整的数据库,在测试之前可能需要初始化)
  • 真实对象可能包含不能用作测试(而不是为实际工作)的信息和方法
  • 真实的对象是用户界面,或包括用户页面在内
  • 真实的对象使用了回调机制
  • 真实对象的行为是不确定的(例如当前的时间或当前的温度)

如何使用Mock?

通过代码制造假的输出(结果)

接口自动化测试客户端Mock

通过代码去模拟假的接口返回数据(访问真实接口的过程就可以省略)

举个栗子:要测试请求接口visit接口,实际上开发还没完成开发工作,我们先编写测试用例,数据都先准备空的,然后可以运行通过,等开发好接口以后,再把相应内容如info中的数据,实际结果等修改后运行

visit方法是在base.py模块中APICase类下

​
import unittest
from common.base import APICaseclass TestRequest(unittest.TestCase, APICase):
def test_request(self):
"""
1.准备接口接口访问的数据
2.调用接口访问visit方法
3.断言
"""
info = {"headers": "", "json": "", "expected": ""}
# actual = self.visit(info)
actual = ""
self.assertEqual(info['expected'], actual)

mock是python的第三方库,所以使用mock前,需要先进行安装pip install mock

修改代码如下:

import unittest
from common.base import APICase
from mock import Mockclass TestRequest(unittest.TestCase, APICase):
def test_request(self):
"""
1.准备接口接口访问的数据
2.调用接口访问visit方法
3.断言
"""
info = {"headers": "", "json": "", "expected": ""}
self.visit = Mock(return_value="")
actual = self.visit(info)
# actual = ""
self.assertEqual(info['expected'], actual)

运行结果:

当接口没开发出来时,直接编写这行代码,因为调用的是mock返回的内容

actual = self.visit(info)当接口开发完成时,把这行代码注释掉即可

self.visit = Mock(return_value="")如果想设置返回的数据,也是可以的,如下

拿之前测试注册接口为例,修改代码如下:

import unittest
import requests
from mock import Mockclass TestRegister(unittest.TestCase):
def test_register_01(self):
'''步骤:
1.准备测试数据
2.发送接口请求,得到实际结果
3.预期结果和实际结果的断言
'''
# 1.准备测试数据
url = 'http://api.lemonban.com:8766/futureloan/member/register'
method = 'post'
headers = {'X-Lemonban-Media-Type': 'lemonban.v2'}
json_data = {"mobile_phone": "", "pwd": "12345678"}
expected = {
"code": 1,
"msg": "手机号为空",
"data": None,
"copyright": "Copyright 柠檬班 © 2017-2020 湖南省零檬信息技术有限公司 All Rights Reserved"
}
# 2.发送接口请求,得到实际结果
# 因为执行了Mock,所以就不会执行请求真实的接口了
requests.request = Mock(return_value=expected)
response = requests.request(method=method, url=url, headers=headers, json=json_data)
# mock返回的是expected的内容,因此是dict,所以实际结果要把之前代码上的.json去掉
actual = response
# 3.预期结果和实际结果的断言
self.assertEqual(expected, actual)

只需要修改两处代码,即可访问假的接口

加上下面这行代码

requests.request = Mock(return_value=expected)修改下面这行代码

actual = response.json() 修改为 actual = response

服务Mock(Mock Server)

方法一:

开发的接口是在server,真实的服务器

我就自己冒充开发人员,写一个假的服务器,写一个假的接口,可以通过mockoon工具实现

直接去官网下载安装即可

打开mockoon,设置请求方法、URL、返回内容,点击开启服务按钮

​这时候就可以请求服务接口了

​方法二:

测试开发技术,自己做一个真实的服务出来,确实可以支持更多的响应,会省略很多步骤

用代码编写一个服务接口

from flask import Flaskapp = Flask("py44")@app.route('/member/register', methods=['post'])
def register():
return {"code": 11, "msg": "success"}app.run(debug=True)

运行结果:

只有运行代码,才算开启服务

这时候就可以请求服务接口

​方法2的灵活之处就是可以支持更多响应,如设置请求体

from flask import Flask, requestapp = Flask("py44")@app.route('/member/register', methods=['post'])
def register():
username = request.form.get('username')
password = request.form.get('password')
if username == 'momo' and password == '123456':
return {"code": 11, "msg": "success"}
return {"code": 22, "msg": "failed"}app.run(debug=True)

启动服务后,使用postman请求

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

一文3000字从0到1带你进行Mock测试(建议收藏)

​什么是mock? ​mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因…...

数据结构 ——— 链式二叉树的销毁(释放)

目录 链式二叉树示意图 手搓一个链式二叉树 代码实现 示意图 手搓一个链式二叉树 代码演示: // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向…...

log4j异常堆栈文件输出

目的:log4j异常堆栈关联到traceId一句话中,方便搜索 1、获取堆栈后一起打印 private void logException(Throwable t, ProceedingJoinPoint joinPoint) {if (this.printErrorStackSys) {StringWriter sw new StringWriter();PrintWriter pw new Print…...

在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

最近,我在 Windows 系统上安装和配置 Apache Maven 时遇到了一些问题,想在此记录下我的解决历程,希望对遇到类似问题的朋友有所帮助。 问题描述 我下载了 Maven 并按照常规步骤配置了相关的环境变量。然而,在 PowerShell 中输入…...

SpringSecurity源码中核心类

SpringSecurity源码 第一部分 核心类 SecurityBuilderHttpSecurityWebSecuritySecurityFilterChainFilterChainProxy SecurityBuilder是安全构架器,HttpSecurity和WebSecurity都是SecurityBuilder的实现类,HttpSecurity通过build()构建了一个Security…...

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目...

猿创征文|Inscode桌面IDE:打造高效开发新体验

猿创征文|Inscode桌面IDE:打造高效开发新体验 引言 在当今快速发展的软件开发领域,一个高效、易用的集成开发环境(IDE)是每个开发者必不可少的工具。Inscode 桌面 IDE 作为一款新兴的开发工具,凭借其强大…...

概率论中的PMF、PDF和CDF

在概率论中,PMF(概率质量函数)、PDF(概率密度函数)和CDF(累积分布函数)是描述随机变量分布的三个重要概念。它们分别用于不同类型的随机变量,并帮助我们理解随机事件的概率特性。本文…...

Vue 简单入手

前端工程化(Front-end Engineering)指的是在前端开发中,通过一系列工具、流程和规范的整合,以提高开发效率、代码质量和可维护性的一种技术和实践方法。其核心目的是使得前端开发变得更高效、可扩展和可维护。 文章目录 一、Vue 项…...

Github配置ssh key原理及操作步骤

文章目录 配置SSH第一步:检查本地主机是否已经存在ssh key第二步:生成ssh key第三步:获取ssh key公钥内容第四步:Github账号上添加公钥第五步:验证是否设置成功验证原理 往github上push项目的时候,如果走ht…...

大循环引起CPU负载过高

一、问题背景 环境:jdk1.8 tomcat7 在一次发布时,cpu出现负载过高,其负载突破200%,并且响应时间也大幅度超时。 二、问题分析 【1】发布前做过压测,并没有发现cpu异常升高的现象,所以其可能与生产环境的请…...

[Java]微服务治理

注册中心原理 注册中心可以统一管理项目中的所有服务 服务治理中的三个角色分别是什么? 服务提供者: 暴露服务接口,供其它服务调用服务消费者: 调用其它服务提供的接口注册中心: 记录并监控微服务各实例状态,推送服务变更信息 消费者如何知道提供者的…...

深入解析C语言中的extern关键字:语法、工作原理与高级应用技巧

引言 在C语言中,extern 关键字是一个强大的工具,用于声明外部变量和函数,使得这些变量和函数可以在多个源文件之间共享。理解 extern 的工作原理和最佳实践对于编写模块化、可维护的代码至关重要。本文将深入探讨 extern 关键字的各个方面&a…...

元器件封装

元器件封装类型 为什么越来越多用贴片元件,而不是插件元件 为什么越来越多用贴片元件,而不是插件元件 1.体积小、质量小、容易保存和运输; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔,用锡少。直插元件最麻烦的就是拆卸&a…...

状态空间方程离散化(Matlab符号函数)卡尔曼

// 卡尔曼滤波(4):扩展卡尔曼滤波 - 知乎 // // matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_matlab状态方程离散化-CSDN博客 // // // %https://blog.csdn.net/weixin_44051006/article/details/107007916 clear all; clc; syms R1 R2 C1 C…...

软件设计师-计算机网络

OSI网络模型 物理层,提供原始物理通路。数据交换的单位是二进制,bit,比特流,设备有中继器,集线器数据连输层,把原始不可靠的物理层链接变成无差错的数据通道,并解决多用户竞争问题。传送单位是帧&#xff…...

SpringBoot操作Elasticsearch

SpringBoot操作Elasticsearch SpringData框架简化Java代码连接ES的过程 官网&#xff1a;https://spring.io/projects/spring-data/ 以上列表中都是Spring Data支持连接的数据源 添加依赖 已经添加过了 <!--添加SpringDataES的依赖--><dependency><groupId&…...

阿里云aliyun gradle安装包下载地址

阿里云 查找你要下载的安装包 macports-distfiles-gradle安装包下载_开源镜像站-阿里云 https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.9-bin.zip 腾讯 https://mirrors.cloud.tencent.com/gradle/ https://mirrors.cloud.tencent.com/gradle/ https…...

【设计模式】创建型设计模式-工厂模式的实现

工厂模式实现 定义例子UML类图理解Java代码实现总结 定义 工厂方法模式定义了一个接口用于创建对象&#xff0c;该模式由子类决定实例化哪个工厂类。该模式把类的实例化推迟到了子类。 例子 通过一个公共的类方法来管理画图对象的创建。 UML类图理解 Java代码实现 定义接口…...

【分布式】CAP理论

CAP定理的核心要点&#xff1a; CAP定理指出&#xff0c;任何一个分布式系统在面对网络分区&#xff08;Partition&#xff09;的情况下&#xff0c;最多只能同时满足以下三个特性中的两个&#xff1a; 一致性&#xff08;Consistency&#xff09;&#xff1a; 所有节点在同一…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...