/**
|
* 组件菜单工厂
|
* 提供分类的组件菜单,参考测试计划工具的设计理念
|
*/
|
|
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;
|
};
|