<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Preview | VISTA Research Group</title><link>https://vista-research-group.pages.dev/categories/preview/</link><atom:link href="https://vista-research-group.pages.dev/categories/preview/index.xml" rel="self" type="application/rss+xml"/><description>Preview</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en</language><lastBuildDate>Thu, 11 Jun 2026 00:00:00 +0000</lastBuildDate><image><url>https://vista-research-group.pages.dev/media/icon_hu_831f3df7c45fd3fa.png</url><title>Preview</title><link>https://vista-research-group.pages.dev/categories/preview/</link></image><item><title>用 Agent Skill 重构网页应用测试</title><link>https://vista-research-group.pages.dev/post/%E7%94%A8-agent-skill-%E9%87%8D%E6%9E%84%E7%BD%91%E9%A1%B5%E5%BA%94%E7%94%A8%E6%B5%8B%E8%AF%95/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>https://vista-research-group.pages.dev/post/%E7%94%A8-agent-skill-%E9%87%8D%E6%9E%84%E7%BD%91%E9%A1%B5%E5%BA%94%E7%94%A8%E6%B5%8B%E8%AF%95/</guid><description>&lt;p>如果说过去的自动化测试更像“写好脚本，然后让机器重复执行”，那么这个仓库展示的是另一种思路：让 AI Agent 先像真实用户一样进入浏览器、观察界面、操作产品、读取后端响应与日志，再把值得长期回归的流程沉淀成可复跑脚本。&lt;/p>
&lt;p>仓库地址：
&lt;/p>
&lt;h2 id="1-这个仓库是什么">1. 这个仓库是什么？&lt;/h2>
&lt;p>&lt;code>Mencius2023/skills&lt;/code> 是一个个人维护的 Claude Code / Agent Skills 集合。当前仓库的核心内容是一个名为 &lt;code>web-app-test&lt;/code> 的 skill，用于网页应用自动化测试。&lt;/p>
&lt;p>它的目标不是简单提供几个 Playwright 脚本模板，而是定义一套面向 AI Agent 的测试工作流：&lt;/p>
&lt;ul>
&lt;li>用 Playwright 驱动真实浏览器；&lt;/li>
&lt;li>模拟真实用户在前端界面中的操作；&lt;/li>
&lt;li>连接真实后端，不做 mock；&lt;/li>
&lt;li>同时检查 API 返回、HTTP 状态码、后端日志和页面截图；&lt;/li>
&lt;li>对值得长期回归的流程，动态沉淀为 Playwright spec；&lt;/li>
&lt;li>每轮测试结束后输出 Markdown 测试报告。&lt;/li>
&lt;/ul>
&lt;p>这使它更像一个“测试方法论 + 脚手架 + Agent 执行规范”的组合，而不只是一个代码模板仓库。&lt;/p>
&lt;h2 id="2-仓库结构概览">2. 仓库结构概览&lt;/h2>
&lt;p>仓库结构很简洁：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>skills/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── web-app-test/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── SKILL.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── templates/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── README.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── TEST_SPECIFICATION.template.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── run_regression.template.py
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── playwright.config.template.js
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── standard-flow.spec.template.js
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中最重要的文件有三类：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>文件&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>README.md&lt;/code>&lt;/td>
&lt;td>仓库入口，说明 skill 列表、安装方式和结构约定&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>skills/web-app-test/SKILL.md&lt;/code>&lt;/td>
&lt;td>核心规范，定义网页应用测试的执行原则、分层策略、动态浏览器测试方法、报告格式等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>templates/&lt;/code>&lt;/td>
&lt;td>新项目接入时使用的通用脚手架，落地后生成项目专属的测试规格书、回归运行器和 Playwright 配置&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>这个设计有一个非常重要的边界：&lt;strong>skill 本体是通用资产，项目测试文件是项目专属资产&lt;/strong>。也就是说，&lt;code>SKILL.md&lt;/code> 和 &lt;code>templates/&lt;/code> 留在 skill 仓库中，而某个具体项目的 &lt;code>TEST_SPECIFICATION.md&lt;/code>、测试脚本、操作指南等应该落到该项目根目录下的 &lt;code>web-app-test/&lt;/code> 中，并跟随项目自己的 Git 仓库维护。&lt;/p>
&lt;h2 id="3-web-app-test-的核心定位">3. web-app-test 的核心定位&lt;/h2>
&lt;p>&lt;code>web-app-test&lt;/code> 面向的是网页应用质量验证场景。只要用户提出“测网页”“测前端”“浏览器测试”“Playwright”“E2E”“端到端测试”“跑测试”“回归测试”“CI”“提交前检查”等需求，或者改动了前后端代码后想确认功能没有回归，就可以使用这个 skill。&lt;/p>
&lt;p>它尤其强调两点：&lt;/p>
&lt;p>第一，浏览器测试要连接真实后端。&lt;br>
测试不是拦截请求、伪造数据、只看页面状态，而是尽可能贴近真实用户路径，验证前后端真实集成行为。&lt;/p>
&lt;p>第二，AI 不是只执行脚本，而是参与判断。&lt;br>
Agent 在浏览器中截图观察页面，用视觉能力判断 UI 是否符合用户预期，同时结合 API 响应和后端日志确认逻辑路径是否正确。&lt;/p>
&lt;p>这和传统 E2E 测试的区别很明显：传统测试通常依赖预先写好的选择器和断言；这个 skill 则把 AI 的现场观察能力纳入测试闭环，用动态执行来抵抗前端界面频繁变化带来的脚本脆弱性。&lt;/p>
&lt;h2 id="4-测试分为两大类">4. 测试分为两大类&lt;/h2>
&lt;p>&lt;code>SKILL.md&lt;/code> 中最关键的设计，是把测试分成两类，并明确两类脚本采用相反的设计策略。&lt;/p>
&lt;h3 id="41-程序测试脚本必须预先设计">4.1 程序测试脚本：必须预先设计&lt;/h3>
&lt;p>这类测试不涉及浏览器，主要直接调用后端模块、API 或构建命令，验证数据层、配置层、核心逻辑、API 契约、前端构建等。&lt;/p>
&lt;p>它们是整个测试体系的“稳定底座”，应该在项目接入时就设计好，并且覆盖主要功能：&lt;/p>
&lt;ul>
&lt;li>L0：冒烟测试与基础依赖检查；&lt;/li>
&lt;li>L1：前端单元测试；&lt;/li>
&lt;li>L2：后端核心功能测试；&lt;/li>
&lt;li>L3：前端构建与静态检查；&lt;/li>
&lt;li>L5 或等价层级：真实 API 集成测试。&lt;/li>
&lt;/ul>
&lt;p>这类测试适合无人值守、批量复跑，也适合 CI。规格书里如果写了用例，却没有对应脚本或可直接运行命令，就会被视为未完成。&lt;/p>
&lt;h3 id="42-浏览器模拟用户操作不预先写满动态沉淀">4.2 浏览器模拟用户操作：不预先写满，动态沉淀&lt;/h3>
&lt;p>另一类测试是浏览器 E2E。它使用 Playwright 驱动真实浏览器，模拟用户完整操作流程，并连接真实后端。&lt;/p>
&lt;p>但仓库并不主张一开始就把所有浏览器流程都写成 Playwright 脚本。原因很实际：前端页面变化快，选择器、布局、弹窗、流程都可能变，提前写满脚本会带来高维护成本。&lt;/p>
&lt;p>因此，&lt;code>web-app-test&lt;/code> 的策略是：&lt;/p>
&lt;ol>
&lt;li>默认由 AI 动态接入浏览器；&lt;/li>
&lt;li>AI 根据页面截图、源码和用户指南现场判断下一步操作；&lt;/li>
&lt;li>每个关键步骤后截图并检查 API / 日志；&lt;/li>
&lt;li>功能测完后再判断：这条测试以后是否需要回归？&lt;/li>
&lt;li>如果值得长期回归，再沉淀为 Playwright spec；&lt;/li>
&lt;li>如果流程细节容易变，但操作路径有参考价值，则沉淀为操作手册，例如 &lt;code>L4_OPERATION_GUIDE.md&lt;/code>。&lt;/li>
&lt;/ol>
&lt;p>这是一种“先探索，再固化”的测试资产治理方式。&lt;/p>
&lt;h2 id="5-一条完整测试链路是怎样的">5. 一条完整测试链路是怎样的？&lt;/h2>
&lt;p>按照 skill 的设计，AI 执行浏览器测试时不是简单点击页面，而是进行一个循环：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>观察页面截图
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>理解当前 UI 状态
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>决定下一步用户操作
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>通过 Playwright CLI 执行操作
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>检查 API 响应 / HTTP 状态码
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>读取后端日志
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>再次截图并用视觉能力判断 UI 是否正确
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ↓
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>记录产物与结论
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个流程有两个验证维度：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>验证方式&lt;/th>
&lt;th>关注点&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>API 返回值 + 后端日志&lt;/td>
&lt;td>请求是否成功、数据结构是否符合预期、后端路径是否正确执行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>截图 + 视觉判断&lt;/td>
&lt;td>页面布局、面板状态、主题色、弹窗、画布、生成结果等用户可见体验是否正常&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>这非常适合测试现代 Web 应用，尤其是那些“接口返回成功但页面实际表现不对”的场景。&lt;/p>
&lt;h2 id="6-测试资产如何落地到项目">6. 测试资产如何落地到项目？&lt;/h2>
&lt;p>仓库要求具体项目中维护自己的 &lt;code>web-app-test/&lt;/code> 目录：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>&amp;lt;被测项目根&amp;gt;/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── web-app-test/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── TEST_SPECIFICATION.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── L4_OPERATION_GUIDE.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── &amp;lt;其他分支文档&amp;gt;.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── scripts/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── run_regression.py
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── playwright.config.js
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── &amp;lt;flow&amp;gt;.spec.js
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中：&lt;/p>
&lt;ul>
&lt;li>&lt;code>TEST_SPECIFICATION.md&lt;/code> 是测试规格书，也是所有脚本的唯一索引；&lt;/li>
&lt;li>&lt;code>scripts/&lt;/code> 下的每个脚本都必须登记到规格书附录；&lt;/li>
&lt;li>不允许出现“孤儿脚本”，即存在于 &lt;code>scripts/&lt;/code> 但在规格书里找不到的脚本；&lt;/li>
&lt;li>&lt;code>L4_OPERATION_GUIDE.md&lt;/code> 等分支文档用于记录浏览器 UI 操作细节，避免主文档过长。&lt;/li>
&lt;/ul>
&lt;p>这个约定解决了一个常见问题：测试脚本散落在项目各处，时间一久没人知道哪些脚本还能跑、覆盖了哪些功能、失败后该如何复现。这里通过规格书统一索引，把测试资产纳入项目治理。&lt;/p>
&lt;h2 id="7-新项目接入流程">7. 新项目接入流程&lt;/h2>
&lt;p>当一个项目还没有 &lt;code>web-app-test/&lt;/code>，或者已有内容明显来自其他项目时，就需要执行新项目落地流程。&lt;/p>
&lt;p>大致步骤如下：&lt;/p>
&lt;ol>
&lt;li>在被测项目根目录创建 &lt;code>web-app-test/&lt;/code> 和 &lt;code>web-app-test/scripts/&lt;/code>；&lt;/li>
&lt;li>阅读当前项目的前端源码、后端源码、API 文档和用户指南；&lt;/li>
&lt;li>从 skill 的 &lt;code>templates/&lt;/code> 中复制模板；&lt;/li>
&lt;li>把模板中的 &lt;code>&amp;lt;产品名&amp;gt;&lt;/code>、&lt;code>&amp;lt;前端目录&amp;gt;&lt;/code>、&lt;code>&amp;lt;后端端口&amp;gt;&lt;/code>、&lt;code>&amp;lt;前端健康检查&amp;gt;&lt;/code> 等占位符替换成项目真实值；&lt;/li>
&lt;li>删除不适用的层级或用例；&lt;/li>
&lt;li>补齐程序测试脚本和可执行命令；&lt;/li>
&lt;li>将 &lt;code>web-app-test/&lt;/code> 纳入项目自己的版本控制。&lt;/li>
&lt;/ol>
&lt;p>模板映射关系如下：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>skill 模板&lt;/th>
&lt;th>落地到项目中&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>templates/TEST_SPECIFICATION.template.md&lt;/code>&lt;/td>
&lt;td>&lt;code>web-app-test/TEST_SPECIFICATION.md&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>templates/run_regression.template.py&lt;/code>&lt;/td>
&lt;td>&lt;code>web-app-test/scripts/run_regression.py&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>templates/playwright.config.template.js&lt;/code>&lt;/td>
&lt;td>&lt;code>web-app-test/scripts/playwright.config.js&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>templates/standard-flow.spec.template.js&lt;/code>&lt;/td>
&lt;td>&lt;code>web-app-test/scripts/&amp;lt;flow&amp;gt;.spec.js&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="8-模板目录提供了什么">8. 模板目录提供了什么？&lt;/h2>
&lt;p>&lt;code>templates/&lt;/code> 是这个仓库的可复用脚手架。&lt;/p>
&lt;h3 id="81-test_specificationtemplatemd">8.1 &lt;code>TEST_SPECIFICATION.template.md&lt;/code>&lt;/h3>
&lt;p>这是测试规格书模板。它按测试层级组织：&lt;/p>
&lt;ul>
&lt;li>L0 冒烟测试；&lt;/li>
&lt;li>L1 前端单元测试；&lt;/li>
&lt;li>L2 后端核心功能测试；&lt;/li>
&lt;li>L3 前端构建与静态检查；&lt;/li>
&lt;li>L4 浏览器 E2E 测试。&lt;/li>
&lt;/ul>
&lt;p>L4 又进一步区分：&lt;/p>
&lt;ul>
&lt;li>API 契约：纯 HTTP 请求，预先设计，适合批量复跑；&lt;/li>
&lt;li>浏览器流程：默认由 AI 动态操作，测完后按需沉淀。&lt;/li>
&lt;/ul>
&lt;p>规格书还包含若干附录，例如：&lt;/p>
&lt;ul>
&lt;li>&lt;code>data-testid&lt;/code> 选择器契约；&lt;/li>
&lt;li>fixture 数据；&lt;/li>
&lt;li>浏览器测试环境配置；&lt;/li>
&lt;li>脚本清单。&lt;/li>
&lt;/ul>
&lt;p>这让测试文档不只是说明文档，而是测试执行入口、脚本索引和环境手册。&lt;/p>
&lt;h3 id="82-run_regressiontemplatepy">8.2 &lt;code>run_regression.template.py&lt;/code>&lt;/h3>
&lt;p>这是非交互式回归运行器，也是 CI 的首选入口。&lt;/p>
&lt;p>它按测试金字塔从 L0 到 L4 逐层执行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>L0 冒烟 + 数据完整性
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>L1 前端单元测试
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>L2 配置回归 + 离线核心功能
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>L3 前端生产构建
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>L4 浏览器 E2E
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>运行器采用 fail-fast 策略：某一层失败后立即中断并返回退出码。这适合 CI 节省资源。但 skill 同时强调，AI 手动执行测试时不应被 fail-fast 限制，应尽量跑完更多用例，一次性收集完整问题。&lt;/p>
&lt;h3 id="83-playwrightconfigtemplatejs">8.3 &lt;code>playwright.config.template.js&lt;/code>&lt;/h3>
&lt;p>这是 Playwright 配置模板，包含：&lt;/p>
&lt;ul>
&lt;li>&lt;code>baseURL&lt;/code>；&lt;/li>
&lt;li>Chromium 项目；&lt;/li>
&lt;li>viewport；&lt;/li>
&lt;li>screenshot 策略；&lt;/li>
&lt;li>trace 策略；&lt;/li>
&lt;li>HTML 报告目录；&lt;/li>
&lt;li>webServer 自动拉起；&lt;/li>
&lt;li>是否复用已有前端服务。&lt;/li>
&lt;/ul>
&lt;p>它把浏览器测试运行环境规范化，避免每个项目重复配置。&lt;/p>
&lt;h3 id="84-standard-flowspectemplatejs">8.4 &lt;code>standard-flow.spec.template.js&lt;/code>&lt;/h3>
&lt;p>这是 API 契约与浏览器流程的 spec 骨架。&lt;/p>
&lt;p>它把一个 Playwright spec 分成两部分：&lt;/p>
&lt;ol>
&lt;li>API 契约断言：健康检查、配置接口、错误处理、主要端点；&lt;/li>
&lt;li>浏览器流程：页面加载、核心业务全流程等稳定路径。&lt;/li>
&lt;/ol>
&lt;p>不稳定、易变化的浏览器 UI 交互不会一开始就写进 spec，而是由 AI 动态测试后再决定是否沉淀。&lt;/p>
&lt;h2 id="9-安装与依赖">9. 安装与依赖&lt;/h2>
&lt;p>仓库 README 推荐使用 &lt;code>skills.sh&lt;/code> CLI 安装指定 skill：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># 安装到当前项目&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>npx skills add Mencius2023/skills@web-app-test
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># 安装到全局&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>npx skills add Mencius2023/skills@web-app-test -g -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>也可以手动安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>git clone https://github.com/Mencius2023/skills.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -r skills/skills/web-app-test ~/.claude/skills/web-app-test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>web-app-test&lt;/code> 依赖 &lt;code>playwright-cli&lt;/code> skill，需要额外安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>npm install -g @playwright/cli@latest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>playwright-cli install
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>playwright-cli --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果不希望全局安装，也可以使用 &lt;code>npx playwright-cli&lt;/code> 的方式运行。&lt;/p>
&lt;h2 id="10-测试结束后必须交付-markdown-报告">10. 测试结束后必须交付 Markdown 报告&lt;/h2>
&lt;p>这个 skill 对测试交付物有明确要求：每轮测试结束后必须产出 Markdown 测试报告，而不是只在对话里口头总结。&lt;/p>
&lt;p>报告建议包含：&lt;/p>
&lt;ul>
&lt;li>测试范围；&lt;/li>
&lt;li>通过 / 失败 / 跳过数量；&lt;/li>
&lt;li>环境信息；&lt;/li>
&lt;li>详细测试结果；&lt;/li>
&lt;li>发现的问题；&lt;/li>
&lt;li>本轮已修复内容；&lt;/li>
&lt;li>新增或更新的自动化脚本；&lt;/li>
&lt;li>待用户确认事项。&lt;/li>
&lt;/ul>
&lt;p>这一点很重要。因为 AI Agent 执行测试时会产生大量即时判断，如果没有报告固化，测试过程就会变成不可追溯的聊天记录。Markdown 报告把一次测试转化为可归档、可审查、可复盘的工程产物。&lt;/p>
&lt;h2 id="11-失败不是只有代码-bug">11. 失败不是只有“代码 bug”&lt;/h2>
&lt;p>&lt;code>web-app-test&lt;/code> 对失败原因也做了分类：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>类型&lt;/th>
&lt;th>含义&lt;/th>
&lt;th>处理方式&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>类型 A&lt;/td>
&lt;td>测试脚本 fixture、前置条件或断言逻辑有问题&lt;/td>
&lt;td>AI 可自行修复测试&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>类型 B&lt;/td>
&lt;td>产品 Feature 发生有意变更，旧测试预期过时&lt;/td>
&lt;td>AI 可更新测试预期&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>类型 C&lt;/td>
&lt;td>文档或设计未说明的意外回归&lt;/td>
&lt;td>汇报用户，等待确认修复方向&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>这套分类避免了两个极端：&lt;/p>
&lt;ul>
&lt;li>一看到测试失败就改代码；&lt;/li>
&lt;li>一看到测试失败就改测试让它通过。&lt;/li>
&lt;/ul>
&lt;p>它要求 Agent 先判断根因，再决定是修脚本、改预期，还是报告真实 bug。&lt;/p>
&lt;h2 id="12-这个仓库适合什么场景">12. 这个仓库适合什么场景？&lt;/h2>
&lt;p>这个 skill 尤其适合以下场景：&lt;/p>
&lt;ul>
&lt;li>前后端分离的 Web 应用；&lt;/li>
&lt;li>页面交互复杂、纯 API 测试覆盖不够的产品；&lt;/li>
&lt;li>需要频繁回归但 UI 又经常变化的项目；&lt;/li>
&lt;li>有 LLM 生成结果、输出不完全确定的应用；&lt;/li>
&lt;li>希望把 AI Agent 纳入测试流程的团队；&lt;/li>
&lt;li>想把测试规格、脚本、报告统一治理的项目。&lt;/li>
&lt;/ul>
&lt;p>相对不适合的场景包括：&lt;/p>
&lt;ul>
&lt;li>纯后端库，没有浏览器交互；&lt;/li>
&lt;li>产品极小、没有持续回归需求；&lt;/li>
&lt;li>团队只需要传统 CI 单元测试，不需要 AI 现场判断；&lt;/li>
&lt;li>无法提供真实后端或测试环境的项目。&lt;/li>
&lt;/ul>
&lt;h2 id="13-这个设计最有价值的地方">13. 这个设计最有价值的地方&lt;/h2>
&lt;p>我认为这个仓库最值得借鉴的不是具体代码量，而是它对 AI Agent 测试角色的重新定义。&lt;/p>
&lt;p>它没有把 Agent 当作“自动生成 Playwright 脚本的工具”，而是把 Agent 放进一个完整测试生命周期：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>理解项目
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 维护测试规格
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 启动真实环境
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 动态操作浏览器
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 结合视觉、API、日志判断问题
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 分类处理失败
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 沉淀可复用脚本
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> → 输出 Markdown 报告
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这使测试从“一堆脚本”变成了“一套可演进的工程流程”。&lt;/p>
&lt;h2 id="14-可以继续增强的方向">14. 可以继续增强的方向&lt;/h2>
&lt;p>从博客解读视角看，这个仓库后续还可以补充一些内容，让它更容易被外部用户采用：&lt;/p>
&lt;ol>
&lt;li>增加一个完整示例项目，展示从模板落地到报告产出的全过程；&lt;/li>
&lt;li>提供一份真实的 &lt;code>TEST_SPECIFICATION.md&lt;/code> 示例；&lt;/li>
&lt;li>补充 GitHub Actions / CI 配置示例；&lt;/li>
&lt;li>增加 FAQ，例如如何处理登录态、鉴权、外部服务调用、LLM 超时；&lt;/li>
&lt;li>明确许可证，便于他人复用；&lt;/li>
&lt;li>提供更多 skill，例如 API 测试、文档测试、性能冒烟测试等。&lt;/li>
&lt;/ol>
&lt;p>这些不是当前仓库的缺陷，而是一个个人 skill 集合走向通用工具包时自然会遇到的下一步。&lt;/p>
&lt;h2 id="15-总结">15. 总结&lt;/h2>
&lt;p>&lt;code>Mencius2023/skills&lt;/code> 当前体量不大，但它提出了一个很有实践价值的方向：让 AI Agent 不只是写测试，而是参与测试设计、执行、判断和资产沉淀。&lt;/p>
&lt;p>其中的 &lt;code>web-app-test&lt;/code> skill 把网页应用测试拆成两条线：&lt;/p>
&lt;ul>
&lt;li>稳定、底层、可无人值守的程序测试，必须预先设计；&lt;/li>
&lt;li>脆弱、界面相关、需要用户视角判断的浏览器测试，先由 AI 动态执行，再按需沉淀为脚本。&lt;/li>
&lt;/ul>
&lt;p>这种分工非常贴合现实中的 Web 应用测试难题：核心逻辑要稳定回归，界面流程又不能被过度僵化的脚本绑死。&lt;/p>
&lt;p>如果你正在尝试把 Claude Code、Playwright 和 AI Agent 工作流结合起来，用于前端 / 全栈项目测试，这个仓库值得一读。它的价值不在于提供了多少现成代码，而在于提供了一套可落地、可演进、可追溯的 Agentic Testing 方法论。&lt;/p>
&lt;hr>
&lt;h2 id="参考链接">参考链接&lt;/h2>
&lt;ul>
&lt;li>仓库首页：
&lt;/li>
&lt;li>&lt;code>web-app-test&lt;/code> skill：
&lt;/li>
&lt;li>&lt;code>SKILL.md&lt;/code>：
&lt;/li>
&lt;li>模板目录：
&lt;/li>
&lt;li>&lt;code>TEST_SPECIFICATION.template.md&lt;/code>：
&lt;/li>
&lt;li>&lt;code>run_regression.template.py&lt;/code>：
&lt;/li>
&lt;li>&lt;code>playwright.config.template.js&lt;/code>：
&lt;/li>
&lt;li>&lt;code>standard-flow.spec.template.js&lt;/code>：
&lt;/li>
&lt;/ul></description></item><item><title>3D Battlefield Local Update Benchmark</title><link>https://vista-research-group.pages.dev/post/3d-battlefield-local-update-benchmark/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://vista-research-group.pages.dev/post/3d-battlefield-local-update-benchmark/</guid><description>&lt;p>适用对象：城市战场仿真场景中“三维战场场景局部更新”功能的回归测试&lt;/p>
&lt;p>输入：无人机 / 无人狗等侦察源采集的侦察录像（及位姿元数据）&lt;/p>
&lt;p>待测能力：基于侦察数据，检测战场局部变化，并将原有三维场景同步更新（几何替换、目标插入/删除、动态目标同步、语义/通行性更新），实现态势实时刷新。&lt;/p>
&lt;h2 id="1-通用约定与指标体系">1. 通用约定与指标体系&lt;/h2>
&lt;h3 id="11-设计原则">1.1 设计原则&lt;/h3>
&lt;ol>
&lt;li>覆盖性&lt;/li>
&lt;/ol>
&lt;p>变化类型覆盖“正变化(新增)、负变化(消失)、形变(损毁)、动态(时敏)、语义(通行性)、地表(高程)”六大维度。&lt;/p>
&lt;ol start="2">
&lt;li>可量化&lt;/li>
&lt;/ol>
&lt;p>每类想定都附带真值(Ground Truth)定义与数值化通过门限，避免“看起来更新了”这类主观判断。&lt;/p>
&lt;ol start="3">
&lt;li>抗作弊&lt;/li>
&lt;/ol>
&lt;p>每个场景都强制保留静默对照区(无变化区域)，专门检验模块“是否乱改未变化的部分”——这是态势更新最危险的失效模式。&lt;/p>
&lt;ol start="4">
&lt;li>难度分层&lt;/li>
&lt;/ol>
&lt;p>从单一清晰变化 → 弱信号/强干扰 → 退化感知 → 复合密集,形成梯度&lt;/p>
&lt;ol start="5">
&lt;li>可复现&lt;/li>
&lt;/ol>
&lt;p>所有摆放、动线、航线用统一坐标与参数描述,UE内可一次性复刻。&lt;/p>
&lt;h3 id="12-坐标与标注约定">1.2 坐标与标注约定&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>采用本地 ENU 坐标系：原点取地块西南角，X 轴指东、Y 轴指北、Z 轴朝上，单位米。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>地块尺寸记为 $W \times D$（东西 × 南北）。点位记为 (x, y, z)，航点同。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>每个变化实例须导出真值条目：{id, 类别, 中心点(x,y,z), 朝向yaw, 包围盒尺寸(l,w,h), 损毁等级, 出现/消失标志, 轨迹(若动态)}。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>真值由 UE 场景脚本直接导出（场景即真值来源），无需人工再标注。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="13-侦察源能力假设用于统一录制条件设定可按实际平台标准调整">1.3 侦察源能力假设（用于统一录制条件设定，可按实际平台标准调整）&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>平台&lt;/strong>&lt;/th>
&lt;th>&lt;strong>传感器&lt;/strong>&lt;/th>
&lt;th>&lt;strong>典型作业参数&lt;/strong>&lt;/th>
&lt;th>&lt;strong>用途&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>无人机(旋翼)&lt;/td>
&lt;td>EO 4K@30fps + 云台，选配 IR/多光谱&lt;/td>
&lt;td>飞行高度 30–120 m AGL，巡航 3–8 m/s，盘旋凝视&lt;/td>
&lt;td>区域测绘、顶视/斜视、运动目标跟踪&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>无人狗(地面)&lt;/td>
&lt;td>EO + 选配 LiDAR，传感器高 $\sim 0.5$ m&lt;/td>
&lt;td>1–2 m/s，可抵近/入室&lt;/td>
&lt;td>低矮工事贴地侦察、内部走廊、坑深桥况近测&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="14-损毁分级标准">1.4 损毁分级标准&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>等级&lt;/strong>&lt;/th>
&lt;th>&lt;strong>名称&lt;/strong>&lt;/th>
&lt;th>&lt;strong>判定特征&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>D0&lt;/td>
&lt;td>无损&lt;/td>
&lt;td>结构与外立面完好&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>D1&lt;/td>
&lt;td>轻度&lt;/td>
&lt;td>门窗/外立面/装饰破损，承重结构完好&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>D2&lt;/td>
&lt;td>中度&lt;/td>
&lt;td>局部墙体穿孔或单层塌落，结构基本完好&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>D3&lt;/td>
&lt;td>重度&lt;/td>
&lt;td>多层或承重构件受损、局部坍塌、瓦砾外溢&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>D4&lt;/td>
&lt;td>摧毁&lt;/td>
&lt;td>整体坍塌为瓦砾堆，原结构不可辨&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="15-统一指标定义">1.5 统一指标定义&lt;/h3>
&lt;h4 id="1变化检测匹配">（1）变化检测匹配&lt;/h4>
&lt;p>预测变化实例与真值实例匹配，当且仅当：中心距 $\leq d_{\text{match}}$ 且类别一致（或三维 IoU $\geq 0.3$）。&lt;/p>
&lt;p>建议 $d_{\text{match}} = 1.0$ m（静态）/ $2.0$ m（时敏目标）。&lt;/p>
&lt;h4 id="2检测层">（2）检测层&lt;/h4>
$$\text{Precision} = \frac{TP}{TP + FP},\text{Recall} = \frac{TP}{TP + FN},F1 = \frac{2\,\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}$$&lt;h4 id="3定位精度">（3）定位精度&lt;/h4>
$$e_{\text{pos}} = \left\| \mathbf{p}_{\text{pred}} - \mathbf{p}_{\text{gt}} \right\|_{2},e_{\text{yaw}} = \left| \,\text{wrap}\left( \theta_{\text{pred}} - \theta_{\text{gt}} \right)\, \right|$$&lt;h4 id="4几何重建精度">（4）几何重建精度&lt;/h4>
&lt;p>三维包围盒交并比与点云/网格 Chamfer 距离：&lt;/p>
$$\text{IoU}_{3D} = \frac{V_{\text{pred}} \cap V_{\text{gt}}}{V_{\text{pred}} \cup V_{\text{gt}}}$$$$d_{CD}\left( S_{1},S_{2} \right) = \frac{1}{\left| S_{1} \right|}\sum_{x \in S_{1}} \min_{y \in S_{2}}\left\| x - y \right\|_{2}^{2} + \frac{1}{\left| S_{2} \right|}\sum_{y \in S_{2}} \min_{x \in S_{1}}\left\| x - y \right\|_{2}^{2}$$&lt;h4 id="5地表高程精度">（5）地表高程精度&lt;/h4>
$$\text{RMSE}_{z} = \sqrt{\frac{1}{N}\sum_{i = 1}^{N}\left( z_{i}^{\text{pred}} - z_{i}^{\text{gt}} \right)^{2}}$$&lt;h4 id="6时敏目标跟踪">（6）时敏目标跟踪&lt;/h4>
&lt;p>位置 RMSE、速度误差 $e_{v} = \left\| \mathbf{v}_{\text{pred}} - \mathbf{v}_{\text{gt}} \right\|$、ID 切换次数、检测时延 $T_{\text{lat}}$（目标进入视野到被建立航迹的时间），并用 MOTA/MOTP 汇总。&lt;/p>
&lt;h4 id="7静默区稳定性关键防作弊指标">（7）静默区稳定性（关键防作弊指标）&lt;/h4>
&lt;p>未变化区域被错误修改的占比：&lt;/p>
$$S_{\text{drift}} = \frac{\text{被修改的未变化体素}\text{(}\text{或面积}\text{)}}{\text{未变化区域总量}}$$&lt;p>要求越小越好。&lt;/p>
&lt;h4 id="8时效性">（8）时效性&lt;/h4>
&lt;p>端到端更新时延 $T_{\text{update}}$：从单次侦察数据就绪到场景完成局部更新所耗时间（区分离线批处理模式与近实时模式）。&lt;/p>
&lt;h4 id="9鲁棒性保持率退化条件场景">（9）鲁棒性保持率（退化条件场景）&lt;/h4>
$$\rho = \frac{\text{得分}_{\text{退化条件}}}{\text{得分}_{\text{基准条件}}}$$&lt;h3 id="16-通过门限">1.6 通过门限&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>指标&lt;/strong>&lt;/th>
&lt;th>&lt;strong>建议门限&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>静态变化检测 F1&lt;/td>
&lt;td>$\geq 0.85$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>时敏目标检测召回&lt;/td>
&lt;td>$\geq 0.90$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>损毁分级（±1 级容差）准确率&lt;/td>
&lt;td>$\geq 0.90$；严格准确 $\geq 0.70$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>静态目标位置误差&lt;/td>
&lt;td>中位 $\leq 0.5$ m，95 分位 $\leq 1.0$ m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>朝向误差&lt;/td>
&lt;td>$\leq 15^{\circ}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>几何 $\text{IoU}_{3D}$（损毁体/工事体）&lt;/td>
&lt;td>$\geq 0.50$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>地表高程 $\text{RMSE}_{z}$&lt;/td>
&lt;td>$\leq 0.30\,\mathrm{m}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>TST 位置 RMSE / 速度误差&lt;/td>
&lt;td>$\leq 1.0\,\mathrm{m} / \leq 1.0\,\mathrm{m}\cdot\mathrm{s}^{-1}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>TST 检测时延 / ID 切换&lt;/td>
&lt;td>$\leq 2\,\mathrm{s} / \leq 1$ 次·目标$^{-1}$·分钟$^{-1}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>静默区稳定性 $S_{\text{drift}}$&lt;/td>
&lt;td>$\leq 2\%$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>鲁棒性保持率 $\rho$&lt;/td>
&lt;td>$\geq 0.75$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>端到端更新时延 $T_{\text{update}}$（近实时模式）&lt;/td>
&lt;td>$\leq 5$ s（按需设定）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="17-评分与判定">1.7 评分与判定&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>每个场景按其权重指标归一到 0–100 分，单场景 $\ge 70$ 记为通过。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Benchmark 综合分 = 各场景加权平均。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>否决项：S4（时敏目标）与 S9（复合密集）设下限，任一低于 50 分则整体判不通过——因为这两项直接对应“实时态势”的核心价值。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="2-场景想定">2. 场景想定&lt;/h2>
&lt;h3 id="s1-建筑物损毁">S1 建筑物损毁&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：几何形变检测、损毁等级判定、瓦砾/碎片建模、原有三维网格的局部替换。&lt;/p>
&lt;p>场景范围：$180 \times 180$ m 城市街区。沿街布置 7 栋建筑（3–8 层混合），含主街、人行道、行道树。&lt;/p>
&lt;p>&lt;strong>基线（更新前）场景&lt;/strong>：所有建筑 D0 完好；街道整洁无碎片。&lt;/p>
&lt;p>验证指标与通过判据：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>损毁分级 ±1 级准确率 $\geq 0.90$，且 B1/B2/B3 的严格分级至少 2/3 正确。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>形变体 $\text{IoU}_{3D} \geq 0.5$；瓦砾堆体积误差 $\leq 25\%$；B2 楼高下降量误差 $\leq 1.0$ m。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>B0 静默稳定性 $S_{\text{drift}} \leq 2\%$（误把完好楼改成损毁即判该项失败）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image1.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>未损毁状态（baseline）&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image2.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>D2中度损毁状态&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image3.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>D3重度损毁状态&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image4.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>D4摧毁状态&lt;/p>
&lt;h3 id="s2-新增野战工事与掩体">S2 新增野战工事与掩体&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：低矮小目标的新增检测、分类、尺寸/朝向估计与插入定位；区分人工工事与天然/废弃堆积物。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$220 \times 160$ m 城郊接合带，含开阔空地、矮墙、3 栋平房。&lt;/p>
&lt;p>&lt;strong>基线场景&lt;/strong>：空地无任何工事。&lt;/p>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>工事新增检测召回 $\geq 0.85$，分类准确 $\geq 0.85$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>位置误差中位 $\leq 0.5$ m；堑壕/HESCO 长度误差 $\leq 15\%$；朝向误差 $\leq 15^{\circ}$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>干扰项不被标为“新增工事”（误报即扣分）；废弃水泥堆静默稳定。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image5.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>新增工事前（baseline）&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image6.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>新增工事后&lt;/p>
&lt;h3 id="s3-目标消失--移除负变化">S3 目标消失 / 移除（负变化）&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：负变化检测（最易被忽略）；区分“被遮挡”与“真消失”。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$150 \times 150$ m 院落与停车区。&lt;/p>
&lt;p>&lt;strong>基线场景&lt;/strong>：停放车辆、临时帐篷、沙袋掩体、矮墙。&lt;/p>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>移除检测召回 $\geq 0.85$、精确率 $\geq 0.85$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>遮挡误判率：被遮挡但仍存在的目标被误报为“消失”的比例 $\leq 10\%$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>沙袋掩体静默稳定 $S_{\text{drift}} \leq 2\%$。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image7.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>目标消失前（baseline）&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image8.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>目标消失&lt;/p>
&lt;h3 id="s4-时敏目标">S4 时敏目标&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：动态目标实时检测、连续跟踪、轨迹与速度估计、场景的近实时同步更新、军/民目标区分。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$300 \times 200$ m，含一条东西主干道、一个十字路口、一个广场。&lt;/p>
&lt;p>&lt;strong>基线场景&lt;/strong>：道路空旷无车。&lt;/p>
&lt;p>动态动线（时间以侦察开始为 $t=0$）：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>装甲车：沿主干道巡航；减速停车 5 s 后再启动（考验航迹保持与“停止≠消失”）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>皮卡：从巷口驶出，至路口右转向东，在广场停车，随后 3 名人员下车向四周疏散（5–8 m）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>步兵班：沿北侧建筑阴影行进，疏散队形(间隔 3–5 m)。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>民用车（干扰，非军事目标）慢速通过,应被正确区分或按既定规则处理。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>各运动目标检测召回 $\geq 0.90$；检测时延 $T_{\text{lat}} \leq 2$ s。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>位置 RMSE $\leq 1.0$ m；速度误差 $\leq 1.0$ m/s；V1 停车段不得误判为“目标消失”。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ID 切换 $\leq 1$ 次/目标/分钟；MOTA $\geq 0.70$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>军/民分类正确（民用车不进入军事时敏目标列表，或按规则降权）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>场景内动态目标的位姿刷新频率满足近实时门限（如 $\geq 1$ Hz，按需）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="s5-伪装隐蔽与诱饵">S5 伪装、隐蔽与诱饵&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：抗虚警能力 + 检出隐蔽真目标；区分真目标与诱饵。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$200 \times 180$ m，含树林边缘、建筑阴影带。&lt;/p>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>隐蔽真目标(火炮)召回 $\geq 0.80$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>诱饵误判率（把诱饵当真目标高置信上报） $\leq 20\%$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>天然灌木虚警率 $\leq 10\%$；烟幕区不产生几何乱更新。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image9.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>带有伪装、诱饵的场景&lt;/p>
&lt;h3 id="s6-道路与通道变化通行性语义">S6 道路与通道变化（通行性语义）&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：通行性语义更新（可通行 ↔ 受阻）、路障/弹坑/断桥识别。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$280 \times 120$ m，含主路、跨河、两侧建筑。&lt;/p>
&lt;p>&lt;strong>基线场景&lt;/strong>：道路畅通、桥梁完好。&lt;/p>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>障碍/损毁检测召回 $\geq 0.90$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>路段通行性状态判定正确率 $\geq 0.90$（每个路段标注 通行/受阻/断绝 三态）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>弹坑直径误差 $\leq 20\%$；桥梁断面被正确识别且更新为“断绝”。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image10.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>道路变化前（baseline）&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image11.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>道路变化后&lt;/p>
&lt;h3 id="s7-地形与地表变化">S7 地形与地表变化&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：地表网格/高程的局部更新、弹坑与焦土/碎片场建模。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：$200 \times 200$ m 开阔地，边缘有片状植被。&lt;/p>
&lt;p>&lt;strong>基线场景&lt;/strong>：相对平整地表、完整植被。&lt;/p>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>地表高程 $\text{RMSE}_{z} \leq 0.30\,\mathrm{m}$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>弹坑定位误差 $\leq 0.5$ m、体积误差 $\leq 25\%$、检出 $\geq 4/5$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>焦土区范围 $\text{IoU} \geq 0.6$ 且纹理类别(焦土)判定正确；倒伏植被被更新。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image12.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>平整地表（baseline）&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="flex justify-center ">
&lt;div class="w-full" >&lt;img src="./%e4%b8%89%e7%bb%b4%e5%9c%ba%e6%99%af%e5%b1%80%e9%83%a8%e6%9b%b4%e6%96%b0benchmark_converted_media/media/image13.png" alt="" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;p>带有弹坑的地表&lt;/p>
&lt;h3 id="s8-退化感知条件下的鲁棒性">S8 退化感知条件下的鲁棒性&lt;/h3>
&lt;p>&lt;strong>测试能力&lt;/strong>：在烟尘、雨雾、弱光、夜间、逆光等条件下保持检测/更新能力。&lt;/p>
&lt;p>&lt;strong>场景范围&lt;/strong>：复用 S1（损毁）或 S4（运动目标）的布局,仅叠加环境条件;真值变化集合固定不变（例如固定为“一栋 D3 损毁 + 一辆 V1 运动车”），以便横向对比。&lt;/p>
&lt;p>&lt;strong>条件矩阵（同一真值集合分别复测）&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>白天晴（基准）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>黄昏弱光&lt;/p>
&lt;/li>
&lt;li>
&lt;p>夜间（需开启 IR/低照度）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>局部烟幕&lt;/p>
&lt;/li>
&lt;li>
&lt;p>雨雾&lt;/p>
&lt;/li>
&lt;li>
&lt;p>扬尘&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>验证指标与通过判据&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>对每个退化条件计算鲁棒性保持率 $\rho \geq 0.75$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>夜间条件下目标召回 $\geq 0.70$。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>烟幕/雨雾区域不得产生“凭空生成”的几何（虚假更新 FP 不随能见度下降而激增）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="3-汇总表">3. 汇总表&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>编号&lt;/strong>&lt;/th>
&lt;th>&lt;strong>场景&lt;/strong>&lt;/th>
&lt;th>&lt;strong>核心测试能力&lt;/strong>&lt;/th>
&lt;th>&lt;strong>关键指标&lt;/strong>&lt;/th>
&lt;th>&lt;strong>通过门限(建议)&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>S1&lt;/td>
&lt;td>建筑损毁与分级&lt;/td>
&lt;td>形变检测、损毁分级、网格替换&lt;/td>
&lt;td>分级准确率、$\text{IoU}_{3D}$&lt;/td>
&lt;td>±1级 $\geq 0.90$，$IoU \geq 0.5$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S2&lt;/td>
&lt;td>新增工事掩体&lt;/td>
&lt;td>新增小目标检测/分类/定位&lt;/td>
&lt;td>召回、分类、位置误差&lt;/td>
&lt;td>F1 $\geq 0.85$，位置 $\leq 0.5$ m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S3&lt;/td>
&lt;td>目标消失&lt;/td>
&lt;td>负变化检测、遮挡判别&lt;/td>
&lt;td>移除召回、遮挡误判率&lt;/td>
&lt;td>召回 $\geq 0.85$，误判 $\leq 10\%$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S4&lt;/td>
&lt;td>时敏运动目标&lt;/td>
&lt;td>实时检测/跟踪/测速/同步&lt;/td>
&lt;td>RMSE、时延、ID切换&lt;/td>
&lt;td>RMSE $\leq 1.0$ m，时延 $\leq 2$ s 【否决】&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S5&lt;/td>
&lt;td>伪装与诱饵&lt;/td>
&lt;td>抗虚警 + 检出隐蔽真目标&lt;/td>
&lt;td>隐蔽召回、诱饵误判、虚警&lt;/td>
&lt;td>召回 $\geq 0.80$，诱饵误判 $\leq 20\%$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S6&lt;/td>
&lt;td>道路通行性&lt;/td>
&lt;td>通行性语义更新&lt;/td>
&lt;td>通行态判定正确率&lt;/td>
&lt;td>$\geq 0.90$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S7&lt;/td>
&lt;td>地形地表&lt;/td>
&lt;td>高程/mesh局部更新&lt;/td>
&lt;td>$\text{RMSE}_{z}$、弹坑体积&lt;/td>
&lt;td>$\text{RMSE}_{z} \leq 0.3\,\mathrm{m}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>S8&lt;/td>
&lt;td>退化感知鲁棒性&lt;/td>
&lt;td>烟尘/弱光/夜间稳健性&lt;/td>
&lt;td>保持率 $\rho$&lt;/td>
&lt;td>$\geq 0.75$&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item></channel></rss>