3. Pytest前置和后置运行级别

一、前言

顾名思义,前置,就是在测试用例执行前执行的动作;后置,是测试用例执行后执行的动作。前置和后置一般写一些准备操作,数据准备等等,来确保测试用例的正常执行。

二、学习目标

1.类内外执行:setup/teardown

2.类外执行:setup_module/teardown_modulesetup_function/teardown_function

3.类内执行:setup_class/teardown_classsetup_method/teardown_method

三、知识点

1.【类内外执行:setup/teardown(推荐)

此前置和后置是不区分测试用例是在类中还是不在类中,两种都能用。

我们用print()打印来验证前置和后置的执行顺序。

  • 语法说明:

    setup/teardown:无论是类内还是类外,每个方法都会执行1次。
    setup: 方法运行前执行
    teardown:方法运行完才执行
    
  • 代码示例:

    # -*- coding:utf-8 -*-
    import pytest
    
    def setup():
        '''每个用例开始前执行'''
        print("-----setup自动化测试开始-----")
    def teardown():
        '''每个用例结束后执行'''
        print("-----teardown自动化测试结束-----")
    
    def test_case_01():
        num = 1 + 1
        print("打印计算结果:{}".format(num))
        assert num == 2
    def test_case_02():
        num = 1 + 2
        print("打印计算结果:{}".format(num))
        assert num == 3
    
  • 执行效果:

    test_pytest_demo1.py::test_case_01 -----setup自动化测试开始-----
    PASSED                                [ 50%]打印计算结果:2
    -----teardown自动化测试结束-----
    
    test_pytest_demo1.py::test_case_02 -----setup自动化测试开始-----
    PASSED                                [100%]打印计算结果:3
    -----teardown自动化测试结束-----
    
    ============================== 2 passed in 0.02s ==============================
    
    

    说明:从运行结果可以看出,setup在每一个测试用例执行前执行,teardown在每一个测试用例执行后执行。setup和teardown即可以在类中应用,也可以不在类中应用。这也是在项目中常用的前置和后置。

2.【类外执行:setup_module/teardown_modulesetup_function/teardown_function

此前置和后置只能作用于不在类中的测试用例函数。

  • 语法说明:

    setup_module/teardown_module:
    	只有前置后置方法在class外部时,才会被执行。整个.py文件只执行1次。
    	setup_module: 在.py文件执行前执行。
    	teardown_module:在.py文件执行后执行。
    
    setup_function/teardown_function:
    	只有类外部的方法才会执行。每个方法执行一次。
    	setup_function: 类外部的方法前执行。
    	teardown_function: 类外部的方法后执行。
    
  • 代码示例:

    import pytest
    
    def setup_function():
        '''每个用例开始前执行'''
        print("-----setup_function自动化测试开始-----")
    def teardown_function():
        '''每个用例结束后执行'''
        print("-----teardown_function自动化测试结束-----")
    def setup_module():
        '''整个.py 模块开始前执行'''
        print("-----setup_module自动化测试开始-----")
    def teardown_module():
        '''整个.py 模块结束后执行'''
        print("-----teardown_module自动化测试结束-----")
    def test_case_01():
        num = 1 + 1
        print("打印计算结果:{}".format(num))
        assert num == 2
    def test_case_02():
        num = 1 + 2
        print("打印计算结果:{}".format(num))
        assert num == 3
    
  • 执行效果:

    test_pytest_demo2.py::test_case_01 -----setup_module自动化测试开始-----
    -----setup_function自动化测试开始-----
    PASSED                                [ 50%]打印计算结果:2
    -----teardown_function自动化测试结束-----
    
    test_pytest_demo2.py::test_case_02 -----setup_function自动化测试开始-----
    PASSED                                [100%]打印计算结果:3
    -----teardown_function自动化测试结束-----
    -----teardown_module自动化测试结束-----
    
    ============================== 2 passed in 0.02s ==============================
    
    

    说明:setup_module/teardown_module是模块级的前置和后置,所以在当前py模块只执行了一次。
    setup_function/teardown_function是函数级的前置和后置,所以在每个用例函数分别执行了前置和后置。

3.【类内执行:setup_class/teardown_classsetup_method/teardown_method

此前置和后置只能作用于在类中的测试用例函数。

  • 语法说明:

    setup_class/teardown_class:
    	只有方法在class内部时,才可以执行。class内只运行1次。
    	setup_class:在class类运行前执行。
    	teardown_class:在class类运行后执行。
       
    setup_method/teardown_method:
    	只有方法在class内部时,才可以执行。class内运行多次。
    	setup_method: 每个method前执行一次。
    	teardown_method: 每个method后执行一次。
    
  • 代码示例:

    import pytest
    
    class TestCase():
        def setup_method(self):
            '''每个用例开始前执行'''
            print("-----setup_method自动化测试开始-----")
        def teardown_method(self):
            '''每个用例结束后执行'''
            print("-----teardown_method自动化测试结束-----")
        def setup_class(self):
            '''每个类开始前执行'''
            print("-----setup_class自动化测试开始-----")
        def teardown_class(self):
            '''每个类结束后执行'''
            print("-----teardown_class自动化测试结束-----")
        def test_case_01(self):
            num = 1 + 1
            print("打印计算结果:{}".format(num))
            assert num == 2
        def test_case_02(self):
            num = 1 + 2
            print("打印计算结果:{}".format(num))
            assert num == 3
    
  • 运行效果:

    test_pytest_demo3.py::TestCase::test_case_01 -----setup_class自动化测试开始-----
    -----setup_method自动化测试开始-----
    PASSED                      [ 50%]打印计算结果:2
    -----teardown_method自动化测试结束-----
    
    test_pytest_demo3.py::TestCase::test_case_02 -----setup_method自动化测试开始-----
    PASSED                      [100%]打印计算结果:3
    -----teardown_method自动化测试结束-----
    -----teardown_class自动化测试结束-----
    
    ============================== 2 passed in 0.02s ==============================
    

    说明:setup_class/teardown_class是类级的前置和后置,所以在当前类下只执行了一次。
    setup_method/teardown_method是方法级的前置和后置,所以在每个用例函数分别执行了前置和后置。

posted @ 2023-01-17 10:24  测开星辰  阅读(241)  评论(0编辑  收藏  举报