Skip to content

FNOS-037 测试用例 ​

测试范围与需求分析 ​

被测对象是本地构建链路的 FPK 改名行为:fnpack 产出固定名 <app>.fpk 后,CLI 是否把本次产物改名为发布名,以及残留产物是否被显式提示。执行任务见 PLAN-FNOS-037。

功能覆盖点关键风险
FNOS-037-01改名作用于本次产物、目录不留固定名残留残留旧包被误选,名字与内容错配且无报错
FNOS-037-02残留产物提示、缺产物时报错静默通过,装机拿到旧包

缺陷基线(修复前实测):apps/fn-deepseek-harness/ 下同时存在 fn-deepseek-harness-v7.0.0-dsh-0.2.1-rc.5.fpk(包内 version = 6.1.15、基线 rc.3)与 fn-deepseek-harness.fpk(包内 version = 7.0.0、基线 rc.5)。

测试环境 ​

功能目标环境执行方式
FNOS-037-01、02本地构建链路pnpm --filter @tnnevol/fnos-dsh-cli test;临时目录行为用例;变异验证
FNOS-037-01本地构建链路pnpm run build -- --fpk --app fn-deepseek-harness --skip-bundle-dsh-plugins,解包 manifest 核对

测试用例 ​

FNOS-037-01 改名作用于本次构建的产物 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-001FNOS-037-01残留同名旧产物时改动的是本次新包AC-01临时目录内放同名旧目标(内容 stale-build)与固定名新包(内容 fresh-build)1.调用 renameFpkToRelease 2.读目标名内容目标名内容为 fresh-build;replacedStaleTarget 为 trueP0缺陷现场:名字与内容错配
TC-002FNOS-037-01构建后不残留固定名产物AC-02TC-001 同环境1.改名后列举目录目录内只剩发布名一份,无 <app>.fpkP0新增行为
TC-003FNOS-037-01命名模板仍与 CI 同形AC-03无1.运行 fpk-release-naming.spec.ts模板归一后两侧相等;均以 .fpk 结尾、含 -dsh-P02026-10-29 引入的命名契约
TC-004FNOS-037-01实现回退时行为用例变红AC-01已备份实现文件1.把取源改回「扫目录第一个 .fpk」2.运行 fpk-artifacts.spec.ts 3.还原复跑缺陷版 3 条失败(含 expected 'stale-build' to be 'fresh-build');还原后 4 条全绿P0变异验证,防止用例空转
TC-005FNOS-037-01真实构建产物的名字与内容一致AC-01上一轮遗留产物在目录内1.本地执行 FPK 构建 2.解包发布名产物 3.读 manifest 的 version 与基线发布名产物内的版本与基线等于本次构建值P0提出人现场

FNOS-037-02 残留产物被显式报告 ​

用例ID功能点测试标题关联验收前置条件测试步骤预期结果优先级基线来源
TC-006FNOS-037-02命名不同的旧包被列举且不删除AC-01、AC-02目录内有 app-v7.0.0-...fpk 旧包与固定名新包1.调用 renameFpkToRelease 2.读 leftovers 3.读旧包内容leftovers 含旧包名;旧包内容未被改写P1新增行为
TC-007FNOS-037-02缺固定名产物时报错且指出期望名AC-03目录内只有其它命名的 .fpk1.调用 renameFpkToRelease抛错并包含 fnpack produced no app.fpk,不退化去猜别的文件P1新增行为

测试执行结果 ​

用例ID功能点执行环境结果执行日期备注
TC-001FNOS-037-01本地(vitest 临时目录)通过2026-10-30tests/fpk-artifacts.spec.ts:目标名内容断言为 fresh-build,replacedStaleTarget true
TC-002FNOS-037-01本地(vitest 临时目录)通过2026-10-30改名后目录仅剩发布名一份
TC-003FNOS-037-01本地(vitest)通过2026-10-30fpk-release-naming.spec.ts 7 条通过,模板改读 core/fpk-artifacts.ts;新增「不扫目录第一个 .fpk」断言
TC-004FNOS-037-01本地(变异验证)通过2026-10-30缺陷版复现:expected 'stale-build' to be 'fresh-build'、expected 'old' to be 'fresh'、promise resolved ... instead of rejecting,3 条失败;还原后 4 条全绿。源码形状断言同时变红
TC-006FNOS-037-02本地(vitest 临时目录)通过2026-10-30leftovers 为 ['app-v7.0.0-dsh-0.2.1-rc.3.fpk'],旧包内容保持 old
TC-007FNOS-037-02本地(vitest 临时目录)通过2026-10-30报错文案含 fnpack produced no app.fpk
TC-005FNOS-037-01本地构建链路通过2026-10-30实跑 pnpm run build -- --fpk --app fn-deepseek-harness --skip-bundle-dsh-plugins:输出「Release FPK: …-v7.0.0-dsh-0.2.1-rc.5.fpk」并提示「已覆盖同名的上一轮产物」;构建后目录只剩这一份,解包 manifest 为 version = 7.0.0、基线 0.2.1-rc.5。原先「名字是 v7.0.0/rc.5、内容是 6.1.15/rc.3」的错配文件被本次产物覆盖,无需手工删除

Bug 记录 ​

Bug ID关联用例标题严重级别状态修复说明
BUG-01TC-001、TC-005改名取源文件用「目录里第一个 .fpk」,残留旧产物被选中后与新目标同名而提前返回,本次新包留在原名,产物名字与内容错配且无任何报错P1已修复取源改为 fnpack 固定产物名 <app>.fpk(新增 core/fpk-artifacts.ts);同名目标由 rename 原子覆盖;残留的其它 FPK 由构建输出警告。新增行为用例 + 变异验证,实现回退时用例变红

测试结论 ​

通过:7 条用例全部通过,0 失败、0 阻塞。

  • 执行统计:通过 7(TC-001~TC-007)/ 失败 0 / 阻塞 0;CLI 用例总数 100 → 105。
  • 一句话结论:本地 FPK 改名已改为按 fnpack 固定产物名取源,残留同名旧产物被本次产物覆盖、命名不同的旧包保留并告警;命名模板与 CI 保持同形;实跑构建确认发布名产物内的版本与基线来自本次构建,原先错配的文件已被覆盖。
  • 遗留风险:
    1. 命名不同的历史产物不会被清理:修复后同名目标会被覆盖,但若目录里还留着别的版本的 FPK,构建只告警不删除,需使用者自行处置(E2E 要求目录内恰好一份,多份会直接报错,不会静默装旧包)。
    2. CI 侧未改动:build-app.yml 仍用 find ... -quit 取文件,在干净检出上无缺陷;若将来 CI 工作区复用,会有同样问题。
    3. 打包体积与本次修复无关:验证构建使用 --skip-bundle-dsh-plugins,产物约 166 KB,与 CI 同参数同量级;带内置插件的完整包体积另计。

变更记录 ​

日期变更说明
2026-10-30初始登记与包级结果回填建立 FNOS-037 用例文档:7 条用例覆盖两项功能;回填 6 条通过结果,含变异验证(缺陷版 3 条失败、还原后全绿)。真实构建核对列为待执行。

基于 VitePress 构建