如何在 pytest 中设置默认的每个测试超时?

问题描述 投票:0回答:3

我想强制 pytest 中的测试时间不超过 3 秒。

pytest-timeout(https://pypi.python.org/pypi/pytest-timeout)几乎做了我想要的......但它似乎允许我设置一个全局超时(即确保测试套件花费不到 10 分钟),或者能够在每个测试上手动设置装饰器。

期望的行为: 使用单个设置配置 pytest 以使任何超过 3 秒的单独测试失败。

python pytest
3个回答
6
投票

来自 pytest-timeout 页面

您可以在 py.test 配置文件中使用以下命令设置全局超时 超时选项。例如:

[pytest]
timeout = 300

5
投票

您可以使用本地插件。将

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))

Pytest 在收集测试后调用

pytest_collection_modifyitems
函数。此处用于将超时标记添加到所有测试中。

仅在标记尚不存在时添加标记 (

if item.get_marker...
) 可确保您仍然可以在需要不同超时的测试中使用
@pytest.mark.timeout
装饰器。

另一种可能性是分配给测试模块顶部某处的特殊

pytestmark
变量

pytestmark = pytest.mark.timeout(3)

这有一个缺点,您需要将其添加到每个模块中,在我的测试中,当我尝试在该模块中的任何位置使用

@pytest.mark.timeout
装饰器时,我收到了一条错误消息。


0
投票

要为每个单独的测试全局设置超时,您有两个主要选项

CLI 选项

pytest --timeout 3 tests

Pytest ini 选项

pytest.ini

[pytest]
timeout = 3

pyproject.toml

[tool.pytest.ini_options]
timeout = 3
© www.soinside.com 2019 - 2024. All rights reserved.