Python 如何暂停测试计时器?
我有一个参数化(py)测试,它在运行逻辑之前清理数据库中的一些表:Python 如何暂停测试计时器?,python,datetime,pytest,freezegun,Python,Datetime,Pytest,Freezegun,我有一个参数化(py)测试,它在运行逻辑之前清理数据库中的一些表: @pytest.mark.parametrize('limit',[11005000000]) def测试计算(限值): #清理数据库中的测试表!!! 断言计算(限制)=无 在测试结束时,我得到: =============3以357.65秒的速度通过(0:05:57)=========== 问题是大约2-3分钟的时间是表格清理 如何在清理之前暂停计时器,并在清理完成后继续计时器 就像在Golang的测试库中-& 我在谷歌上
@pytest.mark.parametrize('limit',[11005000000])
def测试计算(限值):
#清理数据库中的测试表!!!
断言计算(限制)=无
在测试结束时,我得到:
=============3以357.65秒的速度通过(0:05:57)===========
问题是大约2-3分钟的时间是表格清理
如何在清理之前暂停计时器,并在清理完成后继续计时器
就像在Golang的测试库中-&
我在谷歌上到处搜索,最接近我的东西是我试过了,但无法摆脱清理时间,也许我用错了
:/
据我所知,它操作的是datetime对象,而不是pytest的计时器(机制)
:(
没有要停止的计时器;pytest
在会话开始时存储时间戳,并在会话结束时打印当前时间和时间戳之间的差值(如果您对代码中计算持续时间的确切位置感到好奇,那么它就是)。如果清理代码未绑定到测试套件的其余部分,则可以将其移动到钩子的自定义impl中。例如:
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 ==============================
由于参数化测试无法执行此操作,我只是创建了一个PR-to-pytest-
让我们看看它是如何进行的:)好吧,这就是测试的总持续时间-这是一个统计数据,你为什么要关心缩短它?到底为什么要“表清理”花这么长时间?我会努力把时间缩短到<1秒…因为我需要知道我的新代码是否在不计算引导步骤的情况下提高或降低了性能…当每行占用数兆字节,有15亿条记录的硬盘速度较慢时,删除查询可能需要一些时间…你能添加负责删除的代码吗e表清理?我如何使用这种方法进行参数化测试?我的意思是,如何为每个通过的参数运行数据库清理?而不是整个测试。此外,在我的上下文中,我需要
pytest\u configure
,因为我想在测试完成后查看结果。