我有一个带有测试功能的模块,我想在收集阶段之后和测试运行之前编写conftest.py
文件来装饰模块中的所有函数。我不想用测试功能编辑模块。
我这样试过:
def test_foo ():
assert 1 == 42
def pytest_generate_tests (metafunc):
def test_bar ():
assert 1 == 2
metafunc.function = test_bar
当我运行测试时,我得到了这个:
==================================== FAILURES =====================================
____________________________________ test_foo _____________________________________
def test_foo ():
> assert 1 == 42
E assert 1 == 42
但我期望关于1 == 2
的断言错误。
答案 0 :(得分:1)
如果要在测试之前运行某个功能,请定义 fixture 并使用灯具名称作为测试参数。
import pytest
@pytest.fixture
def fixture1():
assert 1 == 2
def test_foo(fixture1):
assert 1 == 42
输出:
@pytest.fixture
def fixture1():
> assert 1 == 2
E assert 1 == 2
如果要在每个测试之前运行某个功能,请使用autouse=True
定义 fixture 。我想这就是你想要的。
import pytest
@pytest.fixture(autouse=True)
def fixture1():
assert 1 == 2
def test_foo():
assert 1 == 42
输出:
@pytest.fixture(autouse=True)
def fixture1():
> assert 1 == 2
E assert 1 == 2
如果您需要自定义测试装饰器,请使用标准装饰器语法。
def my_test_decorator(test):
def wrapper():
assert 1 == 2
return wrapper
@my_test_decorator
def test_foo():
assert 1 == 42
输出:
def wrapper():
> assert 1 == 2
E assert 1 == 2
答案 1 :(得分:1)
我只需要替换pytest项目的runtest
方法。