pytest教程-12-fixture作用域

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

上一小节我们学习了pytest fixture的基本使用方法,本小节我们讲解一下fixture的作用域。

fixture前后置区分

控制fixture的前置和后置操作是通过yield关键字进行来区分的,代码在yield前面的属于前置操作,代码在yield后面的属于后置操作。并且fixture也没有强烈的要求必须要前后置同时存在,可以只存在前置也可以只存在后置。fixture如果有后置内容,无论遇到什么问题,都会进行执行后置的代码。

from selenium import webdriver
@pytest.fixture()
def open_browser_init():# 前置chrome浏览器webdriver初始化driver = webdriver.Chrome()driver.get("https://www.baidu.com")yield driver# 后置 chrome浏览器webdriver关闭driver.quit()

fixture作用域

Unittest框架中setup的作用是每条测试用例执行之前都会执行一次,setupclass的作用是每个测试用例类执行之前都会执行一次。

pytest的fixture同样有这样的作用域,且使用更广泛更灵活。

关键代码:@pytest.fixture(scope='作用范围'),参数如下:

  • function:默认作用域,每个测试用例都运行一次
  • class:每个测试类只执行一次
  • module:每个模块只执行一次(模块:一个.py文件)
  • package:每个python包只执行一次
  • session:整个会话只执行一次,即运行项目时整个过程只执行一次

fixture后面的括号不加任何参数,就代表默认作用域,与function作用一样。

1、function级别范围

每个测试用例之前运行一次

import pytest@pytest.fixture()
def test_fixture():a = "hello"print("每个测试用例之前运行一次")yield a
def test_01(test_fixture):print("这是test_01")assert "e" in test_fixture
def test_02(test_fixture):print("这是test_02")assert "h" in test_fixture

运行结果为:

============================= test session starts ==============================
collecting ... collected 2 itemstest_demo.py::test_01 每个测试用例之前运行一次
PASSED                                             [ 50%]这是test_01test_demo.py::test_02 每个测试用例之前运行一次
PASSED                                             [100%]这是test_02============================== 2 passed in 0.01s ===============================

2、class级别范围

如果一个class里面有多个用例,都调用了此fixture,那么fixture只在此class里所有用例开始前执行一次。
 

import pytest@pytest.fixture(scope="class")
def test_fixture():a = "hello"print("每个类之前运行一次")yield a@pytest.mark.usefixtures("test_fixture")
class TestDemo:def test_demo01(self, test_fixture):assert "9" in test_fixturedef test_demo02(self, test_fixture):assert "o" in test_fixture

运行结果:

============================= test session starts ==============================
collecting ... collected 2 itemstest_demo.py::TestDemo::test_demo01 每个类之前运行一次
FAILED                               [ 50%]
test_demo.py:20 (TestDemo.test_demo01)
'9' != 'hello'Expected :'hello'
Actual   :'9'
<Click to see difference>self = <test_demo.TestDemo object at 0x10e0a60a0>, test_fixture = 'hello'def test_demo01(self, test_fixture):
>       assert "9" in test_fixture
E       AssertionError: assert '9' in 'hello'test_demo.py:22: AssertionErrortest_demo.py::TestDemo::test_demo02 PASSED                               [100%]========================= 1 failed, 1 passed in 0.04s ==========================

3、module级别范围
在当前.py脚本里面所有用例开始前只执行一次。

import pytest
@pytest.fixture(scope="module")
def test_fixture():a = "hello"print("在当前文件下执行一次")yield a
def test_01(test_fixture):print("这是test_01")assert "e" in test_fixture
@pytest.mark.usefixtures("test_fixture")
class TestDemo:def test_demo01(self,test_fixture):print("这是test_demo01")assert "h" in test_fixturedef test_demo02(self,test_fixture):print("这是test_demo02")assert "o" in test_fixture

运行结果:

============================= test session starts ==============================
collecting ... collected 3 itemstest_demo.py::test_01 在当前文件下执行一次
PASSED                                             [ 33%]这是test_01test_demo.py::TestDemo::test_demo01 
test_demo.py::TestDemo::test_demo02 ============================== 3 passed in 0.01s ===============================

4、session级别范围

session级别是可以跨模块调用的,多个模块下的用例只需调用一次fixture,那就可以设置为scope="session",并且写到conftest.py文件里。

conftest.py作用域:放到项目的根目录下就可以全局调用了,如果放到某个package下,那就在改package内有效。

conftest.py的fixture调用方式,无需导入,直接使用。

文件目录

conftest.py

import pytest@pytest.fixture(scope="session")
def test_fixture():a = "hello"print("这是session范围的作用域,多个文件共享")yield a

test_demo1.py

import pytestdef test_01(test_fixture):print("这是test_01")assert "e" in test_fixturedef test_02(test_fixture):print("这是test_02")assert "h" in test_fixture

test_demo2.py

import pytestdef test_01(test_fixture):print("这是test_01")assert "e" in test_fixture@pytest.mark.usefixtures("test_fixture")
class TestDemo:def test_demo01(self, test_fixture):print("这是test_demo01")assert "h" in test_fixturedef test_demo02(self, test_fixture):print("这是test_demo02")assert "o" in test_fixture

运行结果:

============================= test session starts ==============================
collecting ... collected 5 itemstest_demo1.py::test_01 这是session范围的作用域,多个文件共享
PASSED                                            [ 20%]这是test_01test_demo1.py::test_02 PASSED                                            [ 40%]这是test_02test_demo2.py::test_01 PASSED                                            [ 60%]这是test_01test_demo2.py::TestDemo::test_demo01 PASSED                              [ 80%]这是test_demo01test_demo2.py::TestDemo::test_demo02 PASSED                              [100%]这是test_demo02============================== 5 passed in 0.01s ===============================

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

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

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

相关文章

构建React TodoList应用:管理你的任务清单

构建React TodoList应用&#xff1a;管理你的任务清单 在日常生活和工作中&#xff0c;任务管理是一项至关重要的任务。为了更好地组织和管理我们的工作和生活&#xff0c;我们需要一个高效而简单的任务管理工具。本文将介绍如何使用React框架构建一个功能丰富的TodoList应用&…

如何保证档案室符合建设标准要求

保证档案室符合建设标准要求需要考虑以下几个方面&#xff1a; 1. 总体规划&#xff1a;合理规划档案室的布局和大小&#xff0c;确保能够满足现有和未来的档案存储需求。考虑档案室的空间利用率、通风、照明、安全出口等因素。 2. 档案室环境&#xff1a;档案室的环境应具备稳…

【Android 高德地图POI定位地址搜索】

先上演示&#xff1a; 高德地图的key申请这里就不讲了&#xff0c;比较简单&#xff0c;网上有很多资料&#xff0c;或者前往官网查看&#xff1a;官方文档 依赖引入 项目使用了如下依赖&#xff1a; //高德地图implementation com.amap.api:3dmap:latest.integration//地图…

第六十八天 APP攻防-XposedFridaHook证书校验反代理代理转发

第68天 APP攻防-Xposed&Frida&Hook&证书校验&反代理&代理转发 知识点&#xff1a; 1、APP防代理绕过-应用&转发 2、APP证书校验类型-单向&双向 3、APP证书校验绕过-Frida&XP框架等 章节点&#xff1a; 1、信息收集-应用&资产提取&权…

Elasticsearch 别名(Aliases)的作用

Elasticsearch 8.4.3 别名&#xff08;Aliases&#xff09; 一. 介绍二. 别名的优势三. 别名的基本操作3.1 创建别名3.2 查询别名关联的索引3.3 删除别名3.4 更新别名3.5 通过别名查询数据 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接…

【Redis学习笔记03】Java客户端

1. 初识Jedis Jedis的官网地址&#xff1a;https://github.com/redis/jedis 1.1 快速入门 使用步骤&#xff1a; 注意&#xff1a;如果是云服务器用户使用redis需要先配置防火墙&#xff01; 引入maven依赖 <dependencies><!-- 引入Jedis依赖 --><dependency&g…

【Crypto | CTF】BugKu 简单的RSA

天命&#xff1a;这题也不算简单了&#xff0c;要反编译&#xff0c;要灵活一点 首先收到pyc文件&#xff0c;拿去反编译出来&#xff0c;可以用在线反编译&#xff0c;也可以用工具反编译 在线&#xff1a;python反编译 - 在线工具 工具&#xff1a;https://download.csdn.n…

[设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

消息中间件相关介绍

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&am…

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据&#xff0c;包括地标&#xff08;Landmark&#xff09;、特征点&#xff08;Feature Point&#xff09;、平面&#xff08;Plane&#xff09;等&#xff0c;以及使用者的操作信息&#xff0c;如使用者添加的 ARAnchor …

数据采集设备:安装过程的要点与注意事项

在当今的数据驱动世界&#xff0c;数据采集设备在各行各业中发挥着至关重要的作用。从工业生产到环境监测&#xff0c;再到医疗诊断&#xff0c;数据采集设备为我们提供了大量有价值的信息。然而&#xff0c;要想充分发挥这些设备的潜力&#xff0c;首先需要确保它们被正确地安…

黑马程序员——接口测试——day03

目录&#xff1a; Potman断言 Postman断言简介Postman常用断言 断言响应状态码断言包含某字符串断言JSON数据Postman断言工作原理Postman关联 简介实现步骤核心代码创建环境案例1案例2Postman参数化 简介数据文件简介编写数据文件 CSV文件JSON文件导入数据文件到postman读取数…

啊丢的刷题记录手册(洛谷题单排序篇)

1.洛谷题P1923 求第k小的数 题目描述 输入 n&#xff08;1≤n<5000000 且 n 为奇数&#xff09;个数字ai​&#xff08;1≤ai​<109&#xff09;&#xff0c;输出这些数字的第 k 小的数。最小的数是第 0 小。 请尽量不要使用 nth_element 来写本题&#xff0c;因为本题…

换档控制支架的尺寸优化

前言 本示例使用优化模块&#xff0c;通过在保持原始重量的同时改变壳体厚度&#xff0c;使冲压钣金支架中的应变能之和最小化&#xff08;使刚度最大化&#xff09;。 本页讨论 前言应用描述Abaqus建模方法和仿真技术文件参考 应用描述 本示例说明了汽车变速箱连杆中使用的…

亿道丨三防平板pad丨三防平板是指哪三防丨三防工业级平板电脑

三防工业级平板电脑成为许多行业中的重要工具。本文将介绍三防工业级平板电脑的特点以及其在各个领域中的广泛应用。 三防工业级平板电脑的特点 三防工业级平板电脑是指具备防水、防尘和防震功能的平板电脑。这些特点使得它们能够在恶劣环境中工作&#xff0c;如沙尘飞扬的工地…

sockaddr结构体、sockaddr_in结构体和gethostbyname函数

sockaddr结构体 sockaddr结构体是在网络编程中经常使用的一个数据结构&#xff0c;用来表示套接字地址。它是一个通用的地址结构&#xff0c;可以用于不同的协议&#xff08;如IPv4、IPv6、UNIX等&#xff09;。 在C语言中&#xff0c;sockaddr结构体定义如下&#xff1a; s…

交换两个整数

交换两个整数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 写⼀个函数Swap&#xff0c;可以交换两个整数的内容。注意必须实现成函数完成。 输入2个整数&#xff0c;调用自定义函数Swap&#xff0c;完成2个整数的…

【HarmonyOS】鸿蒙开发之Stage模型-基本概念——第4.1章

Stage模型-基本概念 名词解释 AbilityStage:应用组件的“舞台“ UIAbility:包含UI界面的应用组件&#xff0c;是系统调度的基本单元 WindowStage:组件内窗口的“舞台“ Window&#xff1a;用来绘制UI页面的窗口 HAP:Harmony Ability Package(鸿蒙能力类型的包) HSP:Harmony Sh…

C++17之折叠表达式

相关文章系列 深入理解可变参数(va_list、std::initializer_list和可变参数模版) 目录 1.介绍 2.应用 2.1.使用折叠表达式 2.2.支持的运算符 2.3.使用折叠处理类型 3.总结 1.介绍 折叠表达式是C17新引进的语法特性。使用折叠表达式可以简化对C11中引入的参数包的处理&…

合泰杯开发板HT66F2390入门教程(点亮LED灯)——获得成就:点灯大师

前言 前不久报名了合泰杯竞赛项目&#xff0c;然后手上也是有一个HT66F2390的开发板&#xff0c;我就打算先从点灯开始&#xff0c;学习一个新的芯片第一步都是先成为点灯大师。 一开始&#xff0c;我在网上搜寻了许多的代码示例&#xff0c;希望能够顺利实现LED的控制。然而&…