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.hqwc.cn/news/493203.html

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

相关文章

编曲学习:高叠和弦 挂留和弦 和弦实战应用

高叠和弦 挂留和弦 和弦实战应用小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65d4826fe4b04c10a1310517?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 七和弦 以三和弦举例,三和弦上面叠一个三度的音,就变成了七和弦。 从下到…

halcon中的2D测量-椭圆

一、定义 二维测量指的是测量二维几何图形的参数&#xff0c;例如圆、椭圆、圆弧、矩形的相关参数。这里的参数对圆来说可以是半径&#xff1b;椭圆可以是长半轴、短半轴&#xff1b;矩形则包括宽和高。 二、基本步骤 1.创建测量模型 使用算子 create_metrology_model 2.设…

leetcode hot100 买卖股票的最佳时机二

注意&#xff0c;本题是针对股票可以进行多次交易&#xff0c;但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义&#xff1a; dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

SOLIDWORKS 查找并修复装配体配合错误

我们在SOLIDWORKS 正版软件进行装配体装配时&#xff0c;时常会出现一些报错&#xff0c;例如在配合、装配体特征或被装配体参考引用的零部件和子装配体中。一些常见的错误&#xff0c;如一个零部件的过定义会引发更多其他错误信息&#xff0c;并导致装配体停止解析配合关系。下…

背包问题(介绍+例题+代码+注解)

目录 介绍&#xff1a; 一、01背包 题目描述 输入描述: 输出描述: 代码&#xff1a; 二、完全背包 题目描述 输入描述: 输出描述: 代码&#xff1a; 三、多重背包 题目描述 输入描述: 输出描述: 代码&#xff1a; 四、背包问题 题目描述 输入描述: 输出描…

27.HarmonyOS App(JAVA)可复用列表项的ListContainer

可复用列表项的ListContainer 简短的列表可以通过定向布局实现,但是如果列表项非常多,则使用定向布局就不再合适。如需要创建50个列表项的列表,那么用定向布局实现至少需要创建50个以上的组件了。然而,限于设备屏幕大小的限制,绝大多数组件不会显示在屏幕上,却会占据大量的内存…

基础光学系列:(二)光学元件在机器视觉中的关键作用

光学元件&#xff0c;包括透镜、反射镜和棱镜&#xff0c;在机器视觉领域扮演着至关重要的角色。它们不仅是实现高精度图像捕获的基础&#xff0c;也是提升机器视觉系统性能的关键。通过深入了解这些光学元件的功能和应用&#xff0c;我们能够更好地掌握机器视觉技术的精髓。 …

算法-计算机基础知识

1&#xff0c;坐标系与数学不同&#xff0c;x轴向下&#xff0c;y轴向右 2.案例&#xff1a;螺旋矩阵 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution {public List<Integer> spiralOrder(int[][] matrix) { List<Integer&…

Linux使用Docker部署Nacos容器并结合内网穿透实现公网访问本地服务

文章目录 推荐1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff…

互联设备-中继器-路由器等

网卡的主要作用 1 在发送方 把从计算机系统要发送的数据转换成能在网线上传输的bit 流 。 2 在接收方 把从网线上接收来的 bit 流重组成计算机系统可以 处理的数据 。 3 判断数据是否是发给自己的 4 发送和控制计算机系统和网线数据流 计算机的分类 1、台式机 2、小型机和服…

【网站项目】437物流管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

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

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