首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何暂停火热计时器?

如何暂停火热计时器?
EN

Stack Overflow用户
提问于 2021-04-14 11:11:21
回答 2查看 310关注 0票数 4

我有一个参数化(Py)测试,在运行逻辑之前清理DB中的一些表:

代码语言:javascript
复制
@pytest.mark.parametrize('limit', [1, 1000, 5000000])
def test_calc(limit):
    # clean test table in database !!!
    assert calc(limit) == None

在测试结束时我得到:

代码语言:javascript
复制
=========== 3 passed in 357.65s (0:05:57) ===========

问题是,其中大约2-3分钟是对桌子的清理。

如何在清理之前暂停计时器,并在清理完成后继续计时器?

就像戈朗的测试库- T.StopTimer() & T.StartTime()

我搜索了所有的谷歌,我偶然发现的最接近的东西是冷冻枪

我试过了,但无法摆脱清理时间,也许我用错了:/

据我所知,它操作datetime对象,但不操纵pytest的timer (机制) :(

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-16 22:16:05

没有可停止的计时器;pytest在会话开始时存储时间戳,并打印当前时间与会话完成时时间戳之间的差异(如果您对计算持续时间的代码中的确切位置感到好奇,则为这里)。如果清理代码未绑定到测试套件的其余部分,则可以将其移动到pytest_unconfigure钩子的自定义驱动中。示例:

代码语言:javascript
复制
import time
import pytest


@pytest.fixture(autouse=True)
def db():
    yield
    import time
    time.sleep(3)


def test_db():
    assert True

运行测试将产生

代码语言:javascript
复制
============================== 1 passed in 3.01s ==============================

将数据库清理移动到挂钩:

代码语言:javascript
复制
# conftest.py

import time


def pytest_unconfigure(config):
    import time
    time.sleep(3)

报告的持续时间是现在

代码语言:javascript
复制
============================== 1 passed in 0.01s ==============================
票数 3
EN

Stack Overflow用户

发布于 2021-04-20 15:22:02

由于参数化测试没有办法这样做,所以我刚刚创建了一个用于pytest - https://github.com/pytest-dev/pytest/issues/8568的PR。

让我们看看它是如何进行的:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67090593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档