更新:
Pytest 3.0引入了一种新方法register_assert_rewrite
来实现此确切功能。如果您使用的是pytest 3.0或更高版本,请尝试此操作。register_assert_rewrite
原始答案:
诀窍在于pytest如何收集测试模块。我们可以定义python_files,pytest.ini以便pytest将更多模块视为测试模块。
例如,在我的情况下,我所有的自定义断言模块都以“ asserts”结尾,所以我pytest.ini是:
[pytest]
python_files = *asserts.py test_*.py *_test.py
另一个棘手的事情是conftest.py。看来我们必须避免在中导入asserts模块conftest.py。我的假设是pytest用于重写assert的技术实际上是重写.pyc文件,并且由于conftest.py在收集之前已加载,因此如果我们导入asserts模块,.pyc则该模块将在收集之前生成,这可能会使pytest无法重写.pyc再次归档。
因此,在conftest.py中,我必须执行以下操作:
@pytest.fixture(autouse=Ture)
def setup_asserts(request):
from custom_asserts import CustomAsserts
request.instance.asserts = CustomAsserts()
而且我将获得额外的错误信息,就像assert直接在测试脚本中使用关键字一样。