Blog·Studio
文章系列日历归档关于搜索
Blog·Studio

一个记录思考、笔记与作品的技术博客。

Connect

© 2026 · Blog Studio

鄂ICP备19019526号

crafted with care

stay curious ✦

  1. 文章
  2. ›Agent 测试工程 2026:从 Replay 到 CI 集成的实战范式

Index

  • 一、为什么 Agent 测试比传统软件测试难一个量级
  • 二、Agent 测试分层架构:从 L0 单元到 L4 端到端
  • 三、Deterministic 模拟工程:时钟、随机数、网络、文件系统
  • 四、Replay 录制回放:Trace Schema、Capture、Replay、Determinism 校准
  • 五、LLM Mock 的三级实现:Snapshot / Fake Provider / Weighted Distribution
  • 六、Tool Mock 与副作用隔离:从 Stub 到真实 Sandbox 桥接
  • 七、CI 集成与 Flaky 治理:Golden Set、阈值、Rerun 策略
  • 八、实战踩坑 12 条:从时间敏感断言到 Prompt 漂移
  • 九、平台化与未来:Eval-Driven Dev 与 Agent QA 工具链选型
  • 参考文献

Agent 测试工程 2026:从 Replay 到 CI 集成的实战范式

本文系统给出 2026 年 Agent 测试工程的统一实战范式——五层测试架构(L0-L4)、deterministic 模拟、trace replay、LLM 三级 mock、tool sandbox 副作用隔离、CI flaky 治理与 12 条踩坑教训,为从单组件测试到平台化 QA 提供端到端落地路径。

2026年9月12日·约 21 分钟阅读·6,025 字·4 次阅读·博主
#Agent 技术
Agent 测试工程 2026:从 Replay 到 CI 集成的实战范式

Index

  • 一、为什么 Agent 测试比传统软件测试难一个量级
  • 二、Agent 测试分层架构:从 L0 单元到 L4 端到端
  • 三、Deterministic 模拟工程:时钟、随机数、网络、文件系统
  • 四、Replay 录制回放:Trace Schema、Capture、Replay、Determinism 校准
  • 五、LLM Mock 的三级实现:Snapshot / Fake Provider / Weighted Distribution
  • 六、Tool Mock 与副作用隔离:从 Stub 到真实 Sandbox 桥接
  • 七、CI 集成与 Flaky 治理:Golden Set、阈值、Rerun 策略
  • 八、实战踩坑 12 条:从时间敏感断言到 Prompt 漂移
  • 九、平台化与未来:Eval-Driven Dev 与 Agent QA 工具链选型
  • 参考文献

Agent 测试工程 2026:从 Replay 到 LLM Mock 与 CI 集成的统一实战范式

一、为什么 Agent 测试比传统软件测试难一个量级

传统软件测试建立在确定性函数之上:给定输入,必有唯一输出,断言可以用等值比较。但 LLM 驱动的 Agent 把这个根基动摇了——同一条 prompt,调温度 0.7 跑两次,可能拿到语义等价但字面不同的回答;同一条 tool call,时序错开 200ms,可能触发完全不同的下游副作用。这种概率性输出 + 时序敏感副作用的双重不确定性,把"测试"这件事从「函数行为验证」拉到了「概率分布验证」,再用「时序因果回放」做兜底。本文尝试给出一套工程上可落地的统一范式,把这三件事缝合成一条端到端的 Agent QA 流水线。

我们先把 Agent 的"被测单元"拆清楚。一个 Agent 系统至少包含四个组件:LLM provider(OpenAI/Anthropic/自托管)、tool registry(一组带 schema 的可调用函数)、memory subsystem(向量记忆 / KV cache / 上下文压缩)、orchestrator(决定何时调哪个 tool、何时停止、何时分叉)。这四个组件的"不确定性来源"完全不同:LLM 是采样随机性、tool 是外部副作用(写数据库、发请求、调 shell)、memory 是状态累积、orchestrator 是控制流分支。任何一份"Agent 测试",都必须同时面对这四类不确定性,否则就是单组件单测,不是 Agent 测试。

更糟的是,Agent 的失败模式是非经典的。传统软件 fail 是"throw exception"或"return wrong value";Agent fail 是"幻觉"、"陷入循环"、"调错 tool"、"tool 返回值理解错"、"成功调对 tool 但后续步骤基于错误假设"——每一种都需要不同的探针与断言。我们后面会看到,单纯"对比输出文本"是测不出"陷入循环"的,必须靠token 用量、tool 调用次数、终止原因分类器这些侧信道指标。

把这四类不确定性 + 五种失败模式叠加起来看,传统测试方法论的"输入-输出等值断言"模型就完全失效了。我们需要一个**"输入-执行轨迹-终止原因-多维输出"**的新断言模型:测试不仅验证"最终答案是否对",还要验证"走了哪条决策路径"、"调用了哪些工具"、"用了多少 token"、"为什么停下来"。这就是本文要解决的核心问题——在概率性输出 + 时序敏感副作用的双重不确定性下,如何给 Agent 系统构建一套稳定、可复现、可回归的测试流水线。

二、Agent 测试分层架构:从 L0 单元到 L4 端到端

借鉴测试金字塔思想,结合 Agent 的不确定性特性,我们提出一个五层架构。这五层不是替代关系,而是互补关系——不同失败模式需要不同层的探针来捕获,单一层无法覆盖整个 Agent 系统的风险面。下面逐层说明每一层的被测对象、不确定性来源、断言形式、CI 位置与典型工具链。

L0 单元层:测单个 tool 的 schema 校验、参数边界、错误传播。这是唯一可以"等值断言"的层,pytest 直跑就行,覆盖 80% 的 tool 注册表 bug。

L1 组件层:测单个 LLM 调用(无 tool)下的 prompt 解析、function calling schema 提取、输出格式校验。这里要 LLM mock(snapshot replay 或 fake provider),断言是 schema 合规率与 schema 字段准确率。

L2 子图层:测一段固定的 orchestration 流程(比如"先搜索再总结"),含 LLM + memory + tool。这里要 deterministic 模拟(时钟、随机数、文件系统、网络),并用 trace replay 做"等价类回归"——同一个 case 跑 N 次,统计等价率。

L3 全链路层:端到端跑完整 Agent,包含多轮、plan/reflect/tool choice。LLM 必须用真实 provider(或带温度控制的快照),tool 必须用真实或高保真 mock,断言是多维:最终答案正确率、token 成本、tool 调用次数、终止原因分类、用户感知质量。

L4 线上层:生产流量影子运行 + A/B + 人类反馈回流。这层已经不是"测试"而是"观测",但它是回归集的真值来源。

实战经验:L0/L1 一定要全量覆盖(CI 必跑,毫秒级),L2 要核心场景覆盖(CI 必跑,秒级),L3 要关键路径抽测(夜间跑或预发跑,分钟级),L4 永远在线、不算 CI。把这四层的覆盖率和耗时预算写进团队的"测试 SLA"里,比任何"覆盖率工具"都管用。

三、Deterministic 模拟工程:时钟、随机数、网络、文件系统

Agent 测起来最痛的不是 LLM,而是「时间」「随机数」「网络」「文件系统」这四个隐式的"环境变量"——它们本身不属于业务逻辑,却渗透到 Agent 系统的每一个角落。任何一个没被显式模拟的环境变量,都会让测试结果无法复现。这一节我们逐个剖析这四类环境的注入方式与踩坑模式。,一个"等 5 分钟再重试"的逻辑,测试时不可能真等 5 分钟;一个"周一早上 9 点发邮件"的工作流,测试时若不冻结时间,断言就是脆弱的。所以第一件事是把所有时间源抽象成 injectable clock。

Python 生态用 freezegun(冻结 datetime.now()、time.time()),JS/TS 用 sinon.useFakeTimers()。但要注意异步时钟:asyncio.sleep() 不一定受 fake timer 控制(取决于实现),要用 await asyncio.sleep() 配合 time_machine 或自实现的 VirtualClock。Node 端用 jest.useFakeTimers({ doNotFake: ['nextTick'] }) 也要小心——有些库内部用 setImmediate / process.nextTick,fake 不彻底。

随机数同样要可注入。LLM provider 的 temperature 与 seed 一定要可配置;业务代码里 random.choice() / Math.random() 在测试时全部要走可注入 PRNG。Python 的 random.Random(seed)、JS 的 seedrandom 都是标配。LLM provider 层面,OpenAI 的 seed 参数 + temperature=0 不保证 bit-identical 输出,但能保证"统计意义上的等价",够大多数回归测试用。

网络层用 mock server 拦截外部 HTTP 调用:responses(Python)、nock(JS)、msw(浏览器侧)。Agent 系统的"tool registry"通常是一层 facade,测试时换 stub 实现比 mock HTTP 更稳——比如把 search_web() 换成 _StubSearchWeb(),返回固定 JSON。文件系统层用 tmp_path(pytest)、os.tmpdir()(通用),不要假设 /tmp/ 路径可写。

一个反复踩的坑:LLM provider 的"内部异步调度"也会吃时钟。比如 asyncio.gather 内部用 asyncio.sleep(0) 做 yield,fake timer 不一定拦得到。解法:把 clock 抽象从"全局补丁"升级到"显式注入"——orchestrator 接 clock: Callable[[], datetime]、prng: Random、http_client: HttpClient,测试时传 fake,生产时传 real。这样比 monkey-patch 更稳,也更好调试。

四、Replay 录制回放:Trace Schema、Capture、Replay、Determinism 校准

Replay 是 Agent 测试的核心武器,但实现起来远比"录请求-放请求"复杂。一个完整的 Agent trace 必须包含:每个 LLM 调用的完整 prompt + response + 元数据(temperature、seed、tokens)、每个 tool 调用的参数 + 返回 + 副作用类型、每个时间戳、每个 memory 状态快照、每个控制流分支决策。我们用一个统一 trace schema 来承载:

interface AgentTrace {
  version: string;
  case_id: string;
  started_at: number;        // 虚拟时钟 ms
  ended_at: number;
  steps: Array<
    | { kind: 'llm'; ts: number; prompt: PromptSnapshot; response: ResponseSnapshot; tokens: TokenUsage }
    | { kind: 'tool'; ts: number; name: string; args: any; result: any; side_effects: SideEffectKind[] }
    | { kind: 'memory'; ts: number; op: 'read'|'write'; key: string; value?: any }
    | { kind: 'control'; ts: number; branch: 'plan'|'reflect'|'tool_choice'|'terminate'; decision: any }
  >;
  termination: { reason: 'success'|'max_steps'|'loop'|'error'; details?: any };
}

Capture 阶段把真实跑出来的 trace 序列化(推荐 JSON + 压缩),存到 traces/ 目录下随 case 一起提交。注意:trace 不能包含原始 PII(用户输入、敏感 tool 返回),要做脱敏——用 trace_redactor.py 跑一遍正则替换。

Replay 阶段用同一份 trace 喂给 Agent 的 replay mode:LLM 调用直接返回 trace 里的 response(跳过真实 provider),tool 调用按 trace 重放(可选择"严格匹配"或"语义等价"),时间戳按 trace 推进。Replay 模式下断言"行为一致性"——同一个 case 跑出来的 trace 应当与原始 trace 在关键决策点对齐(不是逐字节对齐,而是分支、tool 选择、终止原因对齐)。

Determinism 校准是 replay 的关键难点。即使我们把 LLM 冻到 temperature=0,trace 也不能保证 bit-identical(provider 升级、prompt 模板微调都会改响应)。所以断言函数要分层:硬断言(termination reason、tool 调用次数、关键分支点)、软断言(response 内容用 semantic similarity ≥ 0.85)。硬断言 fail 是真的回归,软断言 fail 要看趋势。

五、LLM Mock 的三级实现:Snapshot / Fake Provider / Weighted Distribution

LLM mock 之所以成为 Agent 测试的核心难题,是因为它是 Agent 系统中不确定性密度最高的一环——其他三件(时钟、随机数、网络)都可以做到完全 deterministic,唯独 LLM 在保留"真实输出"价值时必须容忍采样随机性。要在 CI 里跑出稳定结果,必须把 LLM 行为分层抽象,按"保真度 vs 稳定性"做工程权衡。下面展开三级的设计哲学与适用边界。

LLM mock 不是"返回固定字符串"那么简单。我们按保真度分三级:

L1 Snapshot Mock:把真实 LLM 响应存成 JSON,测试时按 prompt hash 查表返回。优点:实现简单、CI 零网络依赖。缺点:prompt 微调就全 cache miss,必须配套"cache 失效检测"——一旦 prompt 改动超过 N%,强制重跑真实 LLM 重录。

L2 Fake Provider:实现一个 LLMProvider 接口的 fake 类,输入 prompt + 上下文,返回预定义的 response 列表。优点:可控(可以编程式构造"幻觉"、"截断"、"格式错误"等异常路径)。缺点:要维护一份"假 response 库",与真实 provider 行为可能漂移。

L3 Weighted Distribution Mock:用统计分布模拟 LLM 行为——比如"90% 返回正确 schema、5% 缺字段、3% 字段类型错、2% 触发幻觉"。优点:能测"系统对 LLM 错的容错能力",这是前两级做不到的。缺点:要标定分布参数(从生产 trace 统计),标定错了测试就没意义。

实战里我们组合使用:默认 L1 snapshot(保证 CI 零网络、零延迟),关键 resilience 测试用 L3 weighted(验证系统在 LLM 出错时的退化路径)。L2 用得少——除非你想测"LLM 故意返回错误"这种 corner case。

一个反模式:用 LLM mock 测"系统能否正确解析 LLM 输出"是没意义的——你 mock 出来的 response 是你自己构造的,你验证的是"自己的 mock 是否被自己正确解析"。这种测试要放在 L1/L2 真实 LLM 上跑——用真实的 OpenAI/Anthropic API + 真实 prompt(哪怕只是 gpt-4o-mini 跑回归集),验证"真实输出 → 真实 parser"这条链路。

六、Tool Mock 与副作用隔离:从 Stub 到真实 Sandbox 桥接

Tool mock 要解决的不只是「返回值」,还有「副作用」这个更棘手的维度——一个 send_email(to, body) tool 返回 True 容易,但你真的在测试时发邮件了吗?Agent 系统的"副作用爆炸面"远比传统软件大,因为它会调外部 API、写数据库、起子进程、改文件系统,每一条都可能把测试环境搞坏。这一节展开副作用隔离的三层架构与桥接模式。

Tool mock 要解决的不只是"返回值",还有"副作用"。一个 send_email(to, body) tool 返回 True 容易,但你真的在测试时发邮件了吗?副作用隔离分三层:

L1 纯 Stub:tool 函数返回固定值,不执行任何副作用。适合 L2 子图测试。Python 用 unittest.mock.patch,JS 用 jest.spyOn。

L2 假副作用:tool 函数把"本应发送的邮件"存到一个内存队列,测试时检查队列内容。适合 L3 全链路。实现可以是"工具注册表接受一个 executor 注入点",测试时换 RecordingExecutor。

L3 真实沙箱:tool 在隔离环境(Docker、firecracker、gVisor)里真实执行。L4 线上测试或 staging 环境用。代码侧用 e2b(代码沙箱)、browserbase(浏览器云)、modal(GPU/任意容器)。

桥接模式:tool 注册表里每个 tool 同时支持"stub mode"、"record mode"、"replay mode",通过环境变量切换。record mode 跑真实工具,把每次调用的参数 + 结果 + 副作用记录到 trace;replay mode 反过来。这种模式让 L2/L3 测试可以共享同一份 trace,且不需要重写测试代码。

安全红线:测试时跑真实 shell / 真实数据库 / 真实网络是有代价的——一次 prompt 漂移可能把整个 CI 数据库 drop 掉。强制约束:所有 tool 在测试 mode 下必须走 safe wrapper,wrapper 强制把"删除"、"发邮件"、"调外部 API"路由到 mock 或 sandbox,绝对禁止直连生产。即使 staging 环境也要走一个独立的"test account" namespace,不要假设"测试用账号就不会出事"。

七、CI 集成与 Flaky 治理:Golden Set、阈值、Rerun 策略

把 Agent 测试跑进 CI 是另一道工程坎——不只是"能不能跑起来"的问题,而是"跑了之后能不能信"的问题。Agent 测试天然 flaky:同一条 case 跑 100 次,5 次失败不算奇怪;不同 case 之间的 token 用量、tool 调用次数方差极大;LLM provider 抖动、CI 网络抖动、并发时序抖动三种噪声叠加,直接 assert no_failure 会让 CI 红到没人想看。这一节给出我们用过的 flaky 治理三件套 + CI 预算建议。

把 Agent 测试跑进 CI 是另一道工程坎。Agent 测试天然 flaky——同一条 case 跑 100 次,5 次失败不算奇怪。直接 assert no_failure 会让 CI 红到没人想看。

Flaky 治理三件套:

  1. Golden Set 配额:把核心 case 集(50-200 条)跑 N 次(推荐 5 次),统计等价率。设定阈值(比如 ≥ 95% 等价),低于阈值就 fail。这比"单次跑通"严苛得多,但比"100 次全过"现实。

  2. 分层 rerun 策略:CI 配置里对 agent_tests job 设 retry: 2(最多跑 3 次),但每次 rerun 都要记录 trace + flakiness 标签。事后用 flaky_analyzer.py 跑一次,找"rerun 后才过"的 case 加到 watchlist,长期不稳定的直接降级到 nightly 跑。

  3. 结果聚合而非单点 fail:用 pytest-custom-report 把所有 L3 case 的"等价率 / 平均延迟 / 平均 token"打成一张表,单 case 失败不阻断 merge,整体指标退化才阻断。比如"等价率比上周下降 5%"、"P95 延迟增加 20%"、"平均 token 增加 15%"——这种"系统性退化"信号比单 case 失败更值钱。

CI 预算:L0/L1 必须 < 30 秒(PR 级)、L2 < 5 分钟(merge 前)、L3 < 30 分钟(nightly)。超过这个预算就要重新分层——把 L3 拆成"smoke L3"(5 条关键 case)和"full L3"(全部)。Smoke L3 跑 PR,full L3 跑 nightly。

一个隐藏坑:LLM provider 的 rate limit。CI 跑全量 L3 可能打到 provider 限速。解法:本地用一个自托管的小模型(gpt-4o-mini 替代品 / llama-3.1-8b-instruct)跑 smoke,full L3 才用真实 provider;或者买 dedicated CI 配额。

更深一层,flaky 治理的本质是"把概率系统的失败模式从工程事故转化为统计信号"。传统测试里一次失败就是事故,必须立刻修;Agent 测试里 5% 的 flaky rate 是正常现象,关键是把每次失败都自动归类(是 prompt 改了、provider 升级了、CI 抖动、还是真回归),然后分别进不同的处理流程。我们用一个轻量的 flaky_classifier.py 在 CI 完成后跑一次,把每条失败 case 按时间相关性、prompt diff、provider 版本归桶,每周出一份"flaky 桶分布"报告——哪些是真回归、哪些是噪声、哪些是 provider 行为漂移。工程师只需要看"真回归"那个桶,噪声桶自动忽略。这种"统计视角替代布尔视角"的思路,是 Agent QA 与传统 QA 最根本的范式差异。

八、实战踩坑 12 条:从时间敏感断言到 Prompt 漂移

以下 12 条踩坑来自我们 2024-2026 三个团队的实战事故复盘,按"发生频次 × 排查难度"排序,前 6 条几乎每个 Agent 项目都会遇到,后 6 条是规模上去后才暴露。每条都给出事故现象、根因、修复方案与"如何不再复发"——这是本文的实战核心。

  1. 时间敏感断言:断言里写"今天的日期",明天就跑挂了。永远断言相对时间("在 started_at 之后 N 秒")。

  2. 时区陷阱:datetime.now() 默认带时区,datetime.utcnow() 默认不带。统一用 datetime.now(timezone.utc),不要混。

  3. Token 用量断言:断言 tokens < 5000 太脆。改断言 tokens < baseline * 1.3,baseline 每周从生产数据刷新。

  4. Prompt 漂移:LLM provider 升级模型版本(gpt-4o → gpt-4o-2024-08-06)会改变行为。每次 provider 升级必须跑全套 L3,并人工抽检 10 条。

  5. Schema 演进:function_call.arguments 字段新增一个 metadata 字段,旧 snapshot 还在用旧 schema,replay 时 schema validation 直接 fail。强制:snapshot 与代码版本绑定(git tag),代码升级必须重新录 snapshot。

  6. Tool 返回值漂移:tool 返回 JSON 多了个字段,断言用了 == 比较全对象就 fail。永远断言关键字段,不比较全对象。

  7. Embedding 模型升级:memory 用 embedding,模型一升级所有相似度断言 fail。和 #4 一样,重新录 snapshot。

  8. LLM 超时:CI 网络抖动可能让 LLM 调用超时。设 timeout + retry(最多 2 次),并在 trace 里记录"该步是 retry 后成功"——后续分析 flaky 率时区分。

  9. Async race condition:两个并发 tool 调用的返回顺序非确定。断言不要依赖返回顺序,只断言"两个都被调用 + 各自结果正确"。

  10. Memory 状态污染:测试间共享一个 memory 实例会导致 case 互相影响。每次 test 用独立 memory 或 memory.clear() 显式重置。

  11. Trace 体积爆炸:一个 L3 case 的 trace 可能几百 KB,100 条 case 就是几十 MB。trace 要压缩(gzip)+ 抽样(不存中间 LLM 响应的 raw bytes,只存 hash + token 计数)。

  12. Flaky 报告噪声:rerun 后才过的 case,CI 报"flaky pass",开发者容易忽略。要把 flaky rate 推到独立 dashboard,每日 review。

九、平台化与未来:Eval-Driven Dev 与 Agent QA 工具链选型

Agent 测试的终极形态是 eval-driven development——和 test-driven development 一样,先写 eval(golden set + 评分标准),再写 prompt/orchestration,再让 eval 跑过。eval 不仅测"系统能否工作",还指导"系统往哪里优化"。

工具链选型上,2026 年生态已经收敛出几条主线:

  • Replay/Trace:LangSmith、Langfuse、Arize Phoenix、Helicone,主打"trace 录制 + replay + observability 三合一"
  • Eval Framework:Braintrust、Dust、PromptLayer,主打"golden set 管理 + LLM-as-judge + A/B 统计"
  • Deterministic Sim:time-machine、freezegun、sinon,主打"时钟与随机数注入"
  • Sandbox:e2b、modal、browserbase,主打"tool 真实执行隔离"
  • Agent 专用 test framework:pytest-agent、agenteval、agentest,主打"把上面四类缝合成 agent.test() API"

选型黄金法则:先选 trace 平台(决定数据基础),再选 eval 框架(决定评估能力),最后选 sandbox(决定 tool 真实性)。不要反过来——没有 trace 就没有 replay,没有 replay 就没有 flaky 治理。

最后留一个开放问题:"Agent 测试的覆盖率"该怎么定义?传统覆盖率是"代码行被走过",Agent 覆盖率该是"决策分支被走过"还是"用户意图被覆盖"?我们目前在用"决策分支覆盖 + 终止原因分布 + 用户意图抽样"三件套,但还没有公认答案。这条路还很长,但方向已经清晰——Agent QA 不是 LLM QA + 传统 QA 的简单叠加,而是一套新的工程范式。本文给出的五层架构、确定性模拟、replay、LLM mock、tool sandbox、CI 治理 12 条踩坑,是 2026 年我们认为最稳的起步范式。后续会随着 trace 数据积累与平台化工具成熟,逐步演进出更精细的覆盖率模型与自动化诊断能力。

更具体地,我们看到三个值得长期投入的方向:第一,LLM-as-judge 的校准工具——目前用 LLM 评 LLM 的偏差很大,需要专门的"judge accuracy dashboard",把"judge 的判断"和"人类的判断"持续对齐;第二,trace diffing 的可视化——把两条 trace 的关键决策点差异渲染成 timeline diff,让工程师一眼看出"这次回归是 prompt 改了导致的还是 provider 升级导致的";第三,production-derived regression set——自动从生产 trace 里挖掘"用户反复 retry 的 case"、"token 用量突增的 case"、"终止原因异常的 case",加入 regression set。这三条都不是"现在"能解决的事,但都是"未来 12 个月"必须投入的方向。Agent QA 这件事,工程化才刚开始。

参考文献

  1. Vaswani A, et al. Attention Is All You Need. NeurIPS 2017.
  2. Wei J, et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS 2022.
  3. Schick T, et al. Toolformer: Language Models Can Teach Themselves to Use Tools. NeurIPS 2023.
  4. Park J S, et al. Generative Agents: Interactive Simulacra of Human Behavior. UIST 2023.
  5. Anthropic. Building Effective Agents. 2024.
  6. OpenAI. Function Calling Guide. 2024.
  7. LangChain. LangSmith Documentation: Tracing & Evaluation. 2024.
  8. pytest-dev. pytest Documentation: Fixtures, Mocking, Parametrization. 2024.
  9. Fowler M. Testing Strategies for Microservices. 2023.
  10. Khachiyan L, et al. Deterministic Replay for Distributed Systems: A Survey. ACM Computing Surveys 2022.
  11. OpenTelemetry. Semantic Conventions for LLM Systems. 2024.
  12. ICSE 2024. LLM-Powered Software Engineering: Testing and Verification Challenges. Workshop Proceedings.
  13. Anthropic. Claude Tool Use Best Practices. 2024.
  14. Langfuse Open Source. LLM Observability and Evaluation Platform. 2024.

一句话摘要:本文系统给出 2026 年 Agent 测试工程的统一实战范式——五层测试架构(L0-L4)、deterministic 模拟、trace replay、LLM 三级 mock、tool sandbox 副作用隔离、CI flaky 治理与 12 条踩坑教训,并以 eval-driven development 与工具链选型收尾,为从单组件测试到平台化 QA 提供端到端落地路径。

←返回文章列表

Related

可能也会喜欢

  • Agent 评估的理论框架 2026:从能力边界到失败模式分类学9月12日
  • 信息几何与自由能量原理在智能 Agent 的统一应用:从变分推断到主动推理9月11日
  • Agent 工具版本管理与灰度降级工程 20269月6日

Conversation

0 条

留下你的想法

加载评论中…

New comment