Pytest设置和拆卸功能-与自写功能一样?

时间:2018-08-23 11:25:58

标签: python pytest

在pytest文档的以下示例中:

enter image description here

功能setup_function应该为其他功能(例如test_data)设置一些数据。因此,如果我编写函数test_data,则必须像这样调用setup_function

def test_data():
    setup_function(....)
    <Test logic here>
    teardown_function(....)

所以唯一的区别是名称约定?

我不知道该如何精确地帮助我创建设置数据。我本可以这样写相同的代码:

def test_data():
    my_own_setup_function(....)
    <Test logic here>
    my_own_teardown_function(....)

由于无法告诉pytest自动将设置函数链接到测试函数,因此它会为-创建函数function的参数setup_function的设置数据,如果我不需要函数指针。...所以为什么要无故创建名称约定?

据我了解,设置函数参数function仅在我需要使用函数指针时才有帮助-这是我很少需要的。

2 个答案:

答案 0 :(得分:2)

如果您想为一个或多个测试设置详细信息,则可以使用“普通” pytext固定装置。

import pytest

@pytest.fixture
def setup_and_teardown_for_stuff():
    print("\nsetting up")
    yield
    print("\ntearing down")

def test_stuff(setup_and_teardown_for_stuff):
    assert 1 == 2

要记住的事情是,收益率之前的所有操作都在测试之前进行,而收益率之后的所有操作都在测试之后进行。

tests/unit/test_test.py::test_stuff 
setting up
FAILED
tearing down

答案 1 :(得分:1)

答案

您的问题似乎可以归结为:pytest documentation中所述的setup_functionteardown_function的目的/好处是什么?

使用这些函数的好处是您不必调用它们; setup_functionteardown_function都将分别(分别)在每个测试之前和之后自动运行。

就必须传递函数指针而言,在pytest> = 3.0中不需要。来自documentation

  

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

因此,您无需将函数指针传递给setup_functionteardown_function函数;您只需按照下面的示例中所述将它们添加到测试文件中,即可执行。


示例

例如,如果您有一个test_setup_teardown.py文件,如下所示:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


def setup_function():
    print('setting up')


def test_1():
    print('test 1')
    assert 1 == 2


def teardown_function():
    print('tearing down')

,然后您使用pytest(类似于pytest test_setup_teardown.py)运行该文件,pytest将输出:

---- Captured stdout setup ----
setting up
---- Captured stdout call ----
test 1
---- Captured stdout teardown ----
tearing down

换句话说,pytest自动调用setup_function,然后运行测试(失败),然后运行teardown_function。这些功能的好处是能够指定在运行所有测试之前和之后发生的事情。