mcpField
D
django-test-profiling

django-test-profiling

github.com/lvtd-llc测试与质量160 次安装7 周前更新
代码仓库

关于 django-test-profiling

用于测量 Django 测试套件耗时,并定位主要耗时阶段和测试的技能。它引导开发者从墙钟时间基线出发,制定有优先级的优化步骤。

主要功能

  1. 01测量完整墙钟运行时间
  2. 02区分 Django 与 pytest 阶段
  3. 03找出耗时最长的测试
  4. 04使用 py-spy 或 cProfile 分析
  5. 05排列优化行动优先级

适用场景

  1. 01修改测试设置前建立基线
  2. 02判断耗时来自数据库设置还是测试
  3. 03定位瓶颈后选择分析工具
  4. 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 测试套件之前,请使用此技能。应根据测量结果决定哪些优化值得实施;否则,很容易把时间花在无关紧要的设置上,而真正的耗时却出在启动、数据库设置、测试夹具构建或少数几个慢速测试上。

测量工作流

  1. 获取完整的墙钟时间基线。

    • 优先使用 Shell 计时,因为它涵盖 Python 启动、Django 导入时间、测试发现、数据库设置和清理。
    • 记录准确的命令、环境和重复次数。
  2. 尽可能分离框架阶段。

    • 对于 Django 的运行器,使用 --timing 查看数据库设置和清理耗时。
    • 对于 pytest,对比 Shell 计时和 pytest --durations。
  3. 找出最慢的测试。

    • 对于 pytest-django,从 pytest --durations 20 开始。
    • 对于 Django 的运行器,仅当项目中没有现成的慢速测试插件时,才使用该插件或一个小型自定义运行器。
  4. 确认耗时所在位置后再进行性能分析。

    • 优先使用 py-spy,以低开销查看整个运行过程。
    • 需要详尽的 Python 调用数据时,使用 cProfile。
  5. 将结果转化为按优先级排序的行动清单。

    • 确定耗时来自启动、数据库创建、重复设置、测试数据、查询次数、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