{
  "说明": "全部为合成输入与拟定制工作表，未连接真实系统，预期不是实测结果。",
  "研究日期": "2026-10-24",
  "题目": "多步业务测试交给 Agent，怎样准备可复用的夹具蓝图",
  "工作表字段": [
    "节点标识",
    "对象依赖",
    "种子顺序",
    "run/worker/case",
    "只读共享",
    "可变归属",
    "创建者",
    "逆序清理",
    "时间提供方"
  ],
  "samples": [
    {
      "case_id": "W061-01",
      "input": "预约改期场景要求已有楼宇B01、场地R01、可约时段S01、预约A01；B01是共享只读参考，R01/S01/A01由本次case创建，A01引用S01和R01。",
      "expected": "蓝图按B01存在性→R01→S01→A01列种子依赖，写明A01/S01/R01的创建者与逆序清理归属，B01不得被本case清理；种子任一步失败时仅列已创建对象的清理计划，实际执行空白。",
      "actual": "",
      "human_review": "由授权测试/业务/数据负责人复核方案；仅为合成材料，不自动执行、批准或给出安全通过结论。",
      "reviewer": "",
      "evidence_location": ""
    },
    {
      "case_id": "W061-02",
      "input": "设备借用两个并行场景分别是借出和归还，原草案都引用设备DEV-DEMO、借单LOAN-DEMO；运行RUN7的worker01/case借出和worker02/case归还会修改设备可用状态。",
      "expected": "为两组可变设备、借单和状态种子分配RUN7-w01-checkout与RUN7-w02-return命名空间，所有子对象引用保持组内一致；设备型号目录可共享只读，每组只清自己创建的对象；标明浏览器context隔离不自动隔离后端数据。",
      "actual": "",
      "human_review": "由授权测试/业务/数据负责人复核方案；仅为合成材料，不自动执行、批准或给出安全通过结论。",
      "reviewer": "",
      "evidence_location": ""
    },
    {
      "case_id": "W061-03",
      "input": "服务权益ENT01关联设备AS01、服务项目SV01和服务请求REQ01；已批规则为expires_at=2026-10-25T00:00:00Z之前可用，测试now=2026-10-24T23:59:00Z与到期时刻两个case；前端可固定page.clock，后端时间尚不可注入。",
      "expected": "蓝图将两个case的设备/权益/请求种子及now分开，标注开始/失效边界和时钟责任；只规划页面观察，服务端有效期判定保持未受控/不可证明可复现，要求专用测试时间提供方后才能计划端到端断言，不把冻结页面当全系统时钟。",
      "actual": "",
      "human_review": "由授权测试/业务/数据负责人复核方案；仅为合成材料，不自动执行、批准或给出安全通过结论。",
      "reviewer": "",
      "evidence_location": ""
    }
  ],
  "补充业务输入": {
    "预约蓝图": {
      "只读共享": [
        "B01"
      ],
      "依赖": [
        [
          "B01",
          "R01"
        ],
        [
          "R01",
          "S01"
        ],
        [
          "R01",
          "A01"
        ],
        [
          "S01",
          "A01"
        ]
      ],
      "种子顺序": [
        "确认B01",
        "创建R01",
        "创建S01",
        "创建A01"
      ],
      "逆序归还": [
        "A01",
        "S01",
        "R01"
      ],
      "禁止本case清理": [
        "B01"
      ]
    },
    "借用命名空间": [
      {
        "namespace": "RUN7-w01-checkout",
        "device": "RUN7-w01-checkout-DEV",
        "loan": "RUN7-w01-checkout-LOAN",
        "状态": "可借"
      },
      {
        "namespace": "RUN7-w02-return",
        "device": "RUN7-w02-return-DEV",
        "loan": "RUN7-w02-return-LOAN",
        "状态": "已借出"
      }
    ],
    "权益时钟": {
      "expires_at": "2026-10-25T00:00:00Z",
      "now_cases": [
        "2026-10-24T23:59:00Z",
        "2026-10-25T00:00:00Z"
      ],
      "批准边界": "now<expires_at",
      "页面时钟": "拟固定",
      "服务端时钟": "未受控",
      "预期": "仅可计划页面观察，端到端判定待时间提供方补齐"
    }
  },
  "source_support": [
    {
      "url": "https://playwright.dev/docs/test-fixtures",
      "support": "夹具依赖B时B先建立、后拆除；test作用域在每测试后拆除，worker作用域在worker结束时拆除，官方示例用workerIndex区分账号。隔离浏览器context不自动隔离服务端数据；命名空间与清理归属是本文拟设计。",
      "opened_on": "2026-10-24"
    },
    {
      "url": "https://playwright.dev/docs/clock",
      "support": "setFixedTime固定Date.now/new Date；page.clock覆盖页面原生时间类/函数。它不说明服务器或数据库时钟被控制；跨层时间提供方必须单独设计和核验。",
      "opened_on": "2026-10-24"
    }
  ]
}
