const XLSX = require('C:/tmp_xlsx/node_modules/xlsx-js-style'); // ====================================================== // 格式说明(对标 test_case_new.xlsx): // 标题行背景色:#000080(海军蓝) // 正常场景行:#CCFFFF(浅青色) // 异常场景行:#FF99CC(浅粉红) // 边界场景行:#FFFF99(浅黄色) // 标题行行高:30pt;数据行行高:25pt // 用例编号格式:TC-模块号-序号(如TC-01-001) // 测试类型值:正常场景 / 异常场景 / 边界场景 // 优先级:P0 / P1 / P2 // ====================================================== // ====================================================== // 测试用例数据(基于prompt_rewritebyCC.md & newPromptAddChem.md) // 字段顺序:用例编号, 模块名称, 测试场景, 测试类型, // 前置条件, 测试操作, 预期结果, 优先级, 设计方法 // ====================================================== const testCases = [ // =================================================== // 模块01:通用导航栏 // =================================================== ['TC-01-001', '通用导航栏', '实时时钟以HH:MM:SS格式每秒刷新', '正常场景', '系统正常运行,页面已完整加载', '观察页面右上角时钟区域', '时钟以HH:MM:SS格式正确显示,每秒刷新一次且无闪烁', 'P0', '场景法'], ['TC-01-002', '通用导航栏', '星期信息与系统本地时间一致', '正常场景', '系统正常运行,页面已完整加载', '查看导航栏右侧星期显示并与系统时间对比', '正确显示当前星期几(如:星期三),与系统本地时间一致', 'P1', '等价类划分'], ['TC-01-003', '通用导航栏', '天气信息正常展示无空白乱码', '正常场景', '系统正常运行,网络连接正常', '查看天气信息区域显示内容', '天气信息正常显示,不出现空白区域或乱码', 'P1', '场景法'], ['TC-01-004', '通用导航栏', '标题渐变色效果正确渲染', '正常场景', '系统正常运行,页面已完整加载', '查看导航栏左侧标题文字样式', '「中国安全生产科学研究院实验室安全智慧化管控中心」显示白→科技蓝渐变色效果', 'P2', '场景法'], ['TC-01-005', '通用导航栏', '导航栏底部流光动画持续运行', '正常场景', '系统正常运行,页面已完整加载', '观察导航栏底部分割线动效', '底部渐变分割线+流光动画持续运行,4s一轮循环,无卡顿中断', 'P2', '场景法'], ['TC-01-006', '通用导航栏', '「实验室情况」按钮默认选中高亮', '正常场景', '页面初始加载完成', '观察顶部导航中间切换按钮区域', '「实验室情况」按钮默认选中并显示发光呼吸高亮效果,「视频监控」按钮未选中', 'P0', '场景法'], ['TC-01-007', '通用导航栏', '点击「视频监控」切换页面Tab状态同步', '正常场景', '当前页面为实验室情况页', '点击导航栏「视频监控」按钮', '页面切换至视频监控页,「视频监控」按钮变为选中高亮,「实验室情况」取消选中', 'P0', '场景法'], ['TC-01-008', '通用导航栏', '点击「实验室情况」切回并重新初始化ECharts', '正常场景', '当前页面为视频监控页', '点击导航栏「实验室情况」按钮', '页面切换回实验室情况页,延迟100ms后所有ECharts图表重新初始化并正确渲染', 'P0', '场景法'], ['TC-01-009', '通用导航栏', '两页面共享导航栏,切换时信息不变', '正常场景', '页面已加载,可正常切换页面', '分别切换两个页面,观察导航栏内容', '两页面切换时导航栏标题、时钟、天气信息保持不变,仅Tab选中状态变化', 'P1', '场景法'], ['TC-01-010', '通用导航栏', '网络断开时天气区域兜底展示', '异常场景', '系统正常运行,页面已加载后断开网络连接', '断网后观察天气信息区域', '天气区域显示"--"或"暂无数据"兜底,不出现空白区域或JS报错', 'P0', '错误推测法'], ['TC-01-011', '通用导航栏', '跨日00:00:00时日期星期同步切换', '边界场景', '系统持续运行至接近午夜', '在00:00:00前后观察日期与星期变化', '日期与星期同步切换,不出现跨日延迟(如00:00:01还显示昨天)', 'P0', '边界值分析'], ['TC-01-012', '通用导航栏', '跨年元旦零点年份正确切换', '边界场景', '系统运行至12月31日23:59:59', '观察00:00:00时刻年份变化', '年份正确切换至新年', 'P1', '边界值分析'], // =================================================== // 模块02:实验室基本情况统计 // =================================================== ['TC-02-001', '实验室基本情况统计', '环形图正确渲染并显示实验室总数', '正常场景', '系统正常运行,实验室情况页已加载', '查看左栏顶部环形图(pie, radius 45%~70%)', 'ECharts环形图正确渲染,中心显示实验室总数数字及"实验室总数"文字', 'P0', '场景法'], ['TC-02-002', '实验室基本情况统计', '四个安全分级颜色与标准完全对应', '正常场景', '系统正常运行,实验室情况页已加载', '查看环形图各扇区颜色及右侧图例', 'I级显示红色#ff4d4f,II级显示橙色#ff8c00,III级显示黄色#ffcc00,IV级显示蓝色#3a7bff,颜色与教育部标准一致', 'P0', '等价类划分'], ['TC-02-003', '实验室基本情况统计', '右侧纵向图例完整显示四个分级', '正常场景', '系统正常运行,实验室情况页已加载', '查看环形图右侧图例区域', '图例纵向显示I级、II级、III级、IV级及对应颜色和占比数据,四项缺一不可', 'P1', '场景法'], ['TC-02-004', '实验室基本情况统计', '三个状态卡片数量之和等于实验室总数', '正常场景', '系统正常运行,实验室情况页已加载', '查看环形图下方使用、异常、空闲三个状态卡片数值', '使用数+异常数+空闲数=实验室总数,逻辑自洽;三卡片颜色分别为蓝、红、绿', 'P0', '等价类划分'], ['TC-02-005', '实验室基本情况统计', '状态卡片呼吸发光动画stagger间隔1.3s', '正常场景', '系统正常运行,实验室情况页已加载', '观察三个状态卡片动画效果', '三个卡片均有呼吸发光动画,stagger间隔1.3s依次错开', 'P2', '场景法'], ['TC-02-006', '实验室基本情况统计', '四个分级占比之和为100%', '正常场景', '系统正常运行,数据接口正常返回', '验证环形图各分级占比数值之和', '四个分级占比之和等于100%', 'P0', '等价类划分'], ['TC-02-007', '实验室基本情况统计', '某分级数量为0时扇区不渲染无孤立标签', '异常场景', '某分级数量后台配置为0', '观察环形图对应扇区及引线标注', '对应扇区不渲染,不出现"0间/0%"孤立标签', 'P1', '错误推测法'], ['TC-02-008', '实验室基本情况统计', '数据接口超时时图表区域降级展示', '异常场景', '模拟数据接口超时或报错', '观察图表区域响应', '图表区域显示"暂无数据"占位块,不触发JS异常', 'P0', '错误推测法'], ['TC-02-009', '实验室基本情况统计', '所有实验室属同一分级时环形图渲染完整圆形', '边界场景', '后台配置所有实验室归属同一分级', '观察环形图渲染结果', '环形图渲染为完整圆形,无多余间隔', 'P1', '边界值分析'], ['TC-02-010', '实验室基本情况统计', '模块固定高度260px内容无溢出截断', '边界场景', '系统正常运行,实验室情况页已加载', '检查实验室基本情况统计区域高度及内容显示', '模块高度固定260px,内容无超出或截断', 'P1', '边界值分析'], // =================================================== // 模块03:实验室安全分级统计 // =================================================== ['TC-03-001', '实验室安全分级统计', '堆叠柱状图图例颜色与图形一一对应', '正常场景', '系统正常运行,实验室情况页已加载', '查看堆叠柱状图顶部图例', '图例显示I~IV级,红橙黄蓝颜色与图形颜色一一对应', 'P1', '场景法'], ['TC-03-002', '实验室安全分级统计', '默认一屏显示6个柱子X轴含名称与总数', '正常场景', '系统正常运行,X轴数据>=6个', '查看初始加载时X轴柱子数量及标签', '一屏展示6个柱子,X轴每柱下方同时显示二级单位名称(可换行)及实验室总数', 'P0', '场景法'], ['TC-03-003', '实验室安全分级统计', '超过6个数据时每5秒自动向右滚动1个单位', '正常场景', '系统正常运行,X轴数据>6个', '等待5秒观察图表滚动行为', '每隔5秒自动向右滚动1个X轴单位,动画流畅,使用dataZoom实现', 'P0', '场景法'], ['TC-03-004', '实验室安全分级统计', '滚动到最后数据后自动循环从第一个开始', '正常场景', '系统正常运行,X轴数据>6个,已滚动至最后一个', '等待下次滚动', '自动循环回第一个数据重新开始,无卡顿或跳跃', 'P1', '场景法'], ['TC-03-005', '实验室安全分级统计', 'Tooltip悬停显示深色背景蓝色边框', '正常场景', '系统正常运行,实验室情况页已加载', '鼠标悬停在某个柱状条上', 'Tooltip背景为rgba(6,22,56,0.9),边框为蓝色,内容含各分级数量', 'P1', '场景法'], ['TC-03-006', '实验室安全分级统计', '某单位实验室总数为0时柱子不渲染或高度为0', '异常场景', '后台配置某二级单位实验室总数为0', '观察对应柱子渲染及X轴总数显示', '对应柱子不渲染或高度为0,X轴总数显示0', 'P1', '错误推测法'], ['TC-03-007', '实验室安全分级统计', 'X轴数据恰好6个时不触发自动滚动', '边界场景', '后台配置X轴数据恰好为6个', '等待超过5秒观察是否滚动', '不触发自动滚动,图表静态展示', 'P1', '边界值分析'], ['TC-03-008', '实验室安全分级统计', 'X轴数据为1个时单柱居中不触发滚动', '边界场景', '后台配置X轴数据仅1个', '观察图表展示与滚动行为', '单柱居中显示,不触发滚动', 'P2', '边界值分析'], ['TC-03-009', '实验室安全分级统计', 'X轴数据为7个时滚动1步即循环', '边界场景', '后台配置X轴数据为7个', '等待滚动并观察循环行为', '滚动仅1步即循环,展示正常', 'P2', '边界值分析'], // =================================================== // 模块04:实验室进入人数统计及走势 // =================================================== ['TC-04-001', '实验室进入人数统计及走势', '翻牌器同行显示今日总进入与当前实验人数', '正常场景', '系统正常运行,实验室情况页已加载', '查看左栏底部翻牌器区域布局与数值', '5位数字翻牌器(今日总进入)与4位数字翻牌器(当前实验人数)同行显示,字号突出', 'P0', '场景法'], ['TC-04-002', '实验室进入人数统计及走势', '翻牌器数字方块样式与发光动画正常', '正常场景', '系统正常运行,实验室情况页已加载', '查看翻牌器每个数字方块样式及动画', '每个数字为独立方块(32×42px),有渐变背景+边框发光动效,2s周期呼吸动画', 'P1', '场景法'], ['TC-04-003', '实验室进入人数统计及走势', '双折线图正确展示0至24点9个时段', '正常场景', '系统正常运行,数据接口正常返回', '查看折线图X轴标签与双折线显示', '正确展示0:00~24:00共9个时段,进入人数(科技蓝)与实验人数(深蓝)两条折线颜色区分明确', 'P0', '场景法'], ['TC-04-004', '实验室进入人数统计及走势', '折线图面积填充渐变效果正确', '正常场景', '系统正常运行,实验室情况页已加载', '查看折线图面积填充样式', '两条折线下方均有渐变面积填充效果,smooth曲线样式', 'P2', '场景法'], ['TC-04-005', '实验室进入人数统计及走势', '今日进入人数为0时翻牌器显示0不出现NaN', '异常场景', '后台配置今日进入人数为0', '观察翻牌器显示', '翻牌器显示0,不出现空白或NaN', 'P0', '错误推测法'], ['TC-04-006', '实验室进入人数统计及走势', '23:59时折线图最后时段数据无断档', '边界场景', '系统运行至23:59', '观察折线图最后时段数据', '最后时段数据正确填入,不出现数据断档', 'P1', '边界值分析'], ['TC-04-007', '实验室进入人数统计及走势', '人数位数增加时翻牌器自动扩展不截断', '边界场景', '后台配置人数从3位数跳变为4位数', '观察翻牌器位数变化', '翻牌器自动扩展位数,不出现数字截断', 'P1', '边界值分析'], ['TC-04-008', '实验室进入人数统计及走势', '模块固定高度280px内容无溢出', '边界场景', '系统正常运行,实验室情况页已加载', '检查该模块整体高度和内容', '模块高度固定280px,翻牌器和折线图均完整显示,无截断', 'P1', '边界值分析'], // =================================================== // 模块05:实验环境安全智能感知 // =================================================== ['TC-05-001', '实验环境安全智能感知', '列表由上向上自动滚动流畅无卡顿', '正常场景', '系统正常运行,实验室情况页已加载', '观察中栏顶部环境感知列表滚动行为', '列表无缝滚动(translateY(-50%)+数据翻倍),40s一轮循环,无卡顿跳跃', 'P0', '场景法'], ['TC-05-002', '实验环境安全智能感知', '每个条目完整显示名称单位及5个传感器值', '正常场景', '系统正常运行,数据接口正常返回', '查看列表中每个实验室条目内容', '正确显示实验室名称(房号)-二级单位、温度、湿度、TVOC、CO₂、O₂五个传感器实时数值', 'P0', '场景法'], ['TC-05-003', '实验环境安全智能感知', '温度正常(≤30°C)时条目无异常样式', '正常场景', '传感器温度≤30°C', '查看温度字段显示', '温度值显示正常颜色,无报警图标,条目无红色高亮', 'P0', '等价类划分'], ['TC-05-004', '实验环境安全智能感知', '温度异常(>30°C)触发红色高亮+报警图标', '异常场景', '传感器温度>30°C', '查看对应实验室条目温度字段显示', '温度值红色高亮,显示⚠报警图标,条目整体触发脉冲box-shadow动画', 'P0', '边界值分析'], ['TC-05-005', '实验环境安全智能感知', '温度恰好30°C时不触发报警(边界为>)', '边界场景', '传感器温度=30°C', '查看温度=30°C的条目显示', '温度值不触发异常高亮,显示正常样式', 'P0', '边界值分析'], ['TC-05-006', '实验环境安全智能感知', 'TVOC异常(>1.5mg/m³)触发报警', '异常场景', '传感器TVOC>1.5mg/m³', '查看该条目TVOC字段', 'TVOC值红色高亮+⚠图标+脉冲动画', 'P0', '边界值分析'], ['TC-05-007', '实验环境安全智能感知', 'TVOC恰好1.5mg/m³时不触发报警', '边界场景', '传感器TVOC=1.5mg/m³', '查看TVOC=1.5mg/m³的条目', 'TVOC值不触发异常高亮', 'P0', '边界值分析'], ['TC-05-008', '实验环境安全智能感知', 'CO₂异常(>900ppm)触发报警', '异常场景', '传感器CO₂>900ppm', '查看该条目CO₂字段', 'CO₂值红色高亮+⚠图标+脉冲动画', 'P0', '边界值分析'], ['TC-05-009', '实验环境安全智能感知', 'CO₂恰好900ppm时不触发报警', '边界场景', '传感器CO₂=900ppm', '查看CO₂=900ppm的条目', 'CO₂值不触发异常高亮', 'P0', '边界值分析'], ['TC-05-010', '实验环境安全智能感知', 'O₂异常(<19.5%)触发报警', '异常场景', '传感器O₂<19.5%', '查看该条目O₂字段', 'O₂值红色高亮+⚠图标+脉冲动画', 'P0', '边界值分析'], ['TC-05-011', '实验环境安全智能感知', 'O₂恰好19.5%时不触发报警', '边界场景', '传感器O₂=19.5%', '查看O₂=19.5%的条目', 'O₂值不触发异常高亮', 'P0', '边界值分析'], ['TC-05-012', '实验环境安全智能感知', '多项传感器同时异常全部标红', '异常场景', '同一条目多个传感器值超出阈值', '查看多传感器异常条目', '所有超阈值的传感器字段均红色高亮并显示⚠图标', 'P0', '错误推测法'], ['TC-05-013', '实验环境安全智能感知', '传感器全部离线时数值显示横杠不触发误报警', '异常场景', '某实验室传感器全部离线', '观察该条目各传感器数值与报警图标', '各传感器数值显示"--",不触发误报警,不渲染报警图标', 'P0', '错误推测法'], ['TC-05-014', '实验环境安全智能感知', '条目超100条时滚动帧率不低于30FPS', '边界场景', '后台配置实验室条目数量超过100条', '观察列表滚动帧率', '滚动性能不出现明显卡顿,FPS不低于30', 'P1', '边界值分析'], // =================================================== // 模块06:实验室实时风险预警 // =================================================== ['TC-06-001', '实验室实时风险预警', '本月预警响应总数大字体发光动画正常', '正常场景', '系统正常运行,本月有预警记录', '查看中栏预警模块顶部数字', '大字体数字正常显示本月预警总数,有发光文字动画(2s周期)', 'P0', '场景法'], ['TC-06-002', '实验室实时风险预警', '原有传感器报警信息完整展示', '正常场景', '系统正常运行,有传感器超阈值记录', '查看预警滚动列表中传感器类报警条目', '每条包含:实验室名称-二级单位、异常传感器名称及数值(橙色高亮)、预警时间(YYYY-MM-DD HH:mm:ss)', 'P0', '场景法'], ['TC-06-003', '实验室实时风险预警', '新增化学品违规带离报警信息正常展示', '正常场景', '系统正常运行,有化学品违规带离记录', '查看预警滚动列表中化学品类报警条目', '每条包含:实验室名称-二级单位、实验人员未正常使用违规带离描述、预警时间(YYYY-MM-DD HH:mm:ss)', 'P0', '场景法'], ['TC-06-004', '实验室实时风险预警', '传感器报警与化学品报警融合在同一列表中', '正常场景', '系统同时有两类预警记录', '查看预警列表整体内容排列', '两类预警数据融合展示在一个滚动列表中,可视觉区分但共存于同一列表', 'P0', '场景法'], ['TC-06-005', '实验室实时风险预警', '预警时间格式正确(YYYY-MM-DD HH:mm:ss)', '正常场景', '系统正常运行,有预警记录', '查看列表中各条预警时间字段', '每条预警时间均符合YYYY-MM-DD HH:mm:ss格式', 'P1', '等价类划分'], ['TC-06-006', '实验室实时风险预警', '列表无缝循环滚动30s一轮无跳跃卡顿', '正常场景', '系统正常运行,实验室情况页已加载', '观察预警列表滚动动画', '列表30s一轮循环无缝滚动,无跳跃或卡顿', 'P0', '场景法'], ['TC-06-007', '实验室实时风险预警', '左侧3px橙色竖条及脉冲动画正常显示', '正常场景', '系统正常运行,实验室情况页已加载', '查看预警列表每条左侧样式', '每条预警左侧显示3px橙色竖条,有脉冲动画(3s周期)', 'P2', '场景法'], ['TC-06-008', '实验室实时风险预警', '本月无预警记录时列表显示占位文字', '异常场景', '后台配置本月无任何预警记录', '观察列表和计数器', '列表显示"暂无预警记录"占位文字,总数计数器显示0', 'P0', '错误推测法'], ['TC-06-009', '实验室实时风险预警', '模块固定高度320px内容无溢出', '边界场景', '系统正常运行,实验室情况页已加载', '检查预警模块高度', '模块高度固定320px,内容正常显示无溢出', 'P1', '边界值分析'], // =================================================== // 模块07:智能环境感知应用设备统计 // =================================================== ['TC-07-001', '智能环境感知应用设备统计', '在线/离线设备数量卡片颜色正确', '正常场景', '系统正常运行,实验室情况页已加载', '查看右栏顶部设备统计卡片', '在线设备数量显示科技蓝色,离线设备数量显示灰色,布局不塌陷', 'P0', '场景法'], ['TC-07-002', '智能环境感知应用设备统计', '仪表盘正确渲染在线率指针位置对应', '正常场景', '系统正常运行,数据接口正常返回', '查看ECharts仪表盘图表渲染', 'ECharts仪表盘正确渲染,范围210°~-30°,显示在线率百分比,三段颜色渐变(70%暗蓝/90%中蓝/100%亮蓝),指针位置与数值对应', 'P0', '场景法'], ['TC-07-003', '智能环境感知应用设备统计', '设备类型列表4项纵排正确显示数量', '正常场景', '系统正常运行,实验室情况页已加载', '查看右下设备类型列表内容', '纵向列出:电子信息铭牌、化学品智能终端、传感器、智能设备,各自显示对应数量', 'P0', '场景法'], ['TC-07-004', '智能环境感知应用设备统计', '在线率计算值与展示值一致', '正常场景', '系统正常运行,数据接口正常返回', '计算在线率=在线数/(在线数+离线数),与仪表盘展示值对比', '仪表盘展示在线率与计算值完全一致', 'P0', '等价类划分'], ['TC-07-005', '智能环境感知应用设备统计', '所有设备均离线时在线率显示0%指针最低', '异常场景', '后台配置所有设备均离线', '观察在线率显示和仪表盘指针', '在线率显示0%,指针指向最低档位,不出现NaN或空白', 'P0', '错误推测法'], ['TC-07-006', '智能环境感知应用设备统计', '在线率恰好50%时仪表盘指针居中', '边界场景', '后台配置在线数等于离线数', '观察仪表盘指针位置', '指针指向表盘正中位置', 'P2', '边界值分析'], ['TC-07-007', '智能环境感知应用设备统计', '设备总数为1且在线时在线率显示100%满格', '边界场景', '后台配置设备总数为1且在线', '观察在线率显示和仪表盘', '在线率显示100%,仪表盘满格', 'P2', '边界值分析'], // =================================================== // 模块08:实验室设备分类及使用统计 // =================================================== ['TC-08-001', '实验室设备分类及使用统计', '饼图正确渲染7类设备分类分布', '正常场景', '系统正常运行,实验室情况页已加载', '查看右栏中部饼图(pie, radius 30%~60%)', 'ECharts饼图正确渲染,显示7类设备:分析仪器、安全防护、化学试剂设备、电气设备、力学测试、环境监测、通用设备', 'P0', '等价类划分'], ['TC-08-002', '实验室设备分类及使用统计', '右侧纵向图例完整对应各分类', '正常场景', '系统正常运行,实验室情况页已加载', '查看饼图右侧图例', '图例纵向显示7类设备名称及对应颜色,各项完整', 'P1', '场景法'], ['TC-08-003', '实验室设备分类及使用统计', '中部3个统计卡片数值格式正确', '正常场景', '系统正常运行,数据接口正常返回', '查看中部卡片:设备总数/使用总时长/设备使用率', '3个卡片分别展示:设备总数、使用总时长(h)、设备使用率(%),格式正确', 'P0', '场景法'], ['TC-08-004', '实验室设备分类及使用统计', '底部4个状态卡片颜色与语义对应', '正常场景', '系统正常运行,实验室情况页已加载', '查看底部状态卡片颜色', '使用(蓝)、空闲(绿)、正常(橙)、维修(红)4个卡片颜色正确,布局无塌陷', 'P1', '等价类划分'], ['TC-08-005', '实验室设备分类及使用统计', '某分类设备数量为0时图表不出现NaN', '异常场景', '后台配置某分类设备数量为0', '观察饼图对应扇区', '对应扇区不渲染,不出现NaN或零值引线标注漂移', 'P1', '错误推测法'], ['TC-08-006', '实验室设备分类及使用统计', '只有1种设备分类时饼图渲染完整圆形', '边界场景', '后台配置只有1种设备分类', '观察饼图渲染', '渲染为完整圆形', 'P2', '边界值分析'], // =================================================== // 模块09:化学品库存动态统计(新增模块) // =================================================== ['TC-09-001', '化学品库存动态统计', '模块位于右侧最下方(设备统计下方)', '正常场景', '系统正常运行,实验室情况页已加载', '检查右侧栏目排列顺序', '化学品库存动态统计模块位于「实验室设备分类及使用统计」下方,在右侧最下方位置', 'P0', '场景法'], ['TC-09-002', '化学品库存动态统计', '饼图正确展示两类化学品外侧引线标注三项完整', '正常场景', '系统正常运行,数据接口正常返回', '查看饼图两扇区及外侧引线标注', '管控与非管控两类扇区外侧引线标注分类名称+数量(L)+占比,无侧边图例', 'P0', '场景法'], ['TC-09-003', '化学品库存动态统计', '饼图无Tab切换直接展示单一饼图', '正常场景', '系统正常运行,实验室情况页已加载', '查看化学品统计区域是否存在Tab控件', '模块内无Tab切换控件,直接展示饼图', 'P1', '场景法'], ['TC-09-004', '化学品库存动态统计', '右侧统计区四项数据完整且配色正确', '正常场景', '系统正常运行,数据接口正常返回', '查看右侧统计数据区域各项', '展示:存量化学品总量(L)、管控类总量及占比、非管控类总量及占比、总类目数,各含SVG圆弧进度环,配色正确', 'P0', '场景法'], ['TC-09-005', '化学品库存动态统计', '管控类统计使用红色系配色SVG进度环与占比一致', '正常场景', '系统正常运行,数据接口正常返回', '查看管控类化学品统计项颜色和进度环', '管控类总量及占比显示红色系配色,SVG圆弧进度环进度与占比数值完全一致', 'P0', '等价类划分'], ['TC-09-006', '化学品库存动态统计', '非管控类统计使用青色系配色SVG进度环正确', '正常场景', '系统正常运行,数据接口正常返回', '查看非管控类化学品统计项颜色', '非管控类总量及占比显示青色系配色,SVG圆弧进度环正确渲染', 'P0', '等价类划分'], ['TC-09-007', '化学品库存动态统计', '总类目数使用金色系配色SVG进度环', '正常场景', '系统正常运行,数据接口正常返回', '查看总类目数统计项颜色', '总类目数显示金色系配色(如#ffd740),含SVG圆弧进度环', 'P1', '等价类划分'], ['TC-09-008', '化学品库存动态统计', '管控类加非管控类等于存量总量逻辑自洽', '正常场景', '系统正常运行,数据接口正常返回', '验证:管控类总量(L)+非管控类总量(L)=存量化学品总量(L)', '逻辑等式成立,两类之和等于总量', 'P0', '等价类划分'], ['TC-09-009', '化学品库存动态统计', '所有化学品数量单位统一为L无混用', '正常场景', '系统正常运行,实验室情况页已加载', '检查模块中所有数量显示单位', '化学品数量相关显示均以L为单位,无其他单位混用', 'P1', '等价类划分'], ['TC-09-010', '化学品库存动态统计', '管控类化学品数量为0时饼图不渲染进度环归零', '异常场景', '后台配置管控类化学品数量为0', '观察饼图扇区、SVG进度环及占比显示', '饼图该扇区不渲染,SVG进度环进度为0,占比显示"0%"', 'P0', '错误推测法'], ['TC-09-011', '化学品库存动态统计', '数据接口异常时统计区显示占位进度环归零', '异常场景', '模拟数据接口异常', '观察右侧各统计项和SVG进度环', '各统计项显示"--"占位,SVG进度环归零,不触发JS异常', 'P0', '错误推测法'], ['TC-09-012', '化学品库存动态统计', '存量总量极大时自动换算不出现溢出截断', '边界场景', '后台配置存量总量超过999999L', '观察右侧统计区数值显示', '自动换算为合理精度或万L表示,不出现溢出截断', 'P1', '边界值分析'], ['TC-09-013', '化学品库存动态统计', '两类各占50%时饼图平分引线不重叠', '边界场景', '后台配置两类各占50%', '观察饼图引线排列', '饼图平分且两侧引线不重叠', 'P2', '边界值分析'], // =================================================== // 模块10:全屏预警弹窗 // =================================================== ['TC-10-001', '全屏预警弹窗', '传感器超阈值时弹窗自动弹出覆盖视口z-index最高', '正常场景', '系统正常运行,传感器数据超出阈值', '观察全屏预警弹窗是否弹出', '弹窗自动弹出,覆盖整个视口,z-index高于所有大屏内容层', 'P0', '场景法'], ['TC-10-002', '全屏预警弹窗', '页面加载15秒后自动触发预警弹窗(Demo演示)', '正常场景', '实验室情况页加载完成', '等待页面加载后15秒', '预警弹窗自动弹出,全屏半透明红色覆盖层出现,用于Demo演示', 'P1', '场景法'], ['TC-10-003', '全屏预警弹窗', '弹窗整体呈科幻红色报警样式四边光边框闪烁', '正常场景', '预警弹窗已触发', '观察弹窗整体视觉效果', '全屏半透明红色覆盖+1s周期呼吸闪烁+四周红色光晕+四边光边框0.8s周期闪烁', 'P1', '场景法'], ['TC-10-004', '全屏预警弹窗', 'showAlert函数传参正确填充弹窗内容', '正常场景', '页面已加载', '调用showAlert(lab, building, unit, param, value, person, phone)后查看弹窗内容', '弹窗显示所有传入参数对应内容,数据与参数完全一致', 'P0', '场景法'], ['TC-10-005', '全屏预警弹窗', '左侧信息区实验室名称楼栋楼层所属单位正确显示', '正常场景', '预警弹窗已触发', '查看弹窗左侧实验室信息各字段', '实验室名称(房号)、楼栋-楼层、二级单位名称均正确显示', 'P0', '场景法'], ['TC-10-006', '全屏预警弹窗', '异常参数和当前数值红色高亮显示', '正常场景', '预警弹窗已触发', '查看弹窗中异常参数和当前数值字段', '异常传感器名称和当前异常数值均以红色高亮显示', 'P0', '等价类划分'], ['TC-10-007', '全屏预警弹窗', '负责人姓名和联系电话正确显示', '正常场景', '预警弹窗已触发', '查看实验室负责人及联系电话', '负责人姓名和联系电话均正确显示', 'P1', '场景法'], ['TC-10-008', '全屏预警弹窗', '预警时间格式正确(YYYY-MM-DD HH:mm:ss)', '正常场景', '预警弹窗已触发', '查看预警时间字段', '预警时间显示格式符合YYYY-MM-DD HH:mm:ss', 'P1', '等价类划分'], ['TC-10-009', '全屏预警弹窗', '右侧监控画面区域样式正确显示', '正常场景', '预警弹窗已触发', '查看弹窗右侧视频区域', '标题"实时监控画面"+红色闪烁圆点,监控画面区域暗红色背景+扫描线纹理,左上角显示REC+摄像头名称', 'P1', '场景法'], ['TC-10-010', '全屏预警弹窗', '弹窗显示"应急疏散"按钮可正常点击', '正常场景', '预警弹窗已触发', '查看预警弹窗按钮区域', '弹窗内显示「应急疏散」按钮(琥珀色),可正常点击', 'P0', '场景法'], ['TC-10-011', '全屏预警弹窗', '点击确认按钮弹窗关闭恢复正常大屏', '正常场景', '预警弹窗已显示', '点击底部确认按钮', '弹窗关闭,红色覆盖层消失,恢复正常大屏展示', 'P0', '场景法'], ['TC-10-012', '全屏预警弹窗', '多实验室同时触发预警时弹窗按顺序逐一弹出', '异常场景', '模拟多个实验室同时触发预警', '观察弹窗弹出行为', '弹窗按优先级或时间顺序逐一弹出,不出现多窗口叠加错乱', 'P0', '错误推测法'], ['TC-10-013', '全屏预警弹窗', '弹窗期间传感器恢复正常时弹窗不自动关闭', '边界场景', '弹窗已触发,传感器数据快速恢复正常', '观察弹窗是否自动关闭', '弹窗不自动关闭,需用户手动操作', 'P1', '边界值分析'], // =================================================== // 模块11:应急疏散弹窗(新增模块) // =================================================== ['TC-11-001', '应急疏散弹窗', '点击「应急疏散」按钮弹出疏散弹窗层级正确', '正常场景', '预警弹窗已显示', '点击预警弹窗内的「应急疏散」按钮', '应急疏散弹窗全屏弹出,z-index高于预警弹窗,两层弹窗同时可见互不遮挡', 'P0', '场景法'], ['TC-11-002', '应急疏散弹窗', '弹窗进场动画流畅科幻风格与大屏主题一致', '正常场景', '应急疏散弹窗已打开', '观察弹窗进场动画效果和整体风格', '进场动画流畅无卡顿,深蓝科幻风格与大屏整体主题一致', 'P1', '场景法'], ['TC-11-003', '应急疏散弹窗', '点击关闭按钮仅关闭疏散弹窗预警弹窗保持', '正常场景', '应急疏散弹窗已打开', '点击右上角关闭按钮', '仅关闭应急疏散弹窗,底层全屏预警弹窗保持完整可见', 'P0', '场景法'], ['TC-11-004', '应急疏散弹窗', '疏散路线图显示箭头标识疏散路线方向正确', '正常场景', '应急疏散弹窗已打开', '查看弹窗内疏散路线图及箭头方向', '疏散路线图正确显示,箭头标识疏散方向清晰,符合设计图内容', 'P0', '场景法'], ['TC-11-005', '应急疏散弹窗', '弹窗内容及排版与设计图基本一致', '正常场景', '应急疏散弹窗已打开', '对比设计图与弹窗实际显示内容及排版', '弹窗内容及排版与设计图基本一致,各区域无错位遮挡', 'P0', '场景法'], ['TC-11-006', '应急疏散弹窗', '点击「执行疏散」按钮后显示疏散路线箭头', '正常场景', '应急疏散弹窗已显示,未点击执行疏散', '点击「执行疏散」按钮', '弹窗或图示上出现箭头标识疏散路线,路线清晰可辨', 'P0', '场景法'], ['TC-11-007', '应急疏散弹窗', '未点击执行疏散前不显示疏散路线箭头', '正常场景', '应急疏散弹窗已打开,未点击执行疏散', '查看疏散弹窗中图示内容', '疏散弹窗内图示不显示路线箭头', 'P1', '场景法'], ['TC-11-008', '应急疏散弹窗', '疏散弹窗可正常关闭并返回上层', '正常场景', '应急疏散弹窗已打开', '关闭应急疏散弹窗', '弹窗关闭后返回预警弹窗或正常大屏页面', 'P0', '场景法'], ['TC-11-009', '应急疏散弹窗', '关闭后再次点击应急疏散弹窗正常重新打开', '边界场景', '已打开并关闭应急疏散弹窗', '再次点击「应急疏散」按钮', '弹窗重新正常打开,状态重置(如输入框清空等)', 'P1', '边界值分析'], // =================================================== // 模块12:视频监控-建筑结构导航 // =================================================== ['TC-12-001', '视频监控-建筑结构导航', '切换至视频监控页左侧导航正常显示', '正常场景', '点击顶部「视频监控」按钮', '查看左侧导航栏结构', '左侧300px导航栏正常显示,标题"建筑结构导航"可见,panel样式正确', 'P0', '场景法'], ['TC-12-002', '视频监控-建筑结构导航', '搜索框输入关键字实时过滤树节点', '正常场景', '视频监控页已显示', '在搜索框输入楼栋或楼层名称关键字', '树状结构实时显示包含关键字的节点,不匹配项隐藏或灰显', 'P0', '场景法'], ['TC-12-003', '视频监控-建筑结构导航', '搜索框聚焦时边框发光效果', '正常场景', '视频监控页已显示', '点击搜索框', '搜索框聚焦时边框出现发光效果', 'P2', '场景法'], ['TC-12-004', '视频监控-建筑结构导航', '下拉筛选可按二级单位过滤节点', '正常场景', '视频监控页已显示', '展开筛选下拉,选择某二级单位(如:化学品安全研究所)', '树状结构只显示属于该二级单位的楼栋/楼层/房间节点', 'P0', '等价类划分'], ['TC-12-005', '视频监控-建筑结构导航', '下拉筛选包含四个单位选项', '正常场景', '视频监控页已显示', '展开筛选下拉查看所有选项', '下拉包含:安全技术研究所、职业安全研究所、化学品安全研究所、矿山安全研究所四个选项', 'P1', '等价类划分'], ['TC-12-006', '视频监控-建筑结构导航', '树状结构四级层级可独立展开折叠', '正常场景', '视频监控页已显示', '逐级点击院区→楼栋→楼层→房间节点展开/折叠', '树状结构为四层:院区→楼栋→楼层→房间,每级可独立展开/折叠', 'P0', '流程分析法'], ['TC-12-007', '视频监控-建筑结构导航', '选中节点高亮(科技蓝背景+左侧竖线)', '正常场景', '视频监控页已显示', '点击某一树节点', '被点击节点高亮显示科技蓝背景和左侧蓝色竖线', 'P1', '场景法'], ['TC-12-008', '视频监控-建筑结构导航', '节点悬停光扫效果', '正常场景', '视频监控页已显示', '鼠标悬停在树节点上', '节点显示light sweep光扫效果', 'P2', '场景法'], ['TC-12-009', '视频监控-建筑结构导航', '子节点展开时有淡入动画(0.35s)', '正常场景', '视频监控页已显示', '点击展开有子节点的树节点', '子节点以0.35s淡入动画方式展开,动画流畅', 'P2', '场景法'], ['TC-12-010', '视频监控-建筑结构导航', '搜索无匹配时树状图显示无匹配结果提示', '异常场景', '视频监控页已显示', '输入无匹配的搜索关键词', '树状图显示"无匹配结果"提示,不出现空白区域', 'P1', '错误推测法'], ['TC-12-011', '视频监控-建筑结构导航', '搜索框清空后树状图恢复完整展示', '异常场景', '搜索框已有内容', '清空搜索框', '树状图恢复完整展示', 'P1', '场景法'], ['TC-12-012', '视频监控-建筑结构导航', '树状图仅1个根节点时折叠展开按钮不显示或置灰', '边界场景', '后台配置树状图仅1个根节点', '观察折叠/展开按钮状态', '折叠/展开按钮不显示或置灰', 'P2', '边界值分析'], // =================================================== // 模块13:视频监控-视频区域 // =================================================== ['TC-13-001', '视频监控-视频区域', '3×3九宫格摄像头科幻风边框正常显示', '正常场景', '视频监控页已显示', '查看右侧视频区域九宫格', '3×3共9个摄像头格子均正常显示,科幻风格外层渐变背景+内外双层边框效果', 'P0', '场景法'], ['TC-13-002', '视频监控-视频区域', '面包屑显示当前路径(院区→楼栋→楼层)', '正常场景', '视频监控页已显示', '查看视频区域顶部面包屑', '面包屑显示:院区→楼栋名称→楼层名称,路径正确', 'P1', '场景法'], ['TC-13-003', '视频监控-视频区域', '摄像头格子四角L形发光装饰呼吸动画', '正常场景', '视频监控页已显示', '观察摄像头格子四角装饰效果', '四角L形发光装饰有呼吸动画(2.5s周期,stagger 0.6s),效果正常', 'P2', '场景法'], ['TC-13-004', '视频监控-视频区域', '每个摄像头左上角显示绿色闪烁圆点和编号', '正常场景', '视频监控页已显示', '查看每个摄像头格子左上角', '显示绿色闪烁圆点(2s周期)和摄像头编号', 'P1', '场景法'], ['TC-13-005', '视频监控-视频区域', '摄像头内扫描线动画6s周期', '正常场景', '视频监控页已显示', '观察摄像头内部动画效果', '摄像头内有扫描线动画,6s一个周期,循环运行', 'P2', '场景法'], ['TC-13-006', '视频监控-视频区域', '摄像头悬停时轻微放大+增强发光', '正常场景', '视频监控页已显示', '鼠标悬停在某个摄像头格子上', '摄像头格子轻微放大并增强发光效果', 'P2', '场景法'], ['TC-13-007', '视频监控-视频区域', '九宫格stagger入场动画每格延迟0.05s', '正常场景', '切换至视频监控页面', '观察视频页切换时九宫格入场动画', '9个格子依次以0.05s间隔stagger入场,动画流畅', 'P2', '场景法'], ['TC-13-008', '视频监控-视频区域', '每页第一个为AI智能摄像头橙金色主题', '正常场景', '视频监控页已显示', '查看第一个摄像头格子样式', '第一个格子使用橙金色主题替代蓝色,内部扫描线为橙色', 'P0', '等价类划分'], ['TC-13-009', '视频监控-视频区域', 'AI徽章显示「AI智能」渐变背景+脉冲动画', '正常场景', '视频监控页已显示', '查看AI摄像头右上角徽章', '"AI智能"徽章显示渐变背景,有脉冲动画(1.5s周期)', 'P1', '场景法'], ['TC-13-010', '视频监控-视频区域', '点击下一页切换摄像头组面包屑同步更新', '正常场景', '视频监控页已显示,存在多页(>9个摄像头)', '点击"下一页"按钮', '视频区域切换至下一页摄像头组,分页数字更新,面包屑信息同步', 'P0', '场景法'], ['TC-13-011', '视频监控-视频区域', '点击上一页切换至上一组摄像头', '正常场景', '视频监控页在非第一页', '点击"上一页"按钮', '视频区域切换至上一页摄像头组', 'P0', '场景法'], ['TC-13-012', '视频监控-视频区域', '第一页时上一页按钮禁用不可点击', '边界场景', '视频监控页在第一页', '查看"上一页"按钮状态', '第一页时"上一页"按钮不可点击或无响应', 'P1', '边界值分析'], ['TC-13-013', '视频监控-视频区域', '最后一页时下一页按钮禁用不可点击', '边界场景', '视频监控页在最后一页', '查看"下一页"按钮状态', '最后一页时"下一页"按钮不可点击或无响应', 'P1', '边界值分析'], ['TC-13-014', '视频监控-视频区域', '摄像头总数恰好9个时下一页按钮置灰', '边界场景', '后台配置摄像头总数为9', '观察翻页按钮状态', '下一页按钮置灰不可点击', 'P1', '边界值分析'], ['TC-13-015', '视频监控-视频区域', '摄像头总数为0时九宫格全部显示占位', '边界场景', '后台配置摄像头总数为0', '观察九宫格和翻页按钮状态', '九宫格全部显示"暂无信号"占位格,翻页按钮均置灰', 'P1', '边界值分析'], // =================================================== // 模块14:自适应缩放与全屏 // =================================================== ['TC-14-001', '自适应缩放与全屏', '1920×1080分辨率下无缩放完整显示', '正常场景', '浏览器分辨率1920×1080全屏打开页面', '检查页面整体显示效果', '页面完整无缩放显示,无滚动条,1920×1080px完整呈现', 'P0', '场景法'], ['TC-14-002', '自适应缩放与全屏', '分辨率小于1920×1080时按比例缩放居中显示', '正常场景', '浏览器窗口缩小至非1920×1080', '调整浏览器窗口大小,观察页面缩放效果', '页面通过CSS scale等比缩放居中显示,不变形不溢出', 'P0', '场景法'], ['TC-14-003', '自适应缩放与全屏', 'resize事件实时更新缩放比无错位', '正常场景', '页面已加载', '拖动调整浏览器窗口大小', '缩放比实时计算更新(Math.min(vw/1920, vh/1080)),页面不出现错位', 'P0', '场景法'], ['TC-14-004', '自适应缩放与全屏', '首次点击页面触发全屏', '正常场景', '页面已加载,非全屏状态', '首次点击页面任意位置', '调用requestFullscreen()进入全屏模式', 'P1', '场景法'], ['TC-14-005', '自适应缩放与全屏', '全屏触发仅一次(once:true)', '边界场景', '页面已加载,已触发一次全屏', '再次点击页面', '不再重复触发requestFullscreen(),使用once:true确保只触发一次', 'P1', '边界值分析'], ['TC-14-006', '自适应缩放与全屏', '浏览器不支持全屏API时页面正常显示不报错', '异常场景', '使用不支持Fullscreen API的浏览器', '打开页面观察显示和错误', '页面正常显示,不出现白屏、黑屏或JS报错', 'P1', '错误推测法'], // =================================================== // 模块15:ECharts图表通用规范 // =================================================== ['TC-15-001', 'ECharts图表通用', '所有图表Tooltip统一深色背景蓝色边框', '正常场景', '任意ECharts图表已渲染', '鼠标悬停在任意ECharts图表数据上', 'Tooltip背景为rgba(6,22,56,0.9),边框为蓝色,样式全局统一', 'P1', '等价类划分'], ['TC-15-002', 'ECharts图表通用', '窗口resize时所有图表自动调用resize', '正常场景', '页面已加载,所有图表已渲染', '调整浏览器窗口大小', '所有ECharts图表均自动调用.resize()方法,图表自适应新尺寸', 'P0', '场景法'], ['TC-15-003', 'ECharts图表通用', '图表初始化延迟200ms等待DOM渲染', '正常场景', '切换至实验室情况页', '观察图表渲染时序', '图表在DOM渲染后延迟200ms初始化,不出现容器尺寸获取错误', 'P1', '场景法'], ['TC-15-004', 'ECharts图表通用', '切回实验室页时ECharts延迟100ms重新初始化', '正常场景', '从视频监控页切换回实验室情况页', '切换页面观察图表状态', '延迟100ms后所有ECharts图表重新初始化并正确渲染,无白屏', 'P0', '场景法'], ['TC-15-005', 'ECharts图表通用', 'ECharts资源加载失败时图表区域显示占位块', '异常场景', '模拟ECharts资源加载失败', '观察图表区域响应', '对应图表区域显示"图表加载失败"占位块,不影响其他模块渲染', 'P0', '错误推测法'], // =================================================== // 模块16:全局样式与动效 // =================================================== ['TC-16-001', '全局样式与动效', '主背景深蓝渐变正确显示', '正常场景', '页面已加载', '查看页面整体背景', '页面背景显示#020c1b→#061630→#0a2550深蓝渐变', 'P1', '场景法'], ['TC-16-002', '全局样式与动效', '面板背景毛玻璃效果正确渲染', '正常场景', '页面已加载', '查看各功能面板背景样式', '面板背景为rgba(6,22,56,0.82)配合backdrop-filter:blur(8px)毛玻璃效果', 'P1', '场景法'], ['TC-16-003', '全局样式与动效', '面板顶部2px渐变高亮线正确显示', '正常场景', '页面已加载', '查看各面板顶部边缘', '各面板顶部有2px渐变高亮线(accent色)', 'P2', '场景法'], ['TC-16-004', '全局样式与动效', '面板四角装饰元素3s呼吸动画', '正常场景', '页面已加载', '观察面板四角装饰效果', '各面板四角有corner-deco装饰元素,有3s周期呼吸动画', 'P2', '场景法'], ['TC-16-005', '全局样式与动效', '全局技术网格覆盖层正常显示', '正常场景', '页面已加载', '查看页面整体视觉效果', '页面有半透明技术网格覆盖层持续显示', 'P2', '场景法'], ['TC-16-006', '全局样式与动效', '浮动粒子效果20s周期正常运行', '正常场景', '页面已加载', '观察页面背景动效', '浮动粒子以20s周期漂浮,动效正常运行无卡顿', 'P2', '场景法'], ['TC-16-007', '全局样式与动效', '所有文字为中文简体无乱码', '正常场景', '页面已加载', '查看页面所有文本标签', '所有标签和文案均为简体中文,无英文混用或乱码', 'P1', '等价类划分'], ['TC-16-008', '全局样式与动效', '多动效同时运行时页面帧率流畅无卡顿', '异常场景', '系统正常运行,所有动效同时运行', '观察页面帧率和流畅度', '页面帧率保持流畅,无明显卡顿', 'P1', '错误推测法'], ['TC-16-009', '全局样式与动效', '页面持续运行8小时以上无内存泄漏退化', '边界场景', '系统正常运行超过8小时', '持续观察各实时刷新模块性能', '时钟、传感器数据、预警通知等模块不出现因内存泄漏导致的性能退化', 'P0', '边界值分析'], ]; // ====================================================== // 创建Excel工作簿(带样式) // ====================================================== // 颜色常量 const COLOR_HEADER = '000080'; // 标题行:海军蓝 const COLOR_NORMAL = 'CCFFFF'; // 正常场景:浅青色 const COLOR_ABNORMAL = 'FF99CC'; // 异常场景:浅粉红 const COLOR_BOUNDARY = 'FFFF99'; // 边界场景:浅黄色 function getRowColor(testType) { if (testType === '正常场景') return COLOR_NORMAL; if (testType === '异常场景') return COLOR_ABNORMAL; if (testType === '边界场景') return COLOR_BOUNDARY; return COLOR_NORMAL; } function makeCell(value, bgColor, isHeader) { const cell = { v: value === undefined || value === null ? '' : value, t: 's' }; cell.s = { fill: { patternType: 'solid', fgColor: { rgb: bgColor }, bgColor: { rgb: '000000' } }, alignment: { wrapText: true, vertical: 'center' } }; if (isHeader) { cell.s.font = { bold: true, color: { rgb: 'FFFFFF' } }; } return cell; } const wb = XLSX.utils.book_new(); const headers = ['用例编号', '模块名称', '测试场景', '测试类型', '前置条件', '测试操作', '预期结果', '优先级', '设计方法', '测试结果']; // 构建工作表数据 const ws = {}; const cols = ['A','B','C','D','E','F','G','H','I','J']; // 写入标题行 headers.forEach((h, ci) => { const addr = cols[ci] + '1'; ws[addr] = makeCell(h, COLOR_HEADER, true); }); // 写入数据行 testCases.forEach((row, ri) => { const excelRow = ri + 2; const testType = row[3]; // 测试类型 const bgColor = getRowColor(testType); for (let ci = 0; ci < 10; ci++) { const addr = cols[ci] + excelRow; const val = row[ci] !== undefined ? row[ci] : ''; ws[addr] = makeCell(val, bgColor, false); } }); // 设置工作表范围 ws['!ref'] = 'A1:J' + (testCases.length + 1); // 设置行高:标题行30pt,数据行25pt const rowHeights = [{ hpt: 30, hpx: 30 }]; for (let i = 0; i < testCases.length; i++) { rowHeights.push({ hpt: 25, hpx: 25 }); } ws['!rows'] = rowHeights; // 设置列宽 ws['!cols'] = [ { wch: 12 }, // 用例编号 { wch: 20 }, // 模块名称 { wch: 36 }, // 测试场景 { wch: 10 }, // 测试类型 { wch: 32 }, // 前置条件 { wch: 40 }, // 测试操作 { wch: 55 }, // 预期结果 { wch: 8 }, // 优先级 { wch: 12 }, // 设计方法 { wch: 14 }, // 测试结果 ]; XLSX.utils.book_append_sheet(wb, ws, '测试用例'); const outputPath = 'e:/anKeYuan-largeScreen-1080/test_case/test_case.xlsx'; XLSX.writeFile(wb, outputPath, { cellStyles: true }); console.log('✅ 文件已生成:' + outputPath); console.log('📊 共生成测试用例:' + testCases.length + ' 条'); console.log('📋 模块分布:'); const moduleStat = {}; testCases.forEach(r => { moduleStat[r[1]] = (moduleStat[r[1]] || 0) + 1; }); Object.entries(moduleStat).forEach(([mod, cnt]) => { console.log(' ' + mod + ': ' + cnt + ' 条'); });