测量 pytest 设置时间

问题描述 投票:0回答:1

使用

--durations=10
pytest 显示 10 个最慢的测试。我有很多测试,所有测试都运行得很快,但是测试创建到处都需要很长时间,尤其是在像

这样的结构中
@pytest.mark.parametrize("arg", [
   create_test_params(1),
   create_test_params_alt(256),  # may take long?
   # ...
   # long list here
   #
])
def test_all():
    # ...

有没有办法找到

n
最慢的测试创建时间?

python pytest
1个回答
0
投票

要确定 pytest 中最慢的测试创建时间,尤其是在参数化测试中,您应该手动测量并记录参数创建函数所花费的时间,因为 pytest 的

--durations
选项不涵盖测试设置阶段。这可以通过使用自定义装饰器包装参数生成函数来实现,该装饰器测量执行时间并报告它,例如,通过打印持续时间或将其记录到文件中。这种方法允许在测试设置阶段识别性能瓶颈,补充 pytest 用于分析测试执行时间的内置工具,尽管需要更多的手动方法来进行集成和报告。

import time

def timed_parameter_creation(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} took {end_time - start_time} seconds to generate parameters.")
        return result
    return wrapper

@timed_parameter_creation
def create_test_params(arg):
    # Simulate a delay
    time.sleep(0.5)
    return arg

@timed_parameter_creation
def create_test_params_alt(arg):
    # Simulate a longer delay
    time.sleep(1)
    return arg

@pytest.mark.parametrize("arg", [
   create_test_params(1),
   create_test_params_alt(256),
   # ... add more as needed
])
def test_all(arg):
    assert arg is not None  # Example assertion

© www.soinside.com 2019 - 2024. All rights reserved.