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

时间:2017-04-24 22:59:35

标签: python pytest

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

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

所需行为 使用单个设置配置pytest,以使任何超过3秒的单个测试失败。

2 个答案:

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

来自pytest-timeout page

  

您可以使用在py.test配置文件中设置全局超时   超时选项。 E.g:

[pytest]
timeout = 300