如何暂停pytest计时器?
How to pause pytest timer?
我有一个参数化 (py) 测试,可以在 运行 逻辑之前清理数据库中的一些 table:
@pytest.mark.parametrize('limit', [1, 1000, 5000000])
def test_calc(limit):
# clean test table in database !!!
assert calc(limit) == None
在测试结束时我得到:
=========== 3 passed in 357.65s (0:05:57) ===========
问题是 table 清理工作大约需要 2-3 分钟。
如何在清理前暂停计时器并在清理完成后继续计时?
就像在 Golang 的测试库中一样 - T.StopTimer() & T.StartTime()
我搜索了整个 google,我偶然发现的最接近的是 freezegun。
我试过了,但无法摆脱清理时间,可能是我用错了:/
据我所知,它操纵日期时间对象而不是 pytest 的计时器(机制):(
没有计时器可以停止; pytest
在会话开始时存储时间戳,并在会话结束时打印当前时间和时间戳之间的差异(如果您对代码中计算持续时间的确切位置感到好奇,它是 here). If the cleanup code is not tied to the rest of the test suite, you can move it into a custom impl of the pytest_unconfigure
挂钩。示例:
import time
import pytest
@pytest.fixture(autouse=True)
def db():
yield
import time
time.sleep(3)
def test_db():
assert True
运行 测试会产生
============================== 1 passed in 3.01s ==============================
将数据库清理移至 hookimpl:
# conftest.py
import time
def pytest_unconfigure(config):
import time
time.sleep(3)
报告的持续时间现在是
============================== 1 passed in 0.01s ==============================
由于参数化测试无法这样做,我刚刚创建了一个 pytest PR - https://github.com/pytest-dev/pytest/issues/8568
让我们看看进展如何:)
我有一个参数化 (py) 测试,可以在 运行 逻辑之前清理数据库中的一些 table:
@pytest.mark.parametrize('limit', [1, 1000, 5000000])
def test_calc(limit):
# clean test table in database !!!
assert calc(limit) == None
在测试结束时我得到:
=========== 3 passed in 357.65s (0:05:57) ===========
问题是 table 清理工作大约需要 2-3 分钟。
如何在清理前暂停计时器并在清理完成后继续计时?
就像在 Golang 的测试库中一样 - T.StopTimer() & T.StartTime()
我搜索了整个 google,我偶然发现的最接近的是 freezegun。
我试过了,但无法摆脱清理时间,可能是我用错了:/
据我所知,它操纵日期时间对象而不是 pytest 的计时器(机制):(
没有计时器可以停止; pytest
在会话开始时存储时间戳,并在会话结束时打印当前时间和时间戳之间的差异(如果您对代码中计算持续时间的确切位置感到好奇,它是 here). If the cleanup code is not tied to the rest of the test suite, you can move it into a custom impl of the pytest_unconfigure
挂钩。示例:
import time
import pytest
@pytest.fixture(autouse=True)
def db():
yield
import time
time.sleep(3)
def test_db():
assert True
运行 测试会产生
============================== 1 passed in 3.01s ==============================
将数据库清理移至 hookimpl:
# conftest.py
import time
def pytest_unconfigure(config):
import time
time.sleep(3)
报告的持续时间现在是
============================== 1 passed in 0.01s ==============================
由于参数化测试无法这样做,我刚刚创建了一个 pytest PR - https://github.com/pytest-dev/pytest/issues/8568
让我们看看进展如何:)