pytest框架之模块的基础函数应用:setup_module,teardown_module,setup_function,teardown_function

本文详细介绍了unittest框架的setup_class和teardown_class以及setup和teardown函数,并对比了pytest中相应功能的实现。在pytest中,setup_module和teardown_module分别在模块执行前后执行一次,而setup_function和teardown_function则在模块内每个用例前后执行。此外,setup_class和teardown_class在类级别上,确保所有用例执行前和执行后各执行一次。同时,类内的setup和teardown仅对类内的用例生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unittest框架拥有setup_class和teardown_class

        setup_class类的所有用例执行前执行一次!
        teardown_class类的所有用例执行后执行一次!

以及setup和teardown函数
        setup:每条用例执行前执行一次!

        teardown:每条用例执行后执行一次!

那在pytest中怎么去实现每条用例执行前和执行后执行一次?以及所有用例执行前和执行后执行一次?

        1.pytest中有模块级别每条用例执行前和执行后执行一次和所有用例执行前和执行后执行一次
        2.
pytest中有类级别每条用例执行前和执行后执行一次和所有用例执行前和执行后执行一次

先看模块级别的

        setup_module:#整个模块运行前会执行一次,包括运行完类
        teardown_module:#整个模块运行后会执行一次,包括运行完类

               

import pytest


'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
    print("这个是模块级别的setup_module")

'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
    print("这个是模块级别的teardown_module")
    
def test_01():
    print("我是test_02得test_01得用例")

class test_demo():
    def test_01(self):
        print("我是test_02得类得用例!")
C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================


collecting ... collected 2 items

Testcase01/test03.py::test_01 这个是模块级别的setup_module
我是test_02得test_01得用例
PASSED
Testcase01/test03.py::test_demo::test_01 我是test_02得类得用例!
PASSED这个是模块级别的teardown_module


============================== 2 passed in 0.02s ==============================

Process finished with exit code 0

上图结果中,setup_moduleteardown_module是作用在模块的testcase开始前和class的testcase结束后

模块级别的setup_function和teardown_function

         setup_function:#模块中每条用例执行前执行一次,不会作用于class中的test_case

         teardown_function:#模块中每条用例执行后执行一次,不会作用于class中的test_case
 

import pytest


'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
    print("这个是模块级别的setup_module")

'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
    print("这个是模块级别的teardown_module")

'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
    print("模块中每条用例执行前执行一次!")

'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
    print("模块中每条用例执行后执行一次!")

def test_01():
    print("我是test_02得test_01得用例")

class test_demo():
    def test_01(self):
        print("我是test_02得类得用例!")

运行的结果:从下方法可以看出setup_function和teardown_function作用在模块的方法上,不会作用在类中的testcase

C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================


Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!

Testcase01/test03.py::test_demo::test_01 我是test_02得类得用例!
PASSED这个是模块级别的teardown_module


============================== 2 passed in 0.02s ==============================

看class级别的

setup_class:所有用例执行前执行一次
teardown_class:所有用例执行后执行一次!
import pytest


'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
    print("这个是模块级别的setup_module")

'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
    print("这个是模块级别的teardown_module")

'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
    print("模块中每条用例执行前执行一次!")

'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
    print("模块中每条用例执行后执行一次!")

def test_01():
    print("我是test_02得test_01得用例")

class test_demo():
    
    def setup_class(self):
        print("Test_demo中所有用例执行前执行一次!")

    def teardown_class(self):
        print("Test_demo中所有用例执行后执行一次!")
    
    def test_01(self):
        print("我是test_02得类得用例!")

运行结果:

以下结果看setup_class和teardown_class的效果只作用于class,所有用例执行前执行一次,
所有用例执行后执行一次!

C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================


Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!

Testcase01/test03.py::test_demo::test_01 Test_demo中所有用例执行前执行一次!
我是test_02得类得用例!
PASSEDTest_demo中所有用例执行后执行一次!
这个是模块级别的teardown_module


============================== 2 passed in 0.03s ==============================

Process finished with exit code 0

class级别的setup和teardown
       

import pytest


'''
#整个模块运行前会执行一次,包括运行完类
'''
def setup_module():
    print("这个是模块级别的setup_module")

'''
#整个模块运行后会执行一次,包括运行完类
'''
def teardown_module():
    print("这个是模块级别的teardown_module")

'''
#模块中每条用例执行前执行一次,不会作用于class中的test_case
'''
def setup_function():
    print("模块中每条用例执行前执行一次!")

'''
#模块中每条用例执行后执行一次,不会作用于class中的test_case
'''
def teardown_function():
    print("模块中每条用例执行后执行一次!")

def test_01():
    print("我是test_02得test_01得用例")

class test_demo():

    def setup_class(self):
        print("Test_demo中所有用例执行前执行一次!")

    def teardown_class(self):
        print("Test_demo中所有用例执行后执行一次!")

    def setup(self):
        print("这是一个setup")

    def teardown(self):
        print("这是一个teardown")
    def test_01(self):
        print("我是test_02得类得用例!")

       运行结果:
                可以看出setup和teardown只作用于class

C:\Python39\python.exe F:/pytestObject/main.py
============================= test session starts =============================


Testcase01/test03.py::test_01 这个是模块级别的setup_module
模块中每条用例执行前执行一次!
我是test_02得test_01得用例
PASSED模块中每条用例执行后执行一次!

Testcase01/test03.py::test_demo::test_01 Test_demo中所有用例执行前执行一次!
这是一个setup
我是test_02得类得用例!
PASSED这是一个teardown
Test_demo中所有用例执行后执行一次!
这个是模块级别的teardown_module


============================== 2 passed in 0.01s ==============================

Process finished with exit code 0

pytest中,setupsetup_class、setup_functionsetup_module都是用来在测试执行前进行前置操作的方法。它们的区别如下: 1. setup_module: 这是在整个模块的测试用例开始执行之前调用的方法。它只会执行一次,用来设置整个模块的前置条件。 2. setup_class: 这是在每个测试类的测试用例开始执行之前调用的方法。它会在每个测试类的所有测试用例执行前执行,用来设置测试类的前置条件。 3. setup_function: 这是在每个测试函数的测试用例开始执行之前调用的方法。它会在每个测试函数的所有测试用例执行前执行,用来设置测试函数的前置条件。 4. setup: 这是在每个测试方法的测试用例开始执行之前调用的方法。它会在每个测试方法的所有测试用例执行前执行,用来设置测试方法的前置条件。 总结起来,setup_module是整个模块级别的前置方法,setup_class是测试类级别的前置方法,setup_function是测试函数级别的前置方法,setup是测试方法级别的前置方法。它们的执行顺序是setup_module > setup_class > setup_function > setup。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pytestsetupteardown简单用法](https://blog.youkuaiyun.com/qishuzdh/article/details/124806957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytest框架模块基础函数应用:setup_module,teardown_module,setup_function,teardown_function](https://blog.youkuaiyun.com/qq_42870572/article/details/128006142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值