py.test中夹具设置时间的细分

时间:2016-09-20 20:11:41

标签: pytest

我有一些py.test测试有多个依赖和参数化的灯具,我想测量每个灯具所用的时间。但是,在--durations的日志中,它只显示setup实际测试的时间,但没有给出每个灯具所用时间的详细信息。

2 个答案:

答案 0 :(得分:2)

这是如何执行此操作的具体示例:

import logging
import time

import pytest

logger = logging.getLogger(__name__)

@pytest.hookimpl(hookwrapper=True)
def pytest_fixture_setup(fixturedef, request):
    start = time.time()

    yield

    end = time.time()

    logger.info(
        'pytest_fixture_setup'
        f', request={request}'
        f', time={end - start}'
    )

输出类似于:

2018-10-29 20:43:18,783 - INFO pytest_fixture_setup, request=<SubRequest 'some_data_source' for <Function 'test_ruleset_customer_to_campaign'>>, time=3.4723987579345703

魔术是hookwrapper

  pytest插件可以实现钩子包装器,该包装器包装其他钩子实现的执行。挂钩包装器是生成器函数,仅产生一次。 pytest调用钩子时,它首先执行钩子包装并传递与常规钩子相同的参数。

我遇到的一个相当重要的陷阱是conftest.py必须位于项目的根文件夹中才能拿起pytest_fixture_setup钩子。

答案 1 :(得分:0)

没有内置任何内容,但您可以使用conftest.py文件中的新pytest_fixture_setup hook轻松实现自己。