深入理解pytest fixture:提升测试的灵活性和可维护性!

news2024/7/7 18:01:05

在现代软件开发中,测试是保证代码质量的重要环节。pytest作为一个强大的测试框架,以其灵活的fixture系统脱颖而出。本文将详细介绍pytest中的fixture概念,通过具体案例展示其应用,并说明如何利用fixture提高测试的灵活性和可维护性。

什么是fixture?

在pytest中,fixture是一个函数,用于在测试运行之前、期间或之后准备一些需要的资源。测试函数通过将fixture声明为参数来请求它们。当pytest运行测试时,会检查测试函数的参数,并寻找与这些参数同名的fixture。一旦找到这些fixture,pytest会运行它们,捕获返回的结果,并将这些对象作为参数传递给测试函数。

基本示例

让我们通过一个简单的示例来理解fixture的基本用法:

import pytest

@pytest.fixturedef fruit_bowl():    return ["apple", "banana", "cherry"]

def test_fruit_salad(fruit_bowl):    assert "apple" in fruit_bowl    assert "banana" in fruit_bowl    assert "cherry" in fruit_bowl

在这个示例中,`fruit_bowl`是一个fixture函数,返回一个包含几种水果的列表。测试函数`test_fruit_salad`请求`fruit_bowl`作为参数。pytest在运行测试时,会执行`fruit_bowl` fixture,并将其返回的列表传递给`test_fruit_salad`函数。

复杂的fixture依赖

一个fixture可以请求其他的fixture,这使得pytest的fixture系统非常灵活。我们可以将复杂的测试需求分解成更简单、组织更好的函数,每个函数只描述它们所依赖的内容。

import pytest

@pytest.fixturedef fruit_bowl():    return ["apple", "banana", "cherry"]

@pytest.fixturedef large_fruit_bowl(fruit_bowl):    return fruit_bowl + ["watermelon", "pineapple"]

def test_large_fruit_salad(large_fruit_bowl):    assert "watermelon" in large_fruit_bowl    assert "pineapple" in large_fruit_bowl    assert "apple" in large_fruit_bowl

在这个示例中,`large_fruit_bowl` fixture依赖于`fruit_bowl` fixture,并在其基础上添加了更多的水果。通过这种方式,我们可以轻松地复用和扩展fixture。

多个fixture请求

测试在使用fixture时并不限于一次只请求一个fixture。它们可以同时请求多个fixture。

import pytest

@pytest.fixturedef fruit_bowl():    return ["apple", "banana", "cherry"]

@pytest.fixturedef vegetable_bowl():    return ["carrot", "lettuce", "spinach"]

def test_mixed_salad(fruit_bowl, vegetable_bowl):    assert "apple" in fruit_bowl    assert "carrot" in vegetable_bowl

在这个示例中,`test_mixed_salad`测试函数同时请求`fruit_bowl`和`vegetable_bowl`两个fixture,并验证它们的内容。

Fixture的缓存机制

在同一个测试中,fixture可以被多次请求,pytest不会重复执行它们。这意味着我们可以在多个fixture中请求相同的fixture,而不会导致重复执行。

import pytest

@pytest.fixturedef fruit_bowl():    return ["apple", "banana", "cherry"]

@pytest.fixturedef large_fruit_bowl(fruit_bowl):    return fruit_bowl + ["watermelon", "pineapple"]

@pytest.fixturedef fruit_and_veg_bowl(fruit_bowl, vegetable_bowl):    return fruit_bowl + vegetable_bowl

def test_combined_bowl(fruit_and_veg_bowl):    assert "apple" in fruit_and_veg_bowl    assert "carrot" in fruit_and_veg_bowl

在这个示例中,`fruit_bowl`被多个fixture请求,但pytest只会执行一次`fruit_bowl`。

自动使用的fixture

有时我们希望所有的测试都依赖某些fixture。使用`autouse`参数,可以让所有测试自动请求这些fixture,减少冗余请求。

import pytest

@pytest.fixture(autouse=True)def setup_environment():    # 假设这是环境配置的代码    pass

def test_environment_dependent():    assert True

在这个示例中,`setup_environment` fixture被自动应用到所有测试中,而无需显式地在测试函数中声明。

此次我们了解了pytest fixture的基本概念和灵活应用。pytest的fixture系统不仅简化了测试代码,还提高了其可读性和可维护性。无论是简单的数据准备,还是复杂的依赖管理,fixture都能提供强大的支持。希望通过这些示例和解释,你能在实际项目中更好地应用pytest的fixture功能,编写出更加高效的测试代码。

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

软件测试面试文档

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CVPR 2024最佳论文:“神兵”的组合器 Generative Image Dynamics

CVPR 2024的最佳论文来自谷歌、美国加州大学圣迭戈分校。两篇都来至于视频生成领域,可见今年外界对视频生成领域关注度很高。今天的这篇是“Generative Image Dynamics”,Google Research发布的。它的研究成果令人震惊,从单张RGB图像生成连续…

VIM介绍

VIM(Vi IMproved)是一种高度可配置的文本编辑器,用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的,后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名,是许…

【pytorch14】感知机

单层感知机模型 对于单层的感知机,它的激活函数是一个sigmoid 对于符号的定义做一个规范化,输入层每一层进行一个编号 输入是第0层,上标0表示属于输入层,下标0到n表示一共有n个节点(这里严格来说应该是0~n-1,为了书写…

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?

6 月 27 日,全球知名的开源平台 Hugging Face 的联合创始人兼首席执行官 Clem 在社交平台激动宣布,阿里 Qwen2-72B 成为了开源模型排行榜的王者。 这是一件大好事,说明了我们在大模型领域从先前的追赶,逐渐走向了领导,…

【 VIPKID-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

Redis 7.x 系列【17】四种持久化策略

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一:…

初学Spring之自动装配 Bean

Bean 的作用域: 1.单例模式(Spring 默认机制) scope“singleton” 2.原型模式:每次从容器中 get 时,都会产生一个新对象 scope"prototype" 3. request、session、application,只能在 web 开…

不可变集合

目录 1.1 什么是不可变集合 1.2 不可变集合分类 1.3 不可变的list集合:list of 1.4 不可变的Set集合:set.of 1.5 不可变的Map集合 1.5.1:键值对个数小于等于10 1.5.2:键值对个数大于10 Map.ofEntries方法: copy…

JBoss JMXInvokerServlet 反序列化漏洞

漏洞原理: 这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。 影响版本: JBoss Enterprise Application Platform 6…

如视“VR+AI”实力闪耀2024世界人工智能大会

7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(以下简称为“WAIC 2024”)在上海盛大开幕,本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办,围绕“以共商促共享 以善治促善智”主题&#xf…

【虚拟机】虚拟机网络无法访问问题【已解决】

【虚拟机】虚拟机无法上网问题【已解决】 问题探究解决方法法1:查看相关“网络服务”是否处于正常启动状态法2:重启网络法3:重新安装VMWare法4:使用NAT模式,每次打开win7都没连上网的解决办法 问题探究 安装了很多个虚…

昇思MindSpore学习总结八——静态图加速

AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。两种运行模式的详细介绍如下: 1、动态图模式 动态图的特点是计算图的构建和计算同时发生(D…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法,使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上,所有的vue模板都是语法层面的HTML,可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。 今天要介绍的这位同学,是来自深圳中学的高二某班的欧阳达晟同学&#x…

一、强化学习基本概念

一、强化学习基本概念 1.1 何为强化学习?1.2 强化学习的环境1.3 强化学习的目标1.4 强化学习的数据 1.1 何为强化学习? 强化学习(Reinforcement Learning, RL)是机器通过与环境交互来实现目标的一种计算方法。机器和环境的一轮交互是指:机器在…

Spring AI之后,阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI

阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI 1.Spring AI2.Spring Cloud Alibaba AI3. 接入体验 1.Spring AI Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通…

安装Anaconda找不到旧版本怎么办?

标题Anaconda官网:https://www.anaconda.com/ 对于个人学习使用,不用下载最新版本,使用之前的版本相对还是比较稳定的。所以需要寻找旧版网址。 标题旧版网址:https://repo.anaconda.com/archive/ 里面多种版本选择 然后选择自…

解决前端登录成功之后,往后端发请求携带cookie问题

项目背景: 今天在做伙伴匹配系统: 我现在实现的功能是: 在我登录成功之后,就进入了主页(默认页),在我访问用户页的时候产生的问题 首先说明一下这个Cookie的问题: 我们登录成功…

Django 定义模型执行迁移

1,创建应用 Test/app8 python manage.py startapp app8 2,注册应用 Test/Test/settings.py 3,配置路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(app8/, include(a…

SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,SO Oladejo受到徒步旅行启发,提出了徒步优化算法(Hiking Optimization Algorithm, HOA)。 2.算法原理 2.1算法思想 HOA灵感来自于…