pytest 其他测试系统-如何实现xunit风格的设置

2022-03-22 09:55 更新

本节描述了如何在每个模块/类/函数的基础上实现​fixture(setup和teardown测试状态)的经典和流行的方法。

虽然这些设置/拆卸方法对于那些使用过​unittest​或​nose​的人来说很简单,也很熟悉,但你也可以考虑使用pytest更强大的​fixture​机制,它利用了依赖注入的概念,允许使用更模块化和更可伸缩的方法来管理测试状态,特别是对于大型项目和功能测试。您可以在同一个文件中混合使用这两种​fixture​机制,但是可以使用​unittest​的测试方法。​TestCase​子类不能接收​fixture​参数。

模块级setup/teardown

如果你在一个模块中有多个测试函数和测试类,你可以选择实现以下​fixture​方法,这些方法通常会被所有的函数调用一次:

def setup_module(module):
    """ setup any state specific to the execution of the given module."""


def teardown_module(module):
    """teardown any state that was previously setup with a setup_module
    method.
    """

从 pytest-3.0 开始,​module​参数是可选的。

类级别setup/teardown

同样,下面的方法在类级别之前和之后的所有测试方法类被称为:

@classmethod
def setup_class(cls):
    """setup any state specific to the execution of the given class (which
    usually contains tests).
    """


@classmethod
def teardown_class(cls):
    """teardown any state that was previously setup with a call to
    setup_class.
    """

方法和功能级别的setup/teardown

类似地,以下方法在每个方法调用:

def setup_method(self, method):
    """setup any state tied to the execution of the given method in a
    class.  setup_method is invoked for every test method of a class.
    """


def teardown_method(self, method):
    """teardown any state that was previously setup with a setup_method
    call.
    """

从pytest-3.0开始,​method​参数是可选的。

如果你更愿意直接在模块级定义测试函数,你也可以使用以下函数来实现​fixture​:

def setup_function(function):
    """setup any state tied to the execution of the given function.
    Invoked for every test function in the module.
    """


def teardown_function(function):
    """teardown any state that was previously setup with a setup_function
    call.
    """

从 pytest-3.0 开始,​function​参数是可选的。

备注:

每个测试过程可以多次调用​setup/teardown​对。

如果对应的​setup​函数存在并且失败或者被跳过,则不会调用​Teardown​函数。

在pytest-4.2之前,​xunit​风格的函数不遵守​fixture​的作用域规则,因此,例如,可以在会话作用域的自动使用​fixture​之前调用​setup_method​。

现在,​xunit​风格的函数与​fixture​机制集成在一起,并遵守调用中涉及的​fixture​的适当范围规则。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号