python性能测试核心是量化执行时间、内存占用或吞吐量,需控制变量、多次采样、避开干扰;常用工具包括timeit(函数级精确计时)、pytest-benchmark(项目级自动化基准测试)、memory_profiler(内存分析)及psutil/perf/locust等系统级观测工具。

Python性能测试核心是用可复现的方式量化代码执行时间、内存占用或吞吐量,关键在于控制变量、多次采样、避开干扰,并选对工具。
用timeit做轻量级函数级基准测试
适合单行或短函数的精确计时,自动处理循环、预热和最小值选取,避免系统调度误差。
- 命令行直接测:`python -m timeit -s "import math" "math.sqrt(12345)"`
- 脚本中调用:
timeit.timeit(lambda: my_func(x, y), number=100000) - 注意传入
setup参数预加载依赖,避免重复导入影响结果
用pytest-benchmark做项目级自动化基准测试
集成在测试流程中,支持参数化、历史对比、统计摘要(平均值、中位数、标准差),适合持续监控性能变化。
- 写一个带
benchmarkfixture的测试函数:def test_sort_list(benchmark): result = benchmark(sorted, large_list) - 生成HTML报告:运行时加
--benchmark-histogram,自动输出分布图 - 可标记基线版本,CI中用
--benchmark-compare比对前后差异
用memory_profiler测内存而非仅时间
很多瓶颈不在CPU而在内存分配/释放,尤其处理大数组、缓存或生成器时。
立即学习“Python免费学习笔记(深入)”;
- 装饰函数:
@profile,然后运行python -m memory_profiler script.py - 逐行分析内存增长:
mprof run script.py && mprof plot生成内存随时间变化曲线 - 配合
tracemalloc(标准库)定位内存泄漏源头:tracemalloc.start(); ... ; snapshot = tracemalloc.take_snapshot()
真实场景别忘系统级观测
单个函数快不等于整体快。I/O等待、GIL争用、子进程开销等需从OS层面验证。
- 用
psutil监控Python进程的CPU%、RSS内存、句柄数、上下文切换次数 - Linux下用
perf record -e cycles,instructions,cache-misses -p $(pidof python)抓底层事件 - Web服务加
locust或ab做端到端压测,看QPS、P95延迟、错误率
不复杂但容易忽略。











