• Pytest测试用例之setup与teardown方法


    介绍

    unittest里面 [前置/后置setup/teardown ]非常好,用来写一些每个case执行前都需要执行的公用代码 [ 作用:在每次用例开始前和结束后都去执行一次 ]

    例如我们的进入产品前可能都需要打开浏览器登录等,执行完毕后需要关闭浏览器等,这些我们都可以用前置后置初始化环境去实现的,然后这样的前置后置方法有很多

    当然还有更高级一一点的setupClass和teardownClass,需配合@classmethod装饰器起使用,在做selenium自动化的时候,它的效率尤为突显;只用启动-次浏览器就可以将在该代码文件下的所有待执行用例,进行执行完毕。不需要执行每条每次就打开浏览器

    pytest框架也有类似于setup和teardown的语法,并且还不止这四个,下面我们简单看看这些方法的简单介绍

    用例运行级别

    - 模块级(setup_module/teardown_module)开始于横块始末,全局的

    - 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

    - 类级(setup_class/teardown_calss)只在类中前后运行一次(在类中)

    - 方法级(setup_method/teardown_method)开始于方法始末(在类中)

    - 类里面的(setup/teardown)运行在调用方法前后

    ###

    函数级 setup_function/teardown_function

    import pytest
    
    
    # 函数式
    def setup_function():
        print('setup_function:每个用例前都会执行')
    
    
    def teardown_function():
        print('teardown_function:每个用例后都会执行')
    
    
    def test_001():
        print("正在执行第一条用例")
        p = "Python"
        assert "h" in p
    
    
    def test_002():
        print("正在执行第二条用例")
        p = 'Test'
        assert 'T' in p
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_updown_demo1.py'])

    ###

    test_updown_demo1.py::test_001 setup_function:每个用例前都会执行
    PASSED [ 50%]正在执行第一条用例
    teardown_function:每个用例后都会执行
    
    test_updown_demo1.py::test_002 setup_function:每个用例前都会执行
    PASSED [100%]正在执行第二条用例
    teardown_function:每个用例后都会执行

    ###

    模块级 setup_module/teardown_module

    import pytest
     
    # 模块级
    def setup_module():
        print('setup_module:整个.py模块只执行一次')
        print("比如:所有用例开始前只打开一次浏览器")
     
     
     
     
    def teardown_module():
        print('teradown_module:整个.py模块只执行一次')
        print("比如:所有用例结束只最后关闭浏览器")
     
     
     
     
    def test_001():
        print("正在执行第一条用例")
        p = "Python"
        assert "h" in p
     
     
     
     
    def test_002():
        print("正在执行第二条用例")
        p = 'Test'
        assert 'T' in p
     
     
     
     
    if __name__ == '__main__':
        pytest.main(['-s', 'test_fixt.py'])

    ###

    test_updown_demo1.py::test_001 setup_module:整个.py模块只执行一次
    比如:所有用例开始前只打开一次浏览器
    PASSED                                    [ 50%]正在执行第一条用例
    
    test_updown_demo1.py::test_002 PASSED                                    [100%]正在执行第二条用例
    teradown_module:整个.py模块只执行一次
    比如:所有用例结束只最后关闭浏览器

    ###

    类级 setup_class/teardown_calss

    import pytest
    
    
    class Testcaselist():
        print('setup_class:所有用例执行之前')
    
        # 类级
        def setup_class(self):
            print('setup_class:所有用例执行之前')
    
        def teardown_class(self):
            print('teardown_class:所有用例执行结束之后')
    
        # 测试用例
        def test_001(self):
            print("正在执行第一条用例")
            p = "Python"
            assert "h" in p
    
        def test_002(self):
            print("正在执行第二条用例")
            p = 'test'
            assert 't' in p
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_updown_demo1.py'])

    ###

    test_updown_demo1.py::Testcaselist::test_001 setup_class:所有用例执行之前
    PASSED                      [ 50%]正在执行第一条用例
    
    test_updown_demo1.py::Testcaselist::test_002 PASSED                      [100%]正在执行第二条用例
    teardown_class:所有用例执行结束之后

    ###

    方法级 setup_method/teardown_method

    import pytest
    
    
    class Testcaselist():
        # 方法级
    
        def setup_method(self):
            print('setup_method:每个用例开始之前执行')
    
        def teardown_method(self):
            print('teardown_method:每个用例结束后执行')
    
        # 测试用例
        def test_001(self):
            print("正在执行第一条用例")
            p = "Python"
            assert "h" in p
    
        def test_002(self):
            print("正在执行第二条用例")
            p = 'test'
            assert 't' in p
    
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_updown_demo1.py'])

    ####

    test_updown_demo1.py::Testcaselist::test_001 setup_method:每个用例开始之前执行
    PASSED                      [ 50%]正在执行第一条用例
    teardown_method:每个用例结束后执行
    
    test_updown_demo1.py::Testcaselist::test_002 setup_method:每个用例开始之前执行
    PASSED                      [100%]正在执行第二条用例
    teardown_method:每个用例结束后执行

    ####

  • 相关阅读:
    python笔记——调试和异常处理
    [算法学习] 线段树,树状数组,数堆,笛卡尔树
    【cpp】G++中不支持static_cast?
    【生活感想】不够淡定
    数值线性代数小结
    伪逆
    统计机器学习
    Numerical Methods with MATLAB(1)
    吐槽iOS国际化:关于NSLocalizedString的使用
    iOS 沙盒路径操作:新建/删除文件和文件夹
  • 原文地址:https://www.cnblogs.com/andy0816/p/15618052.html
Copyright © 2020-2023  润新知