# 商机产线(pipeline-opportunity)测试用例方案 执行者:test agent(pipeline_role_submit role=test) 浏览器能力:run_shell + playwright headless chromium 脚本(真浏览器); curl + Cookie(session-ticket) 做接口/页面级验证。 前置准备(部署侧):测试环境 venv 安装 playwright + chromium(当前缺失)。 ## 统计 - 测试用例:27 条(冒烟 5 / 数据能力 7 / 报告闭环 8 / UI-CRUD 5 / RBAC 2) - 覆盖功能点:22 个(见文末映射表;状态机/人工任务/边界类功能点由多条用例交叉覆盖) ## 一、冒烟测试(验证部署,5 条) | # | 用例 | 断言 | |---|------|------| | S1 | 应用端口与外网 | 9090 监听;https://pipeline.opencomputing.cn/ 返回 200 | | S2 | 能力包加载 | 启动日志含 `[pipeline_opportunity] v0.1.0 loaded` | | S3 | 表结构 | opp_reports/opp_approvals 存在,列与 models/*.json 一致 | | S4 | 种子数据 | pipelines 表含 id=opportunity_general;appcodes 含 opp_report_status/opp_approval_status 全枚举 | | S5 | 爬虫平台连通 | 内网 192.168.16.2:9085:无 token→401;带 token→/api/stats 200 | ## 二、数据能力(消费爬虫平台,7 条) | # | 用例 | 断言 | |---|------|------| | D1 | /hot 热点推荐 | 驾驶舱执行返回排名:含 category/tender_count/total_budget_wan/top_regions,数量与爬虫库一致 | | D2 | /ai 每日AI招标 | 返回当日清单:count/with_budget/total_budget_wan 与 /api/ai_tenders 一致 | | D3 | 关键词搜索 | opp_search_tenders(keyword=大模型) 返回项标题含关键词 | | D4 | 详情来源完整性 | opp_tender_detail 返回含 url 和 source_url 两个来源链接(双链接缺一不可) | | D5 | 采集健康度 | opp_crawler_stats 返回 total/ai_related/collected_24h/recent_runs | | D6 | 鉴权降级 | params 表 token 置错 → 工具返回友好错误信息,无 500、无堆栈泄漏 | | D7 | 空结果 | 搜索不存在的关键词 → count=0 正常返回,不报错 | ## 三、报告/审批闭环(8 条,状态机核心) | # | 用例 | 断言 | |---|------|------| | R1 | 创建报告 | opp_create_report → opp_reports 新增 status=draft | | R2 | 草稿可改 | opp_update_report 更新 content 成功 | | R3 | 非草稿禁改 | confirmed 状态调 update → 拒绝「仅草稿可编辑」 | | R4 | 提交确认 | opp_submit_report → pipeline_human_tasks 新增 task_type=opp_report_confirm, status=pending(NOT NULL 列 task_id/step_name/version 正确填充) | | R5 | 人工确认回流 | 人工任务置 done → 报告 draft→confirmed,confirmed_by 落库 | | R6 | 审批门禁 | draft 状态直接 initiate_approval → 拒绝「须先人工确认」(非法迁移拦截) | | R7 | 发起审批 | confirmed 后发起 → opp_approvals initiated + 报告 approval_initiated + opp_dev_approval 人工任务 | | R8 | 审批结论 | resolve approved→报告 approved;resolve rejected→报告 rejected 且可退回 draft 重来 | ## 四、UI/CRUD(真浏览器,5 条) | # | 用例 | 断言 | |---|------|------| | U1 | 报告列表页 | 登录后浏览器打开 /pipeline-opportunity/opp_reports/index.ui:200 且 Tabular 渲染(playwright 截图+DOM 断言,非仅 curl) | | U2 | 报告 CRUD | 页面新增/编辑/删除走 add/update/delete_opp_reports.dspy 成功,数据库同步 | | U3 | 审批列表页 | /pipeline-opportunity/opp_approvals/index.ui 渲染正常 | | U4 | 产线菜单 | 商机产线项目驾驶舱菜单含「研发报告」「研发审批」弹窗项(menus 配置) | | U5 | i18n 双语 | 切英文后菜单/表头文案走 en/msg.txt 翻译(研发报告→R&D Report 等),无裸中文键 | ## 五、RBAC(2 条) | # | 用例 | 断言 | |---|------|------| | A1 | 未登录拦截 | 无 Cookie 访问 opp_reports/index.ui 与 CRUD dspy → 401 | | A2 | logined 放行 | 登录后同路径 → 200(权限缓存刷新后) | ## 功能点覆盖映射(22 个功能点) | 功能点 | 覆盖用例 | |--------|---------| | 1 能力包注册/加载 | S2 | | 2 opp_reports 表 | S3, U2 | | 3 opp_approvals 表 | S3, R7 | | 4 产线种子数据 | S4 | | 5 爬虫平台接入(内网+token) | S5, D6 | | 6 热点软件推荐 | D1 | | 7 每日AI招标展示 | D2 | | 8 招标搜索 | D3, D7 | | 9 详情+来源双链接 | D4 | | 10 采集健康度 | D5 | | 11 报告创建 | R1 | | 12 报告更新+状态保护 | R2, R3 | | 13 人工确认门禁(任务创建) | R4 | | 14 确认回流 | R5 | | 15 审批发起门禁 | R6, R7 | | 16 审批结论回流 | R8 | | 17 人工任务真实表结构 | R4, R7 | | 18 报告列表页 | U1 | | 19 报告 CRUD 全链 | U2 | | 20 审批列表页+菜单 | U3, U4 | | 21 i18n 双语 | U5 | | 22 RBAC 鉴权 | A1, A2 | ## 问题归属 - 冒烟失败 → 报部署 Bug(description 写明部署/环境根因),冒泡给 deploy_test - 功能 fail → report_bug 落库,交 develop 走 Bug 闭环(develop 修复 → test 复测)