首页 > 其他分享 >pytest笔记——fixture作用范围

pytest笔记——fixture作用范围

时间:2023-03-16 16:36:21浏览次数:42  
标签:__ py fixture 笔记 pytest test open

一、前言

在使用pytest测试框架的时候,会经常使用到fixture,fixture相对灵活,能更好的实现一些用例场景的前置以及后置的操作,但在使用的过程中也经常遇到各种问题,例如我明明已经声明了一个fixture,但在调用的时候却报错找不到,因此记录一下不同参数下fixture的一些作用范围。

二、fixture参数之scope

fixture(scope="function", params=None, autouse=False, ids=None, name=None):

fixture有五个参数,这里主要讲scope参数,该参数决定了fixture的作用范围

scope有四个值,function、class、module、session,如果没传默认取function

1.scope=“function”,指作用范围为函数

import pytest

@pytest.fixture(scope="function")
def open():
    print("打开浏览器,并跳转百度")

def test_input1(open):
    print("输入关键词1")

def test_input2(open):
    print("输入关键词2")

def test_input3():
    print("输入关键词3")

if __name__ == '__main__':
    pytest.main(["-s", "test_fixture_01.py"])

以上例子,test_input1跟test_input2调用了fixture open,test_input3没调用,所以在运行test_input1跟test_input2前会先运行open,运行test_input3的时候没有运行open。结果如下:

 

 2.scope=“class”,指作用范围为类

import pytest

@pytest.fixture(scope="class")
def open():
    print("打开浏览器,并跳转百度")


class TestCase1():
    def test_input1(self, open):
        print("输入关键词1")

    def test_input2(self, open):
        print("输入关键词2")

class TestCase2(): def test_input3(self): print("输入关键词3") if __name__ == '__main__': pytest.main(["-s", "test_fixture_02.py"])
测试类TestCase1,在运行前调用了open,TestCase2没调用,所以在运行类TestCase1之前会先运行fixture open,在运行
TestCase2的时候不会运行open。但有一点需要注意的是,尽管测试类TestCase1里的两个函数都调用了open,但open只会运行一次,即一个类最多只会调用1次fixture。
运行结果如下:

 

3.scope=“class”,指作用范围为整个.py文件,在当前.py脚本里面所有用例开始前只执行一次

import pytest

@pytest.fixture(scope="module")
def open():
    print("打开浏览器,并跳转百度")


def test_input1(open):
    print("输入关键词1")

def test_input2(open):
    print("输入关键词2")

class TestCase():
    def test_input3(self, open):
        print("输入关键词3")


if __name__ == '__main__':
    pytest.main(["-s", "test_fixture_03.py"])

这里整个.py文件里的函数、类里的函数,都调用了open,但由于scope为module,所以只会运行一次open。运行结果如下:

 

4.scope="session",指可以跨.py文件调用,即可以多个py文件共用同一个fixture,一般为session级别时,需要写在配置文件conftest.py里,现有以下文件

 

# conftest.py

import pytest

@pytest.fixture(scope="session")
def open():
    print("打开浏览器,并跳转百度")
# test_fixture_01

import pytest


def test_input1(open):
    print("输入关键词1")


if __name__ == '__main__':
    pytest.main(["-s", "test_fixture_01.py"])
# test_fixture_02

import pytest


def test_input2(open):
    print("输入关键词2")


if __name__ == '__main__':
    pytest.main(["-s", "test_fixture_02.py"])
# test_fixture_03

import pytest


def test_input3(open):
    print("输入关键词3")


if __name__ == '__main__':
    pytest.main(["-s", "test_fixture_03.py"])

想要同时运行test_fixture_01、test_fixture_02、test_fixture_03这三个文件,需要在控制台运行命令

pytest -s test_fixture_01.py test_fixture_02.py test_fixture_03.py,得到结果如下:

 

 

 三、总结

当scope="function"时,作用范围为函数级别

当scope="class"时,作用范围为类级别,一个类最多调用1次fixture

当scope="module"时,作用范围为一个.py文件,一个.py文件最多调用1次fixture

当scope="session"时,作用范围为多个.py文件,所有.py文件最多调用1次fixture

 

 

 

标签:__,py,fixture,笔记,pytest,test,open
From: https://www.cnblogs.com/chanzjj/p/17219486.html

相关文章

  • 欧拉定理学习笔记
    费马小定理:当$a,p\in\mathbb{Z}$且\(p\)为质数,$a\not\equiv0\pmod{p}$时,有:\[a^{p-1}\equiv1\pmod{p}\]故\(a^b\equiva^{b\mod(p-1)}\pmod{p}\)欧......
  • 20212323严文霞--数据库读书笔记一(P3-P18,P31-P33)
    1.1数据库系统概述1.1.1数据库的4个基本概念数据(data)定义:描述事物的符号记录称为数据。数据有多种表现形式,例如数字、文字、图形、图像、音视频等;数据需要进行解......
  • 笔记本水冷改造记录
    1、前言最近用的电脑风扇总是起飞,打开idea都会像喷气飞机一样,使用时还经常卡顿。查看了一下闲鱼,当年8000多买的笔记本,3年半二手只能出大概3500。笔记本跟了一段时间了,还......
  • QT5笔记: 29. 文本文件读写
    例子:主要讲了QFile、QTextStream进行文本文件读写MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>QT_BEGIN_NAMESPACEnamesp......
  • QT5笔记: 30. 二进制文件读写
    Qt预定义类型文件*.stm标准二进制文件*.dat例子:MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QItemSelectionModel>#include<QMainWin......
  • QT5笔记:27. MDI应用程序设计
    MDI:MultipleDocumentInterface多窗口文档界面例子:MainWindow.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QMdiSubWindow>......
  • pytest断言
    pytest断言1、使用==、!=、<、>、>=、<=2、使用in和notin来测试包含或不包含3、使用true或falseclassTestAssert:deftest_assert(self):......
  • 自主阅读笔记01《如何给详情页做性能优化的》
    笔记来源  公众号--架构师接口优化方案总结1.批处理批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,......
  • QT5笔记: 21. QStandardItemModel
    QStandardItemModel存放数据QItemSelectionModel选择项模型例子:本例子中QListView没有做任何处理,只是拖放至ui文件,设置了布局mainwindow.h#ifndefMAINWINDOW_H#......
  • QT5笔记: 22. 自定义代理
    代理作用:在界面发生编辑时可以指定编辑所用的组件,可以沟通Model和View自定义代理需要继承的基类和需要实现的方法使用步骤:继承QStyledItemDelegate,实现上面的四个......