python技术栈之单元测试中mock的使用

什么是mock?

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

mock的作用

特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。

unittest是python内置的单元测试库,在做接口测试时,如果开发的接口未开发出来,我们如果想要测试接口联调,又不能干等着,这时可以使用unittest.mock模拟接口返回,进行接口测试。

举个栗子

示例:1、新增登录和获取个人信息两个接口,分别由A和B开发。2、A登录接口尚未开发完成,B获取个人信息接口已经开发完成。3、已知登录接口返回3种状态:登录成功,登录失败,登录异常。

场景源码:case.py

# -*-coding:utf-8 -*-def login():# 登录接口,尚未开发完成# 登录成功返回:{"result": "success", "message": "登录成功"}# 登录失败返回:{"result": "fail", "message":"账号或密码错误"}# 登录异常返回:{"code": "404", "message": "找不到页面"}# message返回失败原因passdef get_user_info():# 根据登录的结果success or fail,判断跳转到对应页面result = login()print(result)try:if result["result"] == "success":return "登录成功"elif result["result"] == "fail":return "登录失败"else:return "未知失败"except:return "服务端异常"

单元测试用例设计:

# -*-coding:utf-8 -*-
from unittest import mock
import unittest
import caseclass TestLogin(unittest.TestCase):# 单元测试用例def test_login_success(self):# 测试登录成功场景# mock一个支付成功的数据case.login = mock.Mock(return_value={"result": "success", "message": "登录成功"})# 根据支付结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "登录成功")def test_login_fail(self):# 测试登录失败场景# mock一个登录失败的数据case.login = mock.Mock(return_value={"result": "fail", "message": "账号或密码错误"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "登录失败")def test_login_fail2(self):# 测试登录失败场景# mock一个登录失败的数据case.login = mock.Mock(return_value={"result": "", "message": "账号或者密码为空"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "未知失败")def test_login_error(self):# 测试登录异常场景# mock一个登录异常的数据case.login = mock.Mock(return_value={"code": "404", "message": "找不到页面"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "服务端异常")if __name__ == "__main__":unittest.main()

执行unittest单元测试用例:

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/212314.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[node] Node.js的Web 模块

[node] Node.js的Web 模块 什么是 Web 服务器?Web的应用架构http使用方式使用 Node 创建 Web 服务器使用 Node 创建 Web 客户端 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器…

使用WalletConnect Web3Modal v3 链接钱包基础教程

我使用的是vueethers 官方文档:WalletConnect 1.安装 yarn add web3modal/ethers ethers 或者 npm install web3modal/ethers ethers2.引用 新建一个js文件,在main.js中引入,初始化配置sdk import {createWeb3Modal,defaultConfig, } from…

Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程

文章目录 1. 引言2. Vue3 和 Element-Plus 简介2.1 Vue32.2 Element-Plus 3. 动态表单的需求与挑战4. Vue3 和 Element-Plus 动态表单的优势4.1 Vue3的组合式API4.2 Element-Plus的表单组件 5. 一站式生成动态表单的实现5.1 准备工作5.2 创建动态表单组件5.3 使用动态表单组件 …

uniapp横向滚动示例

目录 插件市场案例最后 插件市场 地址 案例 地址 最后 感觉文章好的话记得点个心心和关注和收藏,有错的地方麻烦指正一下,如果需要转载,请标明出处,多谢!!!

读书笔记-《数据结构与算法》-摘要4[插入排序]

插入排序 核心:通过构建有序序列,对于未排序序列,在已排序序列中从后向前扫描(对于单向链表则只能从前往后遍历),找到相应位置并插入。实现上通常使用in-place排序(需用到O(1)的额外空间) 从第一个元素开始,该元素可…

Science | 张锋实验室:聚类算法揭示188种新型CRISPR系统

微生物序列数据库包含大量有关酶和其他可用于生物技术的分子的信息。但近年来,这些数据库已经变得非常庞大,以至于很难有效地搜索到感兴趣的酶。 2023年11月23日,博德研究所张锋及美国国立卫生研究院Eugene V. Koonin共同通讯在Science 在线…

【原神游戏开发日志1】缘起

【原神游戏开发日志1】缘起 版权声明 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明 文章内容不得删减、修改、演绎 相关学习资源见文末 大家好,最近看到原神在TGA上频频获奖,作为一个14年经验的游戏开…

C# Solidworks二次开发:三种获取SW设计结构树的方法-第一讲

今天要讲的方法是如何在Solidworks中获取左侧设计结构上的节点,获取节点的方法我所知道的有三种。 这三种方法满足我在使用过程的多种需求,下面先开始介绍第一个方法: 方法的API如下所示:GetComponents Method (IAssemblyDoc) 这…

基于单片机的电子密码锁设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的电子密码锁,可设置四位密码,输入错误三次,报警灯亮起(红灯亮起),输入正确,绿灯闪烁三次。可通过LCD显示屏查看密码&…

Canvas鼠标画线

鼠标按下开始画线,鼠标移动根据鼠标的轨迹去画,鼠标抬起停止画线 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

Leetcode刷题笔记题解(C++):LCR 121. 寻找目标值 - 二维数组

思路&#xff1a;从左小角或者右上角开始遍历&#xff0c;假设右上角开始遍历&#xff0c;如果当前值大于目标值则列-1&#xff1b;如果当前值小于目标值则行1&#xff0c;以此遍历来查找目标值&#xff1b;注意col和row的选取 class Solution { public:bool findTargetIn2DPl…

选择黑盒测试用例设计方法的综合策略方案总结

前言 具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。这些方法都是比较实用的&#xff0c;但在具体工作中要采用什么方法&#xff0c;需要针对项目的特点加以适当的选择。在实际高水平…

在 Windows 桌面的redis中远程连接到 VMware 中运行的 Linux 上的 Redis

先修改一下docker容器中的redis(一会连上之后看效果) 我使用的是VMware的虚拟机 选择的网络设置为桥接模式 查到虚拟机独立的ip是如下 允许 Linux 虚拟机上的 Redis 监听外部连接&#xff1a; 打开 Linux 虚拟机上的 Redis 配置文件。在大多数系统上&#xff0c;配置文件位于…

java设计模式学习之【桥接模式】

文章目录 引言桥接模式简介定义与用途&#xff1a;实现方式 使用场景优势与劣势桥接模式在Spring中的应用绘图示例代码地址 引言 想象你正在开发一个图形界面应用程序&#xff0c;需要支持多种不同的窗口操作系统。如果每个系统都需要写一套代码&#xff0c;那将是多么繁琐&am…

Pytorch进阶教学——训练一个图像分类模型(GPU)

目录 1、前言 2、数据集介绍 3、获取数据 4、创建网络 5、训练模型 6、测试模型 6.1、测试整个模型准确率 6.2、测试单张图片 1、前言 编写一个可以分类蚂蚁和蜜蜂图片的模型&#xff0c;使用数据集对卷积神经网络进行训练。训练后的模型可以对蚂蚁或蜜蜂的图片进行…

添加cpack install功能

修改最外层的CMakeLists.txt, 添加几行代码&#xff1a; # If GNUInstallDirs is not included, CMAKE_INSTALL_BINDIR is empty. include(GNUInstallDirs)# it must go before project in order to work set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}" CACHE …

Android平板还能编程?Ubuntu本地安装code-server远程编程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

Vector Quantized Diffusion Model for Text-to-Image Synthesis

Vector Quantized Diffusion Model for Text-to-Image Synthesis Shuyang Gu, University of Science and Technology of China, Microsoft, CVPR2022, Cited: 340, Code, Paper 1. 前言 我们提出了用于文本到图像生成的矢量量化扩散(Vector Quantized Diffusion Model&…