运行时间过长的测试失败
项目描述
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,小时,小时数
m,min,mins,分钟,分钟数
s,sec,secs,秒,秒数
ms,milli,millisec,milliseconds
us,μs,micro,microsec,microseconds
项目详情
pytest_fail_slow-0.6.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b367a5bdfadb0a4d35d4ef1c220737aa46bc8d6035256171004c67f7f2f5235c |
|
MD5 | 4e0cc72630a736376dad74257a588654 |
|
BLAKE2b-256 | e4ec32f3a9cd3e7ffd50cb4c98413f5047338f3fbc2dc67012572bbe527279bb |
pytest_fail_slow-0.6.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1658ad93b19e54c25142540f2808640c418ba000be87dc0c9b7aac6662d493cc |
|
MD5 | 472cfa9c9da0b6f67bb47ba33fe63198 |
|
BLAKE2b-256 | 56f59fcebc75407e14e4e36bd26da0fc659ea585af256007937e3c355ce807cd |