跳转到主要内容

运行时间过长的测试失败

项目描述

Project Status: Active — The project has reached a stable, usable state and is being actively developed. CI Status coverage pyversions Conda Version MIT License

GitHub | PyPI | 问题 | 变更日志

pytest-fail-slow 是一个用于将运行时间过长的测试视为失败的 pytest 插件。如果测试或其设置阶段运行时间超过给定持续时间,它会添加失败标记,并提供命令行选项以将相同的截止时间应用于所有测试。

请注意,慢速测试仍然会运行到完成;如果您想提前停止它们,请使用 pytest-timeout

安装

pytest-fail-slow 需要 Python 3.8 或更高版本以及 pytest 7.0 或更高版本。只需使用 pip 为 Python 3 安装它(您有 pip,对吧?)

python3 -m pip install pytest-fail-slow

用法

使慢速测试失败

要使特定测试在运行时间过长时失败,请将其应用 fail_slow 标记,并使用所需截止时间作为参数

import pytest

@pytest.mark.fail_slow("5s")
def test_something_sluggish():
    ...

如果测试因速度慢而失败,pytest的输出将包括测试的持续时间和持续时间阈值,如下所示

________________________________ test_func ________________________________
Test passed but took too long to run: Duration 123.0s > 5.0s

(自版本0.6.0新增) 如果只想在特定条件下使某个测试因速度慢而失败——例如,在CI运行或特定平台上运行时——向标记提供enabled关键字参数。 enabled的值可以是布尔表达式或条件字符串。 当enabled的值评估为True(默认值)时,如果测试的运行时间超过给定持续时间,则测试将失败;如果评估为False,较长的运行时间不会导致测试失败。 示例用法

import os
import pytest

@pytest.mark.fail_slow("5s", enabled="CI" in os.environ)
def test_something_that_needs_to_be_fast_in_ci():
    ...

作为标记的替代或补充,可以将--fail-slow DURATION选项传递给pytest命令,在本质上,将带有给定截止时间的fail_slow标记应用于尚未具有标记的所有测试。 (就pytest而言,选项实际上不会向任何测试添加任何标记,以防你的代码关心这一点。)如果测试已经具有fail_slow标记,则--fail-slow选项将不会对其产生影响。

如果你想只在给出--fail-slow选项的情况下使测试因速度慢而失败,但你希望测试的截止时间与选项传递的不同,你可以给测试一个设置所需截止时间的fail_slow标记,并将enabled设置为条件字符串,以检查是否给出了--fail-slow,如下所示

import pytest

@pytest.mark.fail_slow(3, enabled="config.getoption('--fail-slow') is not None")
def test_something_sometimes_sluggish():
    ...

注意:此功能仅考虑测试本身的持续时间。 如果测试在指定的时间内通过,但一个或多个固定装置的设置/拆卸时间超过持续时间,则测试仍会被标记为通过。 要在设置时间太长时使测试失败,请参阅下文。

失败的慢设置

自版本0.4.0新增

为了使特定测试在所有固定装置的设置步骤运行时间过长时失败,将fail_slow_setup标记应用于它,并使用所需的截止时间作为参数

import pytest

@pytest.mark.fail_slow_setup("5s")
def test_costly_resource(slow_to_create):
    ...

不要将标记应用于测试的固定装置;标记对固定装置没有影响。

如果测试的设置运行时间过长,该测试将被标记为“错误”,测试本身将不会运行,pytest的输出将包括设置阶段的持续时间以及持续时间阈值,如下所示

_______________________ ERROR at setup of test_func _______________________
Setup passed but took too long to run: Duration 123.0s > 5.0s

fail_slow一样,fail_slow_setup标记还接受可选的enabled关键字参数,可用于有条件地启用或禁用慢设置的失败。还有一个--fail-slow-setup DURATION选项可以传递给pytest,在本质上,将标记应用于尚未具有它的所有测试。

注意:如果一个测试依赖于多个固定装置,而其中一个固定装置的运行时间超过给定的持续时间,剩余的固定装置的设置步骤仍将运行。此外,在测试运行后,所有固定装置的拆卸步骤仍将运行。

指定持续时间

传递给标记或命令行选项的持续时间可以是纯秒数,也可以是带有一个以下单位的浮点数(不区分大小写)

  • h小时小时数

  • mminmins分钟分钟数

  • ssecsecs秒数

  • msmillimillisecmilliseconds

  • usμsmicromicrosecmicroseconds

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

pytest_fail_slow-0.6.0.tar.gz (9.5 kB 查看哈希值)

上传时间

构建分布

pytest_fail_slow-0.6.0-py3-none-any.whl (7.1 kB 查看哈希值)

上传时间 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面