/** * 组件菜单工厂 * 提供分类的组件菜单,参考测试计划工具的设计理念 */ import { THREAD_GROUP, SETUP_THREAD_GROUP, TEARDOWN_THREAD_GROUP, HTTP_REQUEST, PALLETIZE_TASK, INBOUND_TASK, OUTBOUND_TASK, VIEW_RESULTS_TREE, SUMMARY_REPORT, AGGREGATE_REPORT, RESPONSE_ASSERTION, JSON_ASSERTION, HTTP_REQUEST_DEFAULT_CONFIG, HTTP_COOKIE_MANAGER, HTTP_HEADER_MANAGER, USER_DEFINED_VARIABLES, CSV_DATA_SET_CONFIG, REGULAR_EXPRESSION_EXTRACTOR, JSON_EXTRACTOR, CONSTANT_TIMER, LOOP_CONTROLLER, IF_CONTROLLER, SIMPLE_CONTROLLER, WHILE_CONTROLLER, SWITCH_CONTROLLER, FOR_EACH_CONTROLLER, } from './JmeterComponents'; import { COMPONENT_CONFIGS } from './JmeterComponents'; /** * 菜单分类 */ export const MENU_CATEGORIES = { THREADS: 'threads', // 线程组 SAMPLERS: 'samplers', // 采样器 LOGIC_CONTROLLERS: 'logic_controllers', // 逻辑控制器 CONFIG_ELEMENTS: 'config_elements', // 配置元件 PRE_PROCESSORS: 'pre_processors', // 前置处理器 POST_PROCESSORS: 'post_processors', // 后置处理器 ASSERTIONS: 'assertions', // 断言 LISTENERS: 'listeners', // 监听器 TIMERS: 'timers', // 定时器 }; /** * 组件菜单映射 * 按照测试计划工具的分类方式组织组件 */ export const COMPONENT_MENU_MAP = { [MENU_CATEGORIES.THREADS]: [ { type: THREAD_GROUP, label: '线程组', icon: '👥' }, { type: SETUP_THREAD_GROUP, label: 'setUp线程组', icon: '⬆️' }, { type: TEARDOWN_THREAD_GROUP, label: 'tearDown线程组', icon: '⬇️' }, ], [MENU_CATEGORIES.SAMPLERS]: [ { type: HTTP_REQUEST, label: 'HTTP请求', icon: '🌐' }, { type: PALLETIZE_TASK, label: '组托任务', icon: '📦' }, { type: INBOUND_TASK, label: '入库任务', icon: '📥' }, { type: OUTBOUND_TASK, label: '出库任务', icon: '📤' }, ], [MENU_CATEGORIES.LOGIC_CONTROLLERS]: [ { type: SIMPLE_CONTROLLER, label: '简单控制器', icon: '📁' }, { type: LOOP_CONTROLLER, label: '循环控制器', icon: '🔄' }, { type: IF_CONTROLLER, label: '如果(If)控制器', icon: '❓' }, { type: WHILE_CONTROLLER, label: 'While控制器', icon: '🔁' }, { type: SWITCH_CONTROLLER, label: 'Switch控制器', icon: '🔀' }, { type: FOR_EACH_CONTROLLER, label: 'ForEach控制器', icon: '🔂' }, ], [MENU_CATEGORIES.CONFIG_ELEMENTS]: [ { type: HTTP_REQUEST_DEFAULT_CONFIG, label: 'HTTP请求默认值', icon: '⚙️' }, { type: HTTP_COOKIE_MANAGER, label: 'HTTP Cookie管理器', icon: '🍪' }, { type: HTTP_HEADER_MANAGER, label: 'HTTP头管理器', icon: '📋' }, { type: USER_DEFINED_VARIABLES, label: '用户定义的变量', icon: '📝' }, { type: CSV_DATA_SET_CONFIG, label: 'CSV数据集配置', icon: '📊' }, ], [MENU_CATEGORIES.PRE_PROCESSORS]: [ // 前置处理器组件 ], [MENU_CATEGORIES.POST_PROCESSORS]: [ { type: REGULAR_EXPRESSION_EXTRACTOR, label: '正则表达式提取器', icon: '🔍' }, { type: JSON_EXTRACTOR, label: 'JSON提取器', icon: '📄' }, ], [MENU_CATEGORIES.ASSERTIONS]: [ { type: RESPONSE_ASSERTION, label: '响应断言', icon: '✓' }, { type: JSON_ASSERTION, label: 'JSON断言', icon: '📋' }, { type: 'duration_assertion', label: '持续时间断言', icon: '⏱️' }, { type: 'size_assertion', label: '大小断言', icon: '📏' }, ], [MENU_CATEGORIES.LISTENERS]: [ { type: VIEW_RESULTS_TREE, label: '查看结果树', icon: '🌳' }, { type: SUMMARY_REPORT, label: '汇总报告', icon: '📊' }, { type: AGGREGATE_REPORT, label: '聚合报告', icon: '📈' }, ], [MENU_CATEGORIES.TIMERS]: [ { type: CONSTANT_TIMER, label: '固定定时器', icon: '⏱️' }, ], }; /** * 获取分类的中文名称 */ export const getCategoryLabel = (category) => { const labels = { [MENU_CATEGORIES.THREADS]: '线程组', [MENU_CATEGORIES.SAMPLERS]: '采样器', [MENU_CATEGORIES.LOGIC_CONTROLLERS]: '逻辑控制器', [MENU_CATEGORIES.CONFIG_ELEMENTS]: '配置元件', [MENU_CATEGORIES.PRE_PROCESSORS]: '前置处理器', [MENU_CATEGORIES.POST_PROCESSORS]: '后置处理器', [MENU_CATEGORIES.ASSERTIONS]: '断言', [MENU_CATEGORIES.LISTENERS]: '监听器', [MENU_CATEGORIES.TIMERS]: '定时器', }; return labels[category] || category; }; /** * 根据节点类型判断可以添加哪些类型的子组件 */ export const getAllowedChildTypes = (nodeType) => { // 测试计划可以添加所有类型 if (nodeType === 'test_plan') { return Object.values(MENU_CATEGORIES); } // 线程组可以添加采样器、逻辑控制器、配置元件、前置处理器、后置处理器、断言、监听器、定时器 if (nodeType === THREAD_GROUP || nodeType === SETUP_THREAD_GROUP || nodeType === TEARDOWN_THREAD_GROUP) { return [ MENU_CATEGORIES.SAMPLERS, MENU_CATEGORIES.LOGIC_CONTROLLERS, MENU_CATEGORIES.CONFIG_ELEMENTS, MENU_CATEGORIES.PRE_PROCESSORS, MENU_CATEGORIES.POST_PROCESSORS, MENU_CATEGORIES.ASSERTIONS, MENU_CATEGORIES.LISTENERS, MENU_CATEGORIES.TIMERS, ]; } // 逻辑控制器可以添加采样器、逻辑控制器、配置元件、前置处理器、后置处理器、断言、监听器、定时器 if ([SIMPLE_CONTROLLER, LOOP_CONTROLLER, IF_CONTROLLER].includes(nodeType)) { return [ MENU_CATEGORIES.SAMPLERS, MENU_CATEGORIES.LOGIC_CONTROLLERS, MENU_CATEGORIES.CONFIG_ELEMENTS, MENU_CATEGORIES.PRE_PROCESSORS, MENU_CATEGORIES.POST_PROCESSORS, MENU_CATEGORIES.ASSERTIONS, MENU_CATEGORIES.LISTENERS, MENU_CATEGORIES.TIMERS, ]; } // 采样器可以添加前置处理器、后置处理器、断言、监听器、定时器 if ([HTTP_REQUEST, PALLETIZE_TASK, INBOUND_TASK, OUTBOUND_TASK].includes(nodeType)) { return [ MENU_CATEGORIES.PRE_PROCESSORS, MENU_CATEGORIES.POST_PROCESSORS, MENU_CATEGORIES.ASSERTIONS, MENU_CATEGORIES.LISTENERS, MENU_CATEGORIES.TIMERS, ]; } // 默认:可以添加所有类型 return Object.values(MENU_CATEGORIES); }; /** * 获取组件配置信息 */ export const getComponentInfo = (componentType) => { return COMPONENT_CONFIGS[componentType] || null; }; /** * 检查组件类型是否存在于菜单中 */ export const isComponentInMenu = (componentType) => { for (const components of Object.values(COMPONENT_MENU_MAP)) { if (components.some(comp => comp.type === componentType)) { return true; } } return false; };