我想强制执行pytest中的测试时间不超过3秒。
pytest-timeout(https://pypi.python.org/pypi/pytest-timeout)几乎可以做我想要的......但是它似乎允许我设置一个全局超时(即确保测试套件花费不到10分钟)或者一个能力手动设置每个测试的装饰器。
所需行为 使用单个设置配置pytest,以使任何超过3秒的单个测试失败。
答案 0 :(得分:2)
您可以使用local plugin。将conftest.py
文件放入项目根目录或放入您的tests文件夹中,使用以下内容将每个测试的默认超时设置为3秒;
import pytest
def pytest_collection_modifyitems(items):
for item in items:
if item.get_marker('timeout') is None:
item.add_marker(pytest.mark.timeout(3))
Pytest在收集测试后调用pytest_collection_modifyitems
函数。这用于将超时标记添加到所有测试中。
仅在标记尚不存在时添加标记(if item.get_marker...
)可确保您仍然可以在需要不同超时的测试中使用@pytest.mark.timeout
装饰器。
另一种可能性是分配到测试模块顶部某处的special pytestmark
variable:
pytestmark = pytest.mark.timeout(3)
这样做的缺点是你需要将它添加到每个模块,在我的测试中,当我尝试在该模块的任何地方使用@pytest.mark.timeout
装饰器时,我收到了一条错误消息。
答案 1 :(得分:0)
您可以使用在py.test配置文件中设置全局超时 超时选项。 E.g:
[pytest] timeout = 300