zoukankan      html  css  js  c++  java
  • python:pytest中的setup和teardown

    原文:https://www.cnblogs.com/peiminer/p/9376352.html 

    之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的固件。

    (1.setup_function、teardown_function 2.setup_class、teardown_class 3.setup_method、teardown_method 4.setup_module、teardown_module)

    setup/teardown和unittest里面的setup/teardown是一样的功能,这里setup_method和teardown_method的功能和setup/teardown功能是一样的,优先级是先执行setup_method,在执行setup。一般二者用其中一个即可就不详细介绍了。setup_class和teardown_class等价于unittest里面的setupClass和teardownClass

    一、函数级的(setup_function、teardown_function)只对函数用例生效,而且不在类中使用

    #!/usr/bin/env/python
    # -*-coding:utf-8-*-
    
    import pytest
    
    """
    只对函数用例生效,不在类中
    setup_function
    teardown_function
    """
    
    
    def setup_function():
        print "setup_function():每个方法之前执行"
    
    
    def teardown_function():
        print "teardown_function():每个方法之后执行"
    
    
    def test_01():
        print "正在执行test1"
        x = "this"
        assert 'h' in x
    
    
    def test_02():
        print "正在执行test2"
        x = "hello"
        assert hasattr(x,"hello")
    
    
    def add(a,b):
        return a+b
    
    
    def test_add():
        print "正在执行test_add()"
        assert add(3,4) == 7
    
    if __name__=="__main__":
        pytest.main(["-s","test_function.py"])


    运行结果为:(-s为了显示用例的打印信息 -q只显示结果不显示过程)
    可以看出执行的结果是:
    setup_function--》 test_01 --》teardown_function
    setup_function--》 test_02 --》teardown_function
    setup_function--》 test_add --》teardown_function

    二、类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次

    #!/usr/bin/env/python
    # -*-coding:utf-8-*-
    
    """
    在类之前和之后执行一次
    setup_class
    teardown_class
    """
    
    import pytest
    
    class TestClass(object):
    
        def setup_class(self):
            print "setup_class(self):每个类之前执行一次"
    
        def teardown_class(self):
            print "teardown_class(self):每个类之后执行一次"
    
        def add(self,a,b):
            print "这是加法运算"
            return a+b
    
        def test_01(self):
            print "正在执行test1"
            x = "this"
            assert 'h' in x
    
        def test_add(self):
            print "正在执行test_add()"
            assert self.add(3, 4) == 7

    执行结果:
    可以看出执行的顺序是 setup_class --》 test1 --》test_add()--》teardown_class

    三、类中方法级的(setup_method、teardown_method)在每一个方法之前执行一次,在每一个方法之后执行一次

    #!/usr/bin/env/python
    # -*-coding:utf-8-*-
    
    """
    开始于方法始末(在类中)
    setup_method
    teardown_method
    """
    import pytest
    
    class TestMethod(object):
    
        def setup_class(self):
            print "setup_class(self):每个类之前执行一次
    "
    
        def teardown_class(self):
            print "teardown_class(self):每个类之后执行一次"
    
        def setup_method(self):
            print "setup_method(self):在每个方法之前执行"
    
        def teardown_method(self):
            print "teardown_method(self):在每个方法之后执行
    "
    
        def add(self,a,b):
            print "这是加法运算"
            return a+b
    
        def test_01(self):
            print "正在执行test1"
            x = "this"
            assert 'h' in x
    
        def test_add(self):
            print "正在执行test_add()"
            assert self.add(3, 4) == 7

    执行结果: setup_class --》 setup_method -->test1 -->teardown_method --》setup_method --> test_add()--》teardown_method --> teardown_class

    四、模块级的(setup_module、teardown_module)全局的,在模块执行前运行一遍,在模块执行后运行一遍

    #!/usr/bin/env/python
    # -*-coding:utf-8-*-
    
    import pytest
    """
    开始于模块始末,全局的
    setup_module
    teardown_module
    """
    
    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_01():
        print "正在执行test1"
        x = "this"
        assert 'h' in x
    
    def add(a,b):
        return a+b
    
    def test_add():
        print "正在执行test_add()"
        assert add(3,4) == 7

    运行结果:setup_module --> setup_function --> test_01--> teardown_function --> setup_function --> test_add()--> teardown_function --> teardown_module

    五、当类和函数都有的时候

    #!/usr/bin/env/python
    # -*-coding:utf-8-*-
    
    """
    在类之前和之后执行一次
    setup_class
    teardown_class
    """
    
    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_10():
        print "正在执行test1"
        x = "this"
        assert 'h' in x
    
    def add0(a,b):
        return a+b
    
    def test_add():
        print "正在执行test_add()"
        assert add0(3,4) == 7
    
    class TestClass(object):
    
        def setup_class(self):
            print "setup_class(self):每个类之前执行一次"
    
        def teardown_class(self):
            print "teardown_class(self):每个类之后执行一次"
    
        def add(self,a,b):
            print "这是加法运算"
            return a+b
    
        def test_01(self):
            print "正在执行test1"
            x = "this"
            assert 'h' in x
    
        def test_add(self):
            print "正在执行test_add()"
            assert self.add(3, 4) == 7
    
    if __name__=="__main__":
        pytest.main(["-s","test_class0.py"])

    运行结果:可以看出来,都互不影响,setup_module还是在最之前执行,所有之后执行。
    setup_modele --> setup_function -->test1 -->teardown_function --> setuo_function -->test_add -->teardown_function -->setup_class -->teardown_class-->taerdown_module

  • 相关阅读:
    :Linux 系统日志管理 日志转储
    Linux 系统日志管理 rsyslogd配置文件
    Linux 系统日志管理
    Linux 定时任务
    Linux进程管理 lsof命令:列出进程调用或打开的文件信息
    Linux查看系统与内核信息(uname、file和lsb_release -a)
    Linux查看本机登陆用户信息(w、who、last和lastlog命令)
    windows下安装mingw
    debian7.8 安装 chm
    Linux-vmware tools安装与cdrom挂载
  • 原文地址:https://www.cnblogs.com/gcgc/p/11513184.html
Copyright © 2011-2022 走看看