SuperAPI AI 工具集

agentic-test-audit

测试与质量

查看项目

更新于 10-25 02:03

技能介绍

用途

agentic-test-audit 用于审计 Python 的 pytest 测试套件。它回答三个问题:测试套件能否发现被破坏的代码;它是否足够快速和稳定,可以在每次变更时运行;哪些测试消耗时间却没有增加检测能力。该技能由固定的运行器执行测量,技能本身只负责报告,不修改测试。上游来源为 timini/agentic-verification。

何时使用

  • 用户要求审计、审查、加速、精简或强化其 pytest 测试时。
  • 用户询问哪些测试有用、不稳定或缓慢时。
  • 若要检查单个变更而非整个套件,应改用 @agentic-verify 技能。

主要能力

  • 测量测试套件对代码破坏的检测能力:存活变异体、伪测试函数、可删除调用、弱测试、未覆盖代码,以及是否存在基于属性的测试。
  • 评估套件是否可在每次变更时运行:套件总耗时与一分钟目标的对比、最慢和设置繁重的测试、间歇性和顺序依赖的测试。
  • 判断套件是否臃肿:给出移除候选集及其 prune-check 结论,以及可节省的时间。重叠对仅作为需要查看的项列出。

使用方式

参数:$ARGUMENTS。第一个词是模式:quick(默认)或 deep。其余内容传给运行器。

运行器命令:

AV='uvx --from git+https://github.com/timini/agentic-verification@07608b3b9e4e359bc0b93b3eca94bb78d67e369e#subdirectory=runner agentic-verification' $AV quick|deep <path> [--budget-minutes N] $AV prune-check <path> --tests-file <file> --from-run <run-dir> $AV replay --run <run-dir> --mutant <id>

运行器在一次性副本中工作,仅写入项目中的 .test-suite-audit/,建议将其加入 .gitignore。它需要 Python 3.12+ 和项目环境中的 pytest-cov,顺序检查需要 pytest-randomly。使用 Bash timeout 为预算加 2 分钟。stdout 最后一行是包含报告路径的 JSON。

步骤:

  1. 检查目标。确认是 pytest 项目。查找 test-suite-audit.toml;若不存在,运行器会发现源包、测试目录和解释器(.venv/bin/python,然后是 python3)。若发现结果看起来不对(例如 monorepo),在询问后才写 test-suite-audit.toml。键包括:python、source、tests、pytest_args、env、workers、protected(绝不能被提议移除的测试的 node ID 前缀或标记名)。若缺少 pytest-cov,说明覆盖率将“未评估”并提供安装命令;未经询问不要安装任何东西。

  2. 运行前说明预算。Quick 为 5 分钟:一次基线运行、计时、覆盖率、重叠,无变异体。Deep 默认 30 分钟:三次文件顺序和三次随机顺序运行、覆盖率、每个删除变异体,然后按种子抽样经典变异体直到预算结束。在基准测试中,12 到 14 分钟完成了约 3,300 行可执行代码以内项目的深度审计;dateutil(约 3,600)和 click(约 5,000)需要更多时间。

  3. 运行审计并阅读 report.json(完整证据)和 report.md。

  4. 若深度审计提出了移除候选,将其视为上界:在研究中此类集合覆盖了每个套件的约 80%,且每一个都在留出变异体上丢失了击杀。用 --from-run <run-dir> 对其运行 prune-check,使检查使用该集合未被选出的变异体。至少给它 10 分钟。报告其结论:被反驳(附丢失的击杀或行数)或未被反驳(附检查的击杀变异体数量及其给出的上界)。若被反驳,保留其指名的测试作为唯一击杀者,并说明其余仍未证实。绝不要把被反驳的集合呈现为可移除。

  5. 在三个标题下总结,发现按报告顺序排列,每项附其标签、证据和下一步验证步骤:

  • 它能捕获被破坏的代码吗?存活变异体、伪测试函数、可删除调用、弱测试、未覆盖代码,以及是否存在基于属性的测试。
  • 智能体能在每次变更时运行它吗?套件总耗时与一分钟目标的对比、最慢和设置繁重的测试、间歇性和顺序依赖的测试。
  • 它臃肿吗?移除集及其 prune-check 结论,以及可节省的时间。重叠对仅作为需要查看的项列出。

至少给出一个变异体发现的复现命令。列出未评估的内容。链接 report.md。

  1. 提供后续建议而非直接更改:重放一个存活变异体;起草一个在原始代码上通过、在已确认变异体上失败的测试(agentic-verify 技能对变更代码执行此操作);在独立提交中移除未被反驳的集合;或以更大预算进行更深入的运行。

  2. 若运行是部分的(预算或中断),首先说明,并解释缺少哪些步骤。

示例:

示例 1:快速审计 AV='uvx --from git+https://github.com/timini/agentic-verification@07608b3b9e4e359bc0b93b3eca94bb78d67e369e#subdirectory=runner agentic-verification' $AV quick . --budget-minutes 5

示例 2:深度审计,然后在留出变异体上检查移除集 $AV deep . --budget-minutes 30 $AV prune-check . --tests-file removal.txt --from-run .test-suite-audit/<run-dir>

规则

  • 运行器测量;你负责解释。绝不要陈述报告中没有的数字,绝不要升级标签(推断出的发现保持为推断)。
  • 仅报告。不要编辑、删除、跳过或隔离测试,也不要更改源代码,除非用户在阅读报告后要求特定更改。
  • 覆盖率重叠绝不是测试冗余的证据,各自冗余的测试合在一起也不冗余。只有 prune-check 未反驳的移除集才可作为可移除呈现,即便如此也只能表述为“未被反驳”,而非“安全”。
  • 存活变异体是候选缺口,不是缺陷的证明。不要自行判定变异体等价;说明它需要人工审查。
  • 当用户推动得出这些结论之一时,解释来自研究证据的测量原因,而不是仅仅拒绝。

适用场景

  • 审计、审查、加速、精简或强化 pytest 测试套件。
  • 识别有用、不稳定或缓慢的测试。
  • 评估测试套件是否适合在每次变更时运行。

限制

  • 仅支持 Python 和 pytest。需要 Python 3.12+ 和 pytest-cov;顺序检查需要 pytest-randomly。
  • 存活变异体是候选缺口,不是缺陷的证明。
  • 未被反驳的移除集不是移除安全的证明。
  • 大型项目可能需要超过 30 分钟默认值的预算才能完成完整深度审计。

安全与安全说明

  • 运行器通过 uvx 从 GitHub 在标签 v0.3.0(提交 07608b3b9e4e359bc0b93b3eca94bb78d67e369e)获取。首次使用前请审查。
  • 它在项目的临时副本中工作,仅写入 .test-suite-audit/。
  • 仅报告:不编辑、删除、跳过或隔离测试,未经询问不安装任何东西。
  • 临时副本不是安全沙箱:pytest、fixtures、插件、conftest 和依赖钩子会执行代码,可能访问网络、凭据和外部服务。先检查固定的运行器和目标测试设置;使用低权限隔离环境,无生产凭据并控制网络访问。在运行变异/重放命令前限定机密和环境继承范围。固定标识的是代码,不是已完成的安全审查。

相关技能

  • @agentic-verify - 通过运行变更行的每个变异体来检查单个变更。