SuperAPI AI 工具集

antithesis-triage

测试与质量

查看项目

更新于 10-15 09:04

技能介绍

用途

Antithesis Triage 用于分析 Antithesis 测试运行(run)的结果,帮助理解一次运行中发生了什么。它面向需要排查测试失败、查看运行状态或获取运行概览的用户。

主要能力

  • 汇总近期运行:获取近期运行列表并生成报告。
  • 查找特定运行:加载指定运行(报告)的信息。
  • 对运行进行分诊:加载运行信息、属性(properties),审查通过/失败计数,检查插桩设置信号,并生成包含所有失败及新增失败的详细摘要。
  • 调查失败属性:提取属性及其示例/反例,下载并分析日志,结合被测系统(SUT)和工作负载的源代码进行交叉引用,深入理解失败的时间线。
  • 验证插桩:确认 SUT 和工作负载已插桩且符号已注册。
  • 诊断未完成的运行:检查 failure_moment 结构、下载日志、获取构建日志以查找错误。

使用方式

前置条件

  • 必须安装 snouty,且版本至少为 0.6.0(使用 snouty --version 查看,snouty update 更新)。
  • 必须安装 jq。
  • 安装说明参见 snouty 的 README:https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md
  • jq 下载:https://jqlang.org/download/

预检

运行以下命令确认设置就绪:

snouty doctor --json

仅当顶层 ok 为 true 且 api_key 检查状态为 ok 时继续。否则转达失败检查的消息/备注并停止;若 api_key 失败,提示用户设置 ANTITHESIS_API_KEY。

可通过以下命令查看解析后的 tenant:

snouty doctor --json | jq -r '.settings[] | select(.name == "tenant") | .value'

收集用户输入

  • Tenant 名称(必需):从 snouty doctor --json 读取解析后的 tenant;仅当 doctor 显示 tenant 未设置时才询问用户。
  • 用户想了解什么:所有失败、特定失败、总体概览还是比较运行,这决定后续工作流。

获取运行信息

主要方法是使用 snouty runs <OPTION> 命令并加上 --json 选项,返回行分隔的 JSON。需要知道 RUN_ID,参见 references/run-discovery.md。

工作流

  • 汇总近期运行:读取 references/run-discovery.md 获取近期运行列表,然后生成报告。
  • 查找特定运行:读取 references/run-info.md,然后按需继续其他工作流。
  • 分诊运行:若状态为 incomplete,参考诊断未完成运行部分。读取 references/run-info.md 加载运行信息;若 links.triage_report 为 null/缺失,则报告该运行不可分诊(属性和日志端点将返回 404)。读取 references/properties.md 加载属性;审查通过/失败计数;检查插桩设置信号(Software was instrumented 和 Symbols were uploaded 属性),读取 references/instrumentation.md 解读;生成详细摘要,包含所有失败审查及新增失败标记,并包含插桩状态。
  • 调查失败属性:读取 references/properties.md,使用 snouty runs --json properties 提取属性及其示例并学习下载日志;读取 references/logs.md 理解日志。对每个要调查的属性:选择第一个失败示例;查找 moment(若反例无 moment 字段,属遥测/元属性,报告反例值作为证据并跳过后续步骤);下载示例日志;本地分析;若不确定原因,考虑下载同一属性的其他反例和示例日志进行对比。搜索更多日志时先使用:
snouty runs --json events ${RUN_ID} ${PROPERTY_NAME}

注意这返回部分而非全部案例。将返回的 moment 与已下载的示例/反例 moment 进行比对。重要:将日志与 SUT 和工作负载源代码交叉引用。深入调查以理解导致失败的事件时间线。报告发现。注意:仅凭属性状态和断言文本不足,日志提供理解失败所需的实际运行时上下文。

  • 验证插桩:读取 references/instrumentation.md。
  • 诊断未完成运行:执行 snouty runs --json show ${RUN_ID};查看 failure_moment 结构,若存在则用 input_hash 和 vtime 下载日志;尝试获取构建日志:snouty runs --json build-logs ${RUN_ID} 并查找错误。注意:对于未完成运行,属性和日志端点通常返回 404,但 links.triage_report 和 failure_moment 可能仍填充在 show 中。报告 show 实际包含的内容。

一般指导

  • 在得出结论前审查日志。
  • 对于属性失败,考虑提供的 details 部分。
  • 清晰呈现结果:属性状态用表格或列表;日志发现包含虚拟时间戳、来源、容器和日志文本。
  • 在浏览器中提供报告:建议使用 snouty runs show <RUN_ID> --web 而非打印长 URL。--web 仅在存在分诊报告时有效。

建议后续技能

在分诊摘要末尾添加简短的“下一步”部分,列出后续技能或额外分诊工作流作为建议,由用户决定是否调用。可建议的技能包括:

  • antithesis-research:映射代码库以发现更好的可测试属性。
  • antithesis-workload:扩展或改进断言、测试命令和日志。
  • antithesis-debug:在特定失败上打开多宇宙调试器。需要 agent-browser,可能需要交互式登录。
  • antithesis-mutation-testing:通过注入真实 bug 证明属性确实能失败。仅在运行全绿且无变异测试迹象时建议。
  • antithesis-query-logs:跨所有时间线搜索顺序和因果关系问题。需要 agent-browser,可能需要交互式登录。

包含下一个技能所需的数据(run_id、属性名、moment 等)。

自我审查

完成前对照以下标准审查工作:

  • 每个属性状态均从实际属性获取中提取,而非推断。
  • 发现引用属性数据中的具体数据。
  • 有日志的失败属性包含可操作上下文。
  • 摘要区分报告显示的内容与解读或建议。
  • 比较运行时,差异基于两个报告的数据。
  • 声称二进制未插桩时遵循 references/instrumentation.md,不依赖去重后的 Software was instrumented 属性示例。

适用场景

  • 需要了解 Antithesis 测试运行中发生了什么。
  • 排查失败的属性(断言)。
  • 获取运行概览或比较运行。
  • 诊断未完成的运行。
  • 验证插桩状态。

限制

  • 必须安装 snouty(至少 0.6.0)和 jq。
  • 需要有效的 ANTITHESIS_API_KEY 和 API 连接。
  • 需要知道 tenant 名称和 RUN_ID。
  • 对于不可分诊的运行(links.triage_report 为 null/缺失),属性和日志端点返回 404。
  • 部分属性可能没有示例或日志,此时状态本身即为证据。
  • 某些后续技能需要 agent-browser,可能需要交互式登录。
  • 参考文件不应预先全部读取,仅在需要时按名称读取。