美文网首页
pytest测试框架(二)

pytest测试框架(二)

作者: 在下YM | 来源:发表于2022-02-21 14:50 被阅读0次

    setup和teardown函数

    • pytest中有分别针对模块、类、函数的setup和teardown,分别在执行模块、类、函数之前和之后运行
    • pytest提供的这些方法名称都是固定的

    函数级别

    • setup_function()和teardown_function()函数定义在类外,会对test开头的非类方法生效

    • 作用域单个测试用例,每次在单个用例执行前后都执行

    import pytest
    
    def setup_function():
        print("setup_function(): 每个方法之前执行")
    
    
    def teardown_function():
        print("teardown_function(): 每个方法之后执行")
    
    
    def test_01():
        print("正在执行test1")
    
    
    def test_02():
        print("正在执行test2")
    
    class TestClass(object):
        def test_03(self):
            print("正在执行 类方法 test3")
    
    
    def normal_func():
        print("正在执行normal_func")
    

    运行结果如下:

    plugins: tavern-1.16.3, openfiles-0.3.2, arraydiff-0.3, allure-pytest-2.9.45, doctestplus-0.3.0, remotedata-0.3.1
    collected 3 items                                                                                                                                         
    
    pytest_code2.py setup_function(): 每个方法之前执行
    正在执行test1
    .teardown_function(): 每个方法之后执行
    setup_function(): 每个方法之前执行
    正在执行test2
    .teardown_function(): 每个方法之后执行
    正在执行 类方法 test3
    .
    
    ==================================================================== 3 passed in 0.03s ====================================================================
    

    类级别

    • 必须在类中定义,只作用于本类

    • setup_class 和 teardown_class 会在在类执行前后执行一次

    • setup_method 和 teardown_method 会在每个测试方法前后执行一次

    import pytest
    
    
    class TestMethod(object):
        @classmethod
        def setup_class(cls):
            print("setup_class(self):每个类之前执行一次")
    
        @classmethod
        def teardown_class(cls):
            print("teardown_class(self):每个类之后执行一次")
    
        def setup_method(self):
            print("setup_method(self):在每个方法之前执行")
    
        def teardown_method(self):
            print("teardown_method(self):在每个方法之后执行\n")
    
        def test_01(self):
            print("正在执行test1")
    
    
        def test_02(self):
            print("正在执行test2")
    
        def normal_func(self):
            print("正在执行normal_func")
    

    运行结果如下:

    plugins: tavern-1.16.3, openfiles-0.3.2, arraydiff-0.3, allure-pytest-2.9.45, doctestplus-0.3.0, remotedata-0.3.1
    collected 2 items                                                                                                                                         
    
    pytest_code3.py setup_class(self):每个类之前执行一次
    setup_method(self):在每个方法之前执行
    正在执行test1
    .teardown_method(self):在每个方法之后执行
    
    setup_method(self):在每个方法之前执行
    正在执行test2
    .teardown_method(self):在每个方法之后执行
    
    teardown_class(self):每个类之后执行一次
    
    
    ==================================================================== 2 passed in 0.03s ====================================================================
    

    模块级别

    • 定义在类外,作用域本模块

    • setup_module 和 teardown_module 会模块内只执行一次,和函数级别,类级别不冲突

    import pytest
    
    def setup_module():
        print("setup_module():在模块最之前执行")
    
    
    def teardown_module():
        print("teardown_module:在模块之后执行")
    
    
    def setup_function():
        print("setup_function():每个方法之前执行")
    
    
    def teardown_function():
        print("teardown_function():每个方法之后执行")
    
    def test_outside_1():
        print('正在执行test_outside_1')
    
    def test_outside_2():
        print('正在执行test_outside_2')
    
    class TestMethod(object):
        @classmethod
        def setup_class(cls):
            print("setup_class(self):每个类之前执行一次")
    
        @classmethod
        def teardown_class(cls):
            print("teardown_class(self):每个类之后执行一次")
    
        def setup_method(self):
            print("setup_method(self):在每个方法之前执行")
    
        def teardown_method(self):
            print("teardown_method(self):在每个方法之后执行\n")
    
        def test_01(self):
            print("正在执行test1")
    
        def test_02(self):
            print("正在执行test2")
    
        def normal_func(self):
            print("正在执行normal_func")
    

    运行结果如下:

    plugins: tavern-1.16.3, openfiles-0.3.2, arraydiff-0.3, allure-pytest-2.9.45, doctestplus-0.3.0, remotedata-0.3.1
    collected 4 items                                                                                                                                         
    
    pytest_code4.py setup_module():在模块最之前执行
    setup_function():每个方法之前执行
    正在执行test_outside_1
    .teardown_function():每个方法之后执行
    setup_function():每个方法之前执行
    正在执行test_outside_2
    .teardown_function():每个方法之后执行
    setup_class(self):每个类之前执行一次
    setup_method(self):在每个方法之前执行
    正在执行test1
    .teardown_method(self):在每个方法之后执行
    
    setup_method(self):在每个方法之前执行
    正在执行test2
    .teardown_method(self):在每个方法之后执行
    
    teardown_class(self):每个类之后执行一次
    teardown_module:在模块之后执行
    
    
    ==================================================================== 4 passed in 0.03s ====================================================================
    

    小结

    • 若用例没被执行或失败,则不会执行teardown
    • 对非test开头的函数不生效
    • setup_module()
      --- 在当前模块运行之前执行,必须定义在类外
    • teardown_module()
      --- 在当前模块运行的最后执行,必须定义在类外
    • setup_class(self)
      --- 所有类方法运行之前执行一次,必须在类中定义,只作用于本类
    • teardown_class(self)
      --- 所有类方法运行之后执行一次,必须在类中定义,只作用于本类
    • setup_method(self)
      --- 在每个类方法运行之前执行,必须定义在类中,只作用于本类
    • teardown_method(self)
      --- 在每个类方法运行之后执行,必须定义在类中,只作用于本类
    • setup_function()
      --- 会在每个方法之前执行,对类方法不生效,对非test开头的函数不生效,必须定义在类外
    • teardown_function()
      --- 会在每个方法之后执行,对类方法不生效,对非test开头的函数不生效,必须定义在类外

    相关文章

      网友评论

          本文标题:pytest测试框架(二)

          本文链接:https://www.haomeiwen.com/subject/vbcilrtx.html