我想强制执行在 pytest 中没有测试需要超过 3 秒。
pytest-timeout ( https://pypi.python.org/pypi/pytest-timeout ) 几乎可以做我想要的......但它似乎允许我设置全局超时(即确保测试套件少于10 分钟)或者,能够在每个测试中手动设置装饰器。
期望的行为: 使用单个设置配置 pytest 以使任何超过 3 秒的单个测试失败。
您可以使用 timeout 选项在 py.test 配置文件中设置全局超时。例如:
Run Code Online (Sandbox Code Playgroud)[pytest] timeout = 300
您可以使用本地插件。将conftest.py文件放入项目根目录或测试文件夹中,如下所示,将每个测试的默认超时设置为 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))
Run Code Online (Sandbox Code Playgroud)
pytest_collection_modifyitemsPytest在收集测试后调用该函数。此处使用它来将超时标记添加到所有测试中。
仅当标记尚不存在时添加标记 ( if item.get_marker...) 可确保您仍然可以@pytest.mark.timeout在需要不同超时的测试中使用装饰器。
另一种可能性是分配给测试模块顶部某处的特殊pytestmark变量:
pytestmark = pytest.mark.timeout(3)
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是您需要将其添加到每个模块中,并且在我的测试中,当我尝试在该模块中的任何位置使用装饰器时,我收到了一条错误消息@pytest.mark.timeout。
| 归档时间: |
|
| 查看次数: |
7407 次 |
| 最近记录: |