使用 pytest 进行设置和拆卸
Using pytest to do setup and teardown
我的测试模块中有一些测试需要在测试前后对 运行 进行一些通用设置和拆卸。我不需要 每个 函数的 运行 的设置和拆卸,只是其中的一小部分。我发现我可以用 fixtures
做到这一点
@pytest.fixture
def reset_env():
env = copy.deepcopy(os.environ)
yield None
os.environ = env
def test_that_does_some_env_manipulation(reset_env):
# do some tests
不过,我实际上并不需要 return 任何要在测试函数中使用的夹具,所以我真的不需要参数。我只是用它来触发设置和拆卸。
有没有办法指定测试函数使用 setup/teardown fixture 而无需 fixture 参数?也许装饰者说测试函数使用了某个夹具?
感谢 上面的评论
@pytest.mark.usefixtures('reset_env')
def test_that_does_some_env_manipulation():
# do some tests
您可以在您的灯具中使用 autouse=True
。 Autouse 在夹具范围的开头自动执行夹具。
在您的代码中:
@pytest.fixture(autouse=True)
def reset_env():
env = copy.deepcopy(os.environ)
yield None
os.environ = env
def test_that_does_some_env_manipulation():
# do some tests
但是您需要注意 fixture 的范围,因为 fixture 会针对每个范围触发。如果您将所有此类测试都放在一个目录下,则可以将其放在该目录的 conftest 文件中。否则,您可以在测试文件中声明夹具。
我的测试模块中有一些测试需要在测试前后对 运行 进行一些通用设置和拆卸。我不需要 每个 函数的 运行 的设置和拆卸,只是其中的一小部分。我发现我可以用 fixtures
@pytest.fixture
def reset_env():
env = copy.deepcopy(os.environ)
yield None
os.environ = env
def test_that_does_some_env_manipulation(reset_env):
# do some tests
不过,我实际上并不需要 return 任何要在测试函数中使用的夹具,所以我真的不需要参数。我只是用它来触发设置和拆卸。
有没有办法指定测试函数使用 setup/teardown fixture 而无需 fixture 参数?也许装饰者说测试函数使用了某个夹具?
感谢
@pytest.mark.usefixtures('reset_env')
def test_that_does_some_env_manipulation():
# do some tests
您可以在您的灯具中使用 autouse=True
。 Autouse 在夹具范围的开头自动执行夹具。
在您的代码中:
@pytest.fixture(autouse=True)
def reset_env():
env = copy.deepcopy(os.environ)
yield None
os.environ = env
def test_that_does_some_env_manipulation():
# do some tests
但是您需要注意 fixture 的范围,因为 fixture 会针对每个范围触发。如果您将所有此类测试都放在一个目录下,则可以将其放在该目录的 conftest 文件中。否则,您可以在测试文件中声明夹具。