pytest超时后是否可以继续执行其他测试



如果我的一个测试超时,我会收到一条超时消息,所有其他测试都不会执行。有没有办法让pytest在那之后继续运行其他测试?

编辑

示例:

add.py:

import time
def add(a, b):
if a == 2:
time.sleep(2)
elif a == 3:
time.sleep(4)
return a + b

test_add.py:

import pytest
from add import add

@pytest.mark.parametrize(
'a, b, expected_result', [
(1, 1, 2),
(2, 2, 4),
(2, 3, 5),
(3, 2, 5),
(4, 1, 5)
]
)
def test_add(a, b, expected_result):
result = add(a, b)
expected_result = a + b
assert result == expected_result

通过运行

(venv) >pytest test_add.py --timeout=3

我得到

============= test session starts ==============
platform win32 -- Python 3.7.7, pytest-6.0.1, py-1.9.0, pluggy-0.13.1
rootdir: C:UsersKoshPycharmProjectscalcTest
plugins: timeout-1.4.2
timeout: 3.0s
timeout method: thread
timeout func_only: False
collected 5 items                                                                                                                                                                                           
test_add.py ...
++++++++++++++++++++ Timeout ++++++++++++++++++++

~~~~~~~~~~ Stack of MainThread (10588) ~~~~~~~~~~
File "C:UsersKoshAppDataLocalProgramsPythonPython37librunpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
.....

执行了第一次、第二次和第三次测试,第四次测试超时,第五次测试未执行。我正在寻找一种运行它的方法。

pytest-timeout提供了两种超时方法:signal和thread。

Signal方法提供了所需的功能,在一个测试套件失败的情况下,它不会停止整个测试套件。但是Windows不支持信号方法,因此只能使用线程的方法。

正如pytest-timeout自述所说:

线程

对于每个测试项目,pytest-timeout插件启动一个定时器线程,该线程将在指定的超时后终止整个过程

因此这是Windows的预期行为。而且,据我所知,除了使用Linux之外,还没有一个令人满意的解决方案:(

最新更新