关于 django-test-profiling
用于测量 Django 测试套件耗时,并定位主要耗时阶段和测试的技能。它引导开发者从墙钟时间基线出发,制定有优先级的优化步骤。
主要功能
- 01测量完整墙钟运行时间
- 02区分 Django 与 pytest 阶段
- 03找出耗时最长的测试
- 04使用 py-spy 或 cProfile 分析
- 05排列优化行动优先级
适用场景
- 01修改测试设置前建立基线
- 02判断耗时来自数据库设置还是测试
- 03定位瓶颈后选择分析工具
- 04汇报测量结果与后续行动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-test-profiling安装后在 Claude Code 中输入/django-test-profiling确认已加载。
附带文件references/profiler-commands.md
详细介绍
Django 测试性能分析
在为提升速度而修改 Django 测试套件之前,请使用此技能。应根据测量结果决定哪些优化值得实施;否则,很容易把时间花在无关紧要的设置上,而真正的耗时却出在启动、数据库设置、测试夹具构建或少数几个慢速测试上。
测量工作流
-
获取完整的墙钟时间基线。
- 优先使用 Shell 计时,因为它涵盖 Python 启动、Django 导入时间、测试发现、数据库设置和清理。
- 记录准确的命令、环境和重复次数。
-
尽可能分离框架阶段。
- 对于 Django 的运行器,使用
--timing查看数据库设置和清理耗时。 - 对于 pytest,对比 Shell 计时和
pytest --durations。
- 对于 Django 的运行器,使用
-
找出最慢的测试。
- 对于 pytest-django,从
pytest --durations 20开始。 - 对于 Django 的运行器,仅当项目中没有现成的慢速测试插件时,才使用该插件或一个小型自定义运行器。
- 对于 pytest-django,从
-
确认耗时所在位置后再进行性能分析。
- 优先使用
py-spy,以低开销查看整个运行过程。 - 需要详尽的 Python 调用数据时,使用
cProfile。
- 优先使用
-
将结果转化为按优先级排序的行动清单。
- 确定耗时来自启动、数据库创建、重复设置、测试数据、查询次数、I/O、缓存/文件/存储访问,还是某个特定的测试主体。
- 如果下一步适合使用
django-test-performance、django-test-data或django-test-parallelization,请转交相应技能处理。
命令
time python manage.py test
python manage.py test --timing
pytest --durations 20
如需了解性能分析命令变体和结果解读指南,请阅读 profiler-commands.md。
决策规则
- 将 Shell 计时视为用户可感知耗时的权威指标。
- 数据库设置或清理可能占主要耗时时,使用 Django
--timing。 - 优先优化测量结果中最慢的测试,而不是看起来可疑的测试。
- 如果嘈杂的耗时报告会干扰正常的本地运行,请将其放入 CI 日志。
- 测试运行器使用子进程时,使用
py-spy --subprocesses。 - 先按累计时间排序
cProfile输出;了解调用链后再检查自身耗时。
常见错误
- 将框架末尾的“ran in X seconds”视为完整运行时间。
- 把 Django 运行器计时和 pytest 计时当作测量相同阶段的结果进行比较。
- 还没找到慢速测试,就对所有内容进行性能分析。
- 阅读未排序的
cProfile输出并追查导入内部细节。 - 期望采样性能分析捕获每一条短时热点路径。
- 优化某个辅助函数,却不检查测试调用它的频率。
验证
报告发现结果前,请包含:
- 准确的基线命令和测得的墙钟时间。
- 最慢的测试或最慢的阶段。
- 使用的性能分析器(如有)及其适用原因。
- 按预期影响排序的 3 项最实用后续行动。
评论
支持 Markdown