咨询:Pytest-benchmark脚本中预计算测试数据是否可行且不影响计时?
关于Pytest-benchmark中预计算测试输入的有效性说明
这种预计算测试输入的方案是完全有效的,不会影响Pytest-benchmark的基准测试计时,原因如下:
- Pytest在加载测试模块(比如你的
script.py)时,会先执行所有模块级别的代码。你示例里的INPUTS = compute_inputs()就属于这部分,它会在任何测试(包括基准测试)开始前就完成计算,不会被计入基准测试的计时范围。 - Pytest-benchmark的计时逻辑是从调用
benchmark()函数时才启动,只统计被包裹的目标函数(也就是示例里的something)的执行时间。哪怕你把预计算好的INPUTS作为参数传给something(比如写成benchmark(something, INPUTS)),参数传递的操作也是在计时开始前完成的,不会对基准结果产生干扰。
举个更直观的验证示例:
def compute_inputs(): # 模拟耗时的输入计算 import time time.sleep(2) return [1,2,3,4] INPUTS = compute_inputs() def process_data(data): # 实际要基准测试的逻辑 return sum(data) def test_benchmark_process(benchmark): # 计时仅统计process_data的执行时间,与compute_inputs的2秒无关 result = benchmark(process_data, INPUTS) assert result == 10
执行pytest script.py -v时,你会看到模块加载阶段会先等待2秒(compute_inputs的执行时间),而基准测试的报告里只会显示process_data的执行耗时,完全不受预计算步骤的影响。
内容的提问来源于stack exchange,提问作者aaxx
相关产品推荐
相关产品推荐

