pytest教程-11-初识fixture

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们学习了使用allure生成html测试报告的方法,本小节我们讲解一下pytest fixture测试夹具的使用方法。

前言

在做自动化的过程中,编写用例时候需要用到用例的前置和用例的后置,其中pytest中有setup_class和teardown_class可以帮助我们完成这些,但是不够完善而且灵活性不够强。举个简单的例子,一个calss中有3条用例,其中2条需要登录,1条不需要登录,这个时候如果在用setup和teardown来做就有点不方便。这个时候就引入了新的知识点fixture。

fixture介绍

fixture是pytest精髓所在,就像unittest中的setup和teardown一样,但相对之下它的功能更加强大和灵活。
fixture的作用

1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现

2.测试用例的前置条件可以使用fixture实现

3.支持经典的xunit fixture ,像unittest使用的setup和teardown

4.fixture可以实现unittest不能实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题

fixture的定义和源码

我们使用@pytest.fixture()来定义fixture函数。fixture()即可无参数进行定义,也可以带参数定义。

@pytest.fixture()无参数进行定义

import pytest
@pytest.fixture      #fixture()未带任何参数,声明一个fixture函数
def fixture_demo():print("这个是一个fixture的demo演示")
def test_demo(fixture_demo):  #调用fixture函数——fixture_demoprint("这是一个测试demo。") 

@pytest.fixture()有参数的进行定义

import pytest
@pytest.fixture(params=[1,2,3]) #fixture()带着parmas对ids()进行fixture函数的声明
def ids(request):data=request.paramprint(f'获取测试数据{data}')return data
def test_ids(ids):  #调用fixture函数-ids()print(ids) 

fixture源码如下

def fixture(  # noqa: F811fixture_function: Optional[_FixtureFunction] = None,*,scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",params: Optional[Iterable[object]] = None,autouse: bool = False,ids: Optional[Union[Iterable[Union[None, str, float, int, bool]],Callable[[Any], Optional[object]],]] = None,name: Optional[str] = None
) -> Union[FixtureFunctionMarker, _FixtureFunction]:fixture_marker = FixtureFunctionMarker(scope=scope, params=params, autouse=autouse, ids=ids, name=name,)# Direct decoration.if fixture_function:return fixture_marker(fixture_function)return fixture_marker

通过上述源码可以看到,fixture中一共有5个参数分别是:

  • scope:fixture的作用域,默认为function;
  • params:fixture的参数
  • autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture;
  • ids: fixture参数进行id化命名
  • name:装饰器的名称,同一模块的fixture相互调用建议写不同的name。

fixture调用

调用fixture有三种方式

1、在测试用例中直接调用

将fixture名称作为参数传入测试用例,如果fixture有返回值,那么测试用例将会接收返回值。

import pytest@pytest.fixture()
def fixtureFunc():return 'fixtureFunc'def test_fixture(fixtureFunc):print('我调用了{}'.format(fixtureFunc))class TestFixture(object):def test_fixture_class(self, fixtureFunc):print('在类中使用fixture "{}"'.format(fixtureFunc))if __name__=='__main__':pytest.main(['-s', 'test_fixture.py'])

2、使用@pytest.mark.usefixtures('fixture')装饰器

每个函数或者类前使用@pytest.mark.usefixtures('fixture')装饰器装饰

import pytest@pytest.fixture()
def fixtureFunc():print('\n fixture->fixtureFunc')@pytest.mark.usefixtures('fixtureFunc')
def test_fixture():print('in test_fixture')@pytest.mark.usefixtures('fixtureFunc')
class TestFixture(object):def test_fixture_class(self):print('in class with text_fixture_class')if __name__=='__main__':pytest.main(['-s', 'test_fixture.py'])

3、 使用autouse参数

指定fixture的参数autouse=True这样每个测试用例会自动调用fixture(其实这里说的不是很准确,因为还涉及到fixture的作用范围,那么我们这里默认是函数级别的,后面会具体说fixture的作用范围)

import pytest
@pytest.fixture(autouse=True)
def fixtureFunc():print('\n fixture->fixtureFunc')def test_fixture():print('in test_fixture')class TestFixture(object):def test_fixture_class(self):print('in class with text_fixture_class')if __name__=='__main__':pytest.main(['-v', 'test_fixture.py'])

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

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

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

相关文章

2024年了,抖店还能做吗?适合新手吗?

我是电商珠珠 现在已经24年了,抖店也已经发展了四年了。其中有很多在门外观望的人,还在犹豫不决。认为抖店发展到今天,所有的红利早已在20年的时候就消失殆尽了,特别是没有经验的如果入驻了,既不能享受平台红利&#…

后端程序员入门react笔记(四)-综合运用,写一个小demo

样式模块化 有时候我们会遇到这样的问题,有两个css对一个class声明了样式,这样的话后引入的css会覆盖前面的css样式,导致样式冲突,那么我们怎么解决这种问题呢,我们可以使用样式的模块化,我们起名一个inde…

全栈笔记_浏览器扩展篇(插件开发 - chrome浏览器proxy代理)

代理类型 常用的包括http、https、socks代理 配置权限 要让扩展使用代理接口,需要声明proxy权限: // manifest.json "permissions": ["proxy" ]设置代理服务器 chrome.proxy.settings.set({ scope: ‘regular’, value: 代理配置},回调函数) 代理配…

【前端面经2】京东一面

题目来源:牛客网 自我介绍 动态参数解析的解决方案 对于动态部分使用…args进行接受,可以把动态部分提取成数组 前端安全问题 CDN劫持 内容安全策略CSP 安全沙箱 Iframe 跨站脚本攻击XSS 攻击者通过在目标网站上注入恶意脚本,使之在…

OpenHarmony驱动框架HDF中设备管理服务构建过程详解

前言 如下图,开源鸿蒙系统驱动框架HDF在内核中的实现,可以分为向用户层提供设备服务的管理模块(Manager),和实际管理硬件的Host模块。 Manager分为DeviceManageService和 DeviceServiceManage,前者负责提供…

1.WEB渗透测试-前置基础知识-ip地址

ip地址: ip地址指的是互联网协议地址,是IP协议提供的一种统一的地址格式,以每一台联网的主机都有一个对应的ip地址,ip地址也可以理解为分配给用户上网使用的网际协议的设备的数字标签。通俗的来说就是你打电话时候的每个人都有自己…

AIGC 实战:如何使用 Docker 在 Ollama 上离线运行大模型(LLM)

Ollama简介 Ollama 是一个开源平台,用于管理和运行各种大型语言模型 (LLM),例如 Llama 2、Mistral 和 Tinyllama。它提供命令行界面 (CLI) 用于安装、模型管理和交互。您可以使用 Ollama 根据您的需求下载、加载和运行不同的 LLM 模型。 Docker简介 D…

在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境,搭建过程中遇到了一些问题,在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法:brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB(不使用Homebr…

备战蓝桥杯 Day11(滚动数组优化+完全背包)

01背包的滚动数组优化 【题目描述】 经典0—1背包问题,有n个物品,编号为i的物品的重量为w[i],价值为c[i],现在要从这些物品中选一些物品装到一个容量为m的背包中,使得背包内物体在总重量不超过m的前提下价值尽量大。 #include&…

python_数据分析_numpy库

一、创建ndarray *ndarray是NumPy中表示数组的重要类型 1、使用np.array()创建 *参数列表:[1,2,3,4] 注:(1)、numpy默认ndarray的所有元素的类型是相同的 ​ (2)、如果传入的数据类型不同,会被按照优先级强制转换为同一类型,其…

vue--两种定时任务cron表达式组件比较选择

背景&#xff1a; 使用vue页面中cron表达式的组件&#xff0c;实现定时任务参数配置。 方案1 vue-cron 安装插件 npm install vue-cron --save 全局引入&#xff0c;修改main.js import Vue from vue import VueCron from vue-cron Vue.use(VueCron);页面配置 html<el-…

Java入门-可重入锁

可重入锁 什么是可重入锁? 当线程获取某个锁后&#xff0c;还可以继续获取它&#xff0c;可以递归调用&#xff0c;而不会发生死锁&#xff1b; 可重入锁案例 程序可重入加锁 A.class,没有发生死锁。 sychronized锁 package com.wnhz.lock.reentrant;public class Sychroniz…

多普勒变化率的应用 与 FPGA

1.多普勒变化率是一个描述波源和观察者相对速度变化的物理量&#xff0c;它与加速度有关。 多普勒效应是指当波源和观察者之间存在相对运动时&#xff0c;观察者接收到的波频率与波源发射的频率之间的差异。这种现象在声波、电磁波等多种波动中都会出现。多普勒变化率通常用来…

linux系统内核升级

1.查看旧版本内核 2.导入密钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 3.安装yum源 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm4.启用elrepo-kernel仓库并安装最新内核版本 yum --enablerepoelrepo-kernel install …

一文弄明白KeyedProcessFunction函数

引言 KeyedProcessFunction是Flink用于处理KeyedStream的数据集合&#xff0c;它比ProcessFunction拥有更多特性&#xff0c;例如状态处理和定时器功能等。接下来就一起来了解下这个函数吧 正文 了解一个函数怎么用最权威的地方就是 官方文档 以及注解&#xff0c;KeyedProc…

c++实现栈和队列类

c实现栈和队列类 栈(Stack)Stack示意图Stack.cpp 队列(queue)queue 示意图queue.cpp 栈(Stack) Stack示意图 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 参数一 &#xff1a;…

【OCR专题文章】

目录 一、数据获取及预处理方法篇 二、两阶段算法篇(检测识别) 三、一阶段算法篇(Enc-Dec) 四、拓新篇 本栏聚焦在OCR的相关算法&#xff0c;专栏内文章的代码均已实现。 一、数据获取及预处理方法篇 【数据获取】 合同数据获取&#xff1a;【OCR】【专题系列】二、数据获取-…

解决windows无法访问wsl下docker服务

笔者在初学使用wsl跑docker时,遇到了windows无法访问的问题,并且浏览了大部分的文章,发现并没有起效,在反复试错终于成功之后,总结为以下几点: 1.升级至wsl2 2.将.wslconfig文件(用户文件夹下)中的如下镜像服务关闭删除 networkingModemirrored 3.打开wsl防火墙相应的端口 …

记录解决uniapp使用uview-plus在vue3+vite+ts项目中打包后样式不能显示问题

一、背景 从 vue2uview1 升级到 vue3vitetsuview-plus ,uview组件样式打包后不显示&#xff0c;升级前uview 组件是可以正常显示&#xff0c;升级后本地运行是可以正常显示&#xff0c;但是打包发布成H5后uview的组件无法正常显示&#xff0c;其他uniapp自己的组件可以正常显示…

Vue 中 onclick和@click区别

文章目录 一、直接上结论二、验证代码&#xff0c;可直接运行三、点击结果 一、直接上结论 onclick 只能触发 js的原生方法&#xff0c;不能触发vue的封装方法click 只能触发vue的封装方法&#xff0c;不能触发js的原生方法 二、验证代码&#xff0c;可直接运行 <!DOCTYP…