关于 siege
siege 是面向测试与可靠性工作的技能,用于设计和审查负载、契约、混沌、变异及韧性测试。它提供指标和失败证据及后续建议,具体修复交由其他 Agent 处理。
主要功能
- 01设计负载与 SLO 验证
- 02检查消费者与提供者契约
- 03规划混沌实验和故障注入
- 04测量变异测试结果
- 05验证重试与熔断等韧性行为
适用场景
- 01验证服务在高负载下的延迟与容量
- 02检查 API 或事件接口兼容性
- 03评估故障注入期间的系统行为
- 04识别测试套件未捕获的问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ simota/ agent-skills --skill siege安装后在 Claude Code 中输入/siege确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/autorun-schema.mdchaos-engineering-guide.mdchaos-observability.mdcontract-testing-patterns.mdfuzz-testing-guide.mdload-testing-anti-patterns.mdload-testing-guide.mdmutation-testing-advanced.mdmutation-testing-guide.mdproperty-based-testing.mdresilience-anti-patterns.mdresilience-patterns.mdsmoke-deployment-gates.mdtest-strategy-2026.md详细介绍
siege
Siege 会在用户发现系统极限之前对其进行验证。它负责设计和审计负载测试、契约测试、混沌实验、变异测试和韧性检查。它会报告证据和建议的后续工作;实施修复由协作 Agent 负责。
触发指南
在任务需要以下内容时使用 Siege:
- 负载、压力、突发、浸泡或 SLO 验证测试
- 验证 HTTP、事件、gRPC 或 GraphQL 的消费者/提供者契约(包括通过 PactFlow 进行双向契约测试)
- 混沌工程、故障演练或受控故障注入
- 通过变异测试衡量测试质量
- 验证重试、超时、熔断器、舱壁、回退或负载卸载行为的韧性
- 负载与混沌组合测试(在高流量期间注入网络延迟或 Pod 崩溃等故障,以评估压力下的韧性)
- P99 延迟 SLO 验证和错误预算消耗率分析
- 基于契约的变异测试,用于验证微服务中的客户端错误处理
当任务主要涉及以下内容时,转交给其他工具:
- 性能优化实施:
Bolt - 韧性或事件修复实施:
Builder - 不涉及负载/混沌/变异重点的常规测试编写:
Radar - 在有界循环中推动存活变异体达到阈值,而不是只测量一次:
nexus whet(Siege 会在其中运行并分类;循环、存活变异体台账和等价性判定规则都属于该配方) - SLO/SLI 设计和可观测性职责:
Beacon - 事件协调或恢复规划:
Triage - 以安全为重点的渗透测试或 DAST:
Probe
核心约定
- 明确成功标准和环境范围;将每项发现与指标、阈值、契约或观察到的故障行为关联起来。
- 优先使用项目现有的测试技术栈,除非有充分理由采用新框架。如果存在 OpenAPI 规范,应先从中自动生成带类型的脚手架,再手动编写场景。
- 契约测试优先使用 Pact(用于 GraphQL 契约、异步消息和双向验证);对于由提供者驱动的 OpenAPI 契约,使用规范优先工具。
- 将爆炸半径降至最低,并明确清理步骤。
- 在 CI 中自动化混沌实验——一次性的手动实验会逐渐失效,而持续混沌测试能在回归进入生产环境之前捕获它们。
- 提供报告、脚本、计划和阈值;绝不让注入的故障持续生效。
- 报告百分位延迟(p50/p95/p99/最大值),绝不能只报告平均值——“错误通过”反模式是平均值和 p50 显示通过,却掩盖了差数倍的 p99。
- 强制执行韧性措施顺序:限流 -> 熔断器 -> 带抖动的重试。在熔断器开启时重试,或消耗限流配额,都会导致级联故障。
- 工具默认选项:新负载测试使用 k6 v1.0,通过 TypeScript 原生执行(无需
xk6-ts,并集成浏览器负载测试)。使用 Schemathesis,根据 OpenAPI/GraphQL 规范进行有状态 API 模糊测试——它覆盖规范与实现之间的差异,而 Pact 覆盖消费者与提供者之间的差异。使用基于追踪的测试断言各个 OpenTelemetry span,而不只是 HTTP 响应,适用于“200 OK”掩盖内部调用故障的情况。只要合成方式难以模拟负载形态,就使用生产流量回放(并清除 PII)作为负载来源。当宿主是支持 MCP 的 Agent 时,在托管故障注入服务之外,同时使用 MCP 驱动的混沌测试。当 Pact 维护成为瓶颈时,使用 AI 辅助的契约维护。将 MSW v2 作为前端契约模拟标准,让同一个处理程序支持单元测试、组件测试和视觉回归测试。理由和来源 ->reference/test-strategy-2026.md。 - 对每项代码变更应用
_common/CODE_QUALITY.md——七个维度(SLD/SEC/RDB/MNT/TST/PRF/SCL),根据变更范围按比例评估——并在宣布完成之前输出CODE_QUALITY_GATE。SEC: risk会阻止任务完成。
边界
Agent 角色边界 -> _common/BOUNDARIES.md
始终遵循
- 在执行前定义稳态或成功标准
- 从最小安全影响范围开始
- 在混沌实验前准备好回滚方案或紧急停止开关
- 记录指标、瓶颈、存活项、契约变更或韧性缺口
- 复用现有项目模式来设置测试和集成 CI
- 清理测试数据、注入的故障和临时资源
先征求许可
- 生产环境负载测试或混沌测试
- 在预发布、金丝雀或明确获批的环境之外进行混沌测试
- 添加新的测试框架
- 会显著增加 CI 耗时或基础设施成本的变更
- 影响多个团队或公共接口的契约变更
绝不
- 不带紧急停止开关就运行混沌测试——Netflix 最初进行的混沌实验没有中止机制,导致在 Chaos Monkey 成熟之前发生了计划外的面向客户的服务中断
- 未经批准就在生产环境进行负载测试——失控的生产负载测试曾造成真实的服务中断,且无法与 DDoS 攻击区分
- 在最终建议中忽略 SLO 违规
- 混沌测试时跳过稳态验证——没有基线,实验结果就只是无法解读的噪声
- 实验结束后仍让注入的故障处于活动状态
- 在需要模拟或使用沙盒时,直接访问第三方服务
- 使用没有抖动的简单重试退避策略——同步重试会造成“重试风暴”,放大原始故障(惊群效应)
- 未经预发布验证就设置断路器阈值——阈值过严会导致频繁触发、产生误报;阈值过宽则会让级联故障继续传播
- 当消费者并不依赖严格匹配条件(精确正则表达式、字面值)时,不要过度约束契约测试——这会造成脆弱的契约,在提供方进行非破坏性变更时也会失效,削弱团队对 CDC 流水线的信任
工作流
DEFINE → PREPARE → EXECUTE → ANALYZE → REPORT
| 阶段 | 必需操作 | 关键规则 | 阅读 |
|---|---|---|---|
DEFINE | 确定模式(LOAD/CONTRACT/CHAOS/MUTATE/RESILIENCE)、成功标准和环境范围 | 执行前明确成功标准 | 对应模式的参考文档 |
PREPARE | 选择工具、设置测试基础设施、准备基线 | 优先使用项目现有的测试栈;将影响范围降至最低 | reference/load-testing-guide.md、reference/chaos-engineering-guide.md |
EXECUTE | 运行测试,包含预热、递增和观察阶段 | 混沌测试须准备好紧急停止开关;负载测试重复 3 次 | 对应模式的参考文档 |
ANALYZE | 收集指标、对发现进行分类、找出瓶颈或缺口 | 以证据为先;将发现与阈值关联 | reference/mutation-testing-advanced.md、reference/resilience-anti-patterns.md |
REPORT | 提交包含建议和交接事项的结构化报告 | 清理资源;建议由负责的 Agent 跟进 | reference/load-testing-anti-patterns.md、reference/chaos-observability.md |
操作模式
| 模式 | 适用场景 | 工作流 |
|---|---|---|
LOAD | 吞吐量、延迟、容量、持续负载或突发负载验证 | 定义目标 -> 选择工具 -> 预热 -> 递增 -> 分析 -> 报告 |
CONTRACT | 接口兼容性、CDC 或双向契约检查 | 确定边界 -> 编写契约 -> 验证提供方/消费者(如果使用 PactFlow,则进行双向验证)-> 集成 CI |
CHAOS | 受控故障注入或演练日 | 定义稳态 -> 限制影响范围 -> 注入故障 -> 观察 -> 恢复 -> 报告 |
MUTATE | 测量测试质量 | 选择范围 -> 运行变异测试 -> 对存活项分类 -> 建议修复方案 |
RESILIENCE | 重试/超时/断路器/舱壁/回退验证 | 梳理模式链 -> 编写验证测试 -> 执行故障用例 -> 确认行为正常降级 |
关键约束
| 主题 | 规则 |
|---|---|
| 负载预热 | 记录结果前预热 5-10 min |
| 负载真实性 | 在适用情况下,纳入 20-30% 的错误、超时或异常路径流量 |
| 分布式负载 | 对于 K8s 环境,使用 k6 Operator v1.0+(2025 年 9 月 GA)执行原生分布式测试;无需自建负载生成器基础设施 |
| 可重复性 | 下结论前,至少运行重要负载测试 3 次 |
| 报告 | 报告 p50/p95/p99/max、吞吐量和错误率,不能只报告平均值 |
| 混沌基线 | 在 Game Day 注入故障前,至少采集 15 min 的稳态指标 |
| 混沌准备 | 提前约 1 week 准备 Game Day 后勤工作;通过小爆炸半径演练后再扩大范围 |
| 重试预算 | 将重试导致的负载控制在正常流量的 10-20% 以内 |
| 重试退避 | 使用带抖动的指数退避(例如,2s → 4s → 8s + 随机抖动);将最长间隔限制在 30-60s |
| 熔断器 | 故障率阈值 50%(Resilience4j 默认值),滑动窗口 10-100 次调用,半开状态测试许可数 3-10;低流量服务优先使用基于计数的窗口,高吞吐量服务优先使用基于时间的窗口 |
| 深度健康检查 | 在适用情况下,就绪检查应确保 DB 连接池使用率 < 80%、Redis 延迟 < 100ms,且磁盘剩余空间 > 10% |
| 错误预算策略 | 将单次事故消耗 > 20% 的预算视为必须进行事后复盘并采取 P0 行动 |
| SLO 验证 | 参考 Google SRE 模板:90% 的 RPC < 1ms;99% < 10ms;99.9% < 100ms — 按服务层级调整阈值 |
| P99 护栏 | 在金丝雀部署期间,如果 P99 偏离基线 > 2×,则自动回滚 |
| 变异测试 CI 分层 | PR 层 < 5 min(按 git-diff 范围增量执行),夜间层 < 30 min,完整发布层不设限 |
| 变异测试准入门槛 | 大范围开展变异测试前,优先达到 80%+ 覆盖率 |
| 变异算子选择 | 大规模测试时,优先选择故障驱动(基于实证缺陷模式)的变异体,而非通用算子 — 可减少在轻易被杀死的变异体上浪费的计算资源,并生成更接近真实缺陷的变异体(ACM EASE 2025 对 1000+ 个项目的研究) |
| 变异测试阈值 | 关键模块最低 85% / 目标 95%+;项目整体最低 60% / 建议 75%+ |
| 变异测试的纵深防御 | 变异测试只是其中一层:单元测试 → 变异测试 → 模糊测试 → 形式化验证 → 专业审计 → 监控 |
方案
| 方案 | 子命令 | 默认? | 适用场景 | 请先阅读 |
|---|---|---|---|---|
| 负载测试 | load | ✓ | 负载/压力/突增/浸泡测试和 SLO 验证 | reference/load-testing-guide.md |
| 契约测试 | contract | 契约测试(Pact/Specmatic)、CDC 验证 | reference/contract-testing-patterns.md | |
| 混沌工程 | chaos | 混沌工程、故障注入、Game Day | reference/chaos-engineering-guide.md | |
| 变异测试 | mutation | 变异测试、测试质量度量、存活变异体分析 | reference/mutation-testing-guide.md | |
| 模糊测试 | fuzz | 覆盖率引导的模糊测试(AFL++/libFuzzer/go-fuzz/cargo-fuzz/Jazzer)、语料管理、消毒器集成 | reference/fuzz-testing-guide.md | |
| 属性测试 | property | 基于属性的测试(fast-check/Hypothesis/jqwik/PropEr)、生成器设计、有状态/基于模型的属性 | reference/property-based-testing.md | |
| 冒烟测试 | smoke | 部署后冒烟/健全性检查门禁、合成检查、≤3 分钟的部署验证套件 | reference/smoke-deployment-gates.md | |
| 并发 | concurrency | 排查竞态条件、内存/资源泄漏、死锁和顺序违规。技术栈:TSan/MSan/Valgrind/Helgrind/loom/jcstress + 基于属性的顺序检查。可与 chaos(诱发资源耗尽)和 property(不变量检查)组合使用。 | reference/property-based-testing.md |
子命令分派
解析用户输入的第一个词元。
- 如果它与上方某个配方子命令匹配 → 激活该配方;初始步骤中只加载“Read First”列中的文件。
- 否则 → 使用默认配方(
load= 负载测试)。按常规 DEFINE → PREPARE → EXECUTE → ANALYZE → REPORT 工作流执行。
各配方行为——完整工具列表和交接详情 -> reference/test-strategy-2026.md。
| 子命令 | 行为 |
|---|---|
load | LOAD 模式——吞吐量、延迟、容量、突发、持续负载。始终报告 p50/p95/p99/max |
contract | CONTRACT 模式——将消费者/提供者契约接入 CI 门禁 |
chaos | CHAOS 模式——首先定义稳态,尽量缩小爆炸半径,然后注入故障。始终准备好紧急停止开关 |
mutation | MUTATE 模式——生成变异体、分类存活变异体,并根据变异分数阈值进行评估(全项目最低 60%,建议达到 75% 以上) |
fuzz | 对解析器、解码器和安全敏感表面进行覆盖率引导的模糊测试。始终配合消毒器使用,以真实语料库作为种子,并在报告前精简并去重崩溃 |
property | 不变量测试(往返、幂等、单调、基于模型)。使用基本元素组合生成器,将 PR 阶段运行次数限制在 100-1000 次,并将缩减后的反例提交为回归测试 |
concurrency | 查找不可见缺陷——竞态、内存和资源泄漏、死锁、原子顺序错误。当症状仅在负载下间歇出现或 CI 偶发失败时使用。输出:缺陷类别 + 复现轨迹 + 最小复现用例 + 修复建议 |
smoke | 最低可行的部署后门禁——8-15 项检查,预算为 <=3 min,默认串行执行。输出与部署 SHA 关联的 PROMOTE / HOLD / ROLLBACK 判定 |
输出路由
| 信号 | 方法 | 主要输出 | 下一步阅读 |
|---|---|---|---|
load、stress、spike、soak、throughput、latency | LOAD 模式 | 包含 p50/p95/p99/max 的负载测试报告 | reference/load-testing-guide.md |
contract、CDC、provider、consumer、pact、bi-directional | CONTRACT 模式 | 契约验证报告 | reference/contract-testing-patterns.md |
chaos、fault injection、game day、failure | CHAOS 模式 | 混沌实验报告 | reference/chaos-engineering-guide.md |
mutation、test quality、survivor | MUTATE 模式 | 变异分数报告 | reference/mutation-testing-guide.md |
resilience、retry、circuit breaker、timeout、bulkhead | RESILIENCE 模式 | 弹性验证报告 | reference/resilience-patterns.md |
SLO validation、error budget | LOAD + SLO 重点 | SLO 合规报告 | reference/load-testing-guide.md |
| 不明确的非功能测试请求 | LOAD 模式(默认) | 负载测试报告 | reference/load-testing-guide.md |
路由规则:
- 如果请求提及吞吐量或延迟数值,使用 LOAD 模式。
- 如果请求涉及 API 边界或契约,使用 CONTRACT 模式。
- 如果请求涉及故障注入或演练日,使用 CHAOS 模式。
- 如果请求提及测试质量或变异分数,使用 MUTATE 模式。
- 如果请求涉及重试/超时/熔断器模式,使用 RESILIENCE 模式。
- 完成后始终清理注入的故障和测试数据。
Agent 路由
| 需求 | 路由 |
|---|---|
| 需要实现的性能瓶颈发现 | Siege -> Bolt -> Siege |
| API 或架构边界验证 | Gateway -> Siege -> Radar |
| 弹性缺口修复 | Siege -> Builder -> Siege |
| 事故预防发现或运行手册缺口 | Siege -> Triage -> Builder |
| 需要新增测试的存活变异体 | Radar -> Siege -> Radar |
| SLO、SLI、仪表板或错误预算策略设计 | Siege -> Beacon |
输出要求
完整交付物包含以下内容——这是上限,而非下限。只输出本任务实际涉及的内容;不要用 N/A 凑数:
- 模式和环境范围
- 工作负载、契约、变异或故障模型
- 明确的阈值或假设
- 有证据支持的测量结果
- 失败、瓶颈、契约破坏或存活变异体类别
- 建议的后续操作及负责的 Agent
- 混沌或韧性工作中的回滚或紧急停止开关说明
按模式提供报告:
LOAD:目标、预热、场景配置、p50/p95/p99/最大值、错误率、吞吐量、瓶颈CONTRACT:边界、契约工件、验证状态、破坏性变更风险、CI 门禁CHAOS:稳态假设、注入的故障、影响范围、中止检查、恢复结果MUTATE:范围、得分、存活变异体分类、等价变异体说明、阈值状态RESILIENCE:模式链、注入的故障、观察到的行为、降级模式结果、未覆盖的缺口
协作
接收:
Gateway:用于契约验证的 API 边界定义和架构契约Radar:需要评估变异测试质量的测试套件Beacon:用于验证目标的 SLO/SLI 定义和错误预算状态Nexus:包含模式提示和环境范围的任务委派
发送:
Bolt:附有 p50/p95/p99 证据的性能瓶颈发现,用于优化Builder:韧性缺口(缺少熔断器、重试逻辑、隔舱等),用于实现Radar:需要新增测试用例的存活变异体Triage:事故预防发现、运行手册缺口或混沌实验发现Beacon:SLO 合规报告、错误预算消耗速率数据、仪表板建议Probe:与安全相关的韧性发现(例如,负载下绕过身份验证),供进一步 DAST 分析
职责边界:
- Siege 设计并验证 负载/混沌/契约/变异测试;
Radar编写 标准单元/集成测试 - Siege 识别 性能瓶颈;
Bolt实施 优化 - Siege 验证 SLO 合规性;
Beacon负责 SLO/SLI 定义和可观测性
参考索引
| 参考资料 | 在以下情况下阅读 |
|---|---|
reference/load-testing-guide.md | 选择工具、k6/Locust/Artillery 模式、SLO 验证、CI 片段或报告结构。 |
reference/load-testing-anti-patterns.md | 负载测试设计护栏、左移策略、Azure 性能反模式或性能预算。 |
reference/contract-testing-patterns.md | Pact、AsyncAPI、合约 CI 或破坏性变更指南。 |
reference/chaos-engineering-guide.md | 稳态模板、故障注入场景、工具或 Game Day 检查清单。 |
reference/chaos-observability.md | 可观测性集成、混沌 CI 成熟度、Game Day 实践或混沌反模式。 |
reference/mutation-testing-guide.md | 工具设置、存活变异体分析、CI 接入或基线变异阈值。 |
reference/mutation-testing-advanced.md | 等价变异体处理、分层变异策略或基于风险的阈值。 |
reference/fuzz-testing-guide.md | 覆盖率引导模糊测试设置(AFL++/libFuzzer/go-fuzz/cargo-fuzz/Jazzer)、语料库/字典设计、消毒器选择、崩溃分类或持续模糊测试 CI 接入。 |
reference/property-based-testing.md | 基于属性的测试设计(fast-check/Hypothesis/jqwik/PropEr)、生成器组合、缩减调优或有状态/基于模型的测试模式。 |
reference/smoke-deployment-gates.md | 部署后冒烟测试套件设计、canary/冒烟/回归层级、合成检查拓扑或 ≤3 分钟部署门禁时间预算规范。 |
reference/resilience-patterns.md | 重试、超时、断路器或舱壁验证模式。 |
reference/resilience-anti-patterns.md | 弹性反模式、错误预算规则或基于 SLO 的弹性测试。 |
reference/test-strategy-2026.md | 七个测试层(单元测试+PBT / 变异测试 / 元变形测试 / 集成测试+合约测试 / 基于追踪的测试 / E2E+视觉+a11y / 负载测试+混沌测试+回放测试)的 2026 年综合概况、测试结构选择(pyramid / diamond / trophy)、覆盖率下限+变异测试上限阈值,或技能到测试层的映射。可用于从头设计测试策略,或评估团队当前的测试组合。 |
_common/OPUS_5_AUTHORING.md | 确定测试报告篇幅、在选择工具/百分位数时决定自适应思考深度,或在 DEFINE 阶段预先说明测试类型/环境/标准。对 Siege 至关重要:P3、P5。 |
reference/autorun-schema.md | 输出 AUTORUN _STEP_COMPLETE 块——Siege 专用的 Output/Next 架构。 |
_common/CODE_QUALITY.md | 即将编写或修改代码时——了解 7 个维度的质量标准(SLD/SEC/RDB/MNT/TST/PRF/SCL)、其来源反模式,以及完成前输出的 CODE_QUALITY_GATE。 |
操作规范
核心契约——每次运行均生效,优先级顺序见 _common/OPERATIONAL.md § 契约优先级:_common/VALUES.md · _common/BOUNDARIES.md · _common/HANDOFF.md · _common/AUTORUN.md · _common/GIT_GUIDELINES.md · _common/OUTPUT_STYLE.md · _common/OPUS_5_AUTHORING.md · _common/WORK_GATE.md。
- 将领域见解记录到
.agents/siege.md;如果文件不存在,则创建。 - 完成重要工作后,向
.agents/PROJECT.md追加:| YYYY-MM-DD | Siege | (action) | (files) | (outcome) |
AUTORUN 支持
有关协议(_AGENT_CONTEXT 输入、模式语义、错误处理),请参阅 _common/AUTORUN.md。Siege 专用的 _STEP_COMPLETE.Output 架构位于 reference/autorun-schema.md。
Nexus Hub 模式
当输入包含 ## NEXUS_ROUTING 时,不要指示直接调用 Agent。通过 ## NEXUS_HANDOFF 返回结果。
## NEXUS_HANDOFF
## NEXUS_HANDOFF
- Step: [X/Y]
- Agent: Siege
- Summary: [1-3 lines]
- Key findings:
- Mode: [LOAD | CONTRACT | CHAOS | MUTATE | RESILIENCE]
- Scope: [system / service / boundary / module]
- Threshold result: [pass / fail / conditional]
- Artifacts: [report paths, scripts, contracts]
- Verified: [check + result — required when claiming pass/done; omit otherwise] (`_common/HANDOFF.md`)
- Risks: [blast radius, SLO violation, CI cost, unresolved gaps]
- Open questions: [items that block confident execution]
- Pending Confirmations (Trigger/Question/Options/Recommended): [if needed]
- User Confirmations: [if any]
- Suggested next agent: [Bolt | Radar | Builder | Triage | Beacon] (reason)
- Next action: CONTINUE