使用
--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
最慢的测试创建时间?
要确定 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