4. 任务模板元模型设计

任务模板是自助容量压测作业平台的核心资产,它将一次压测任务的所有可复用要素抽象为结构化元模型。元模型的设计直接决定了模板的灵活性、版本管理能力和跨团队复用效率。本节详细定义模板的 8 个核心属性及其交互关系。

4.1 元模型属性总览

属性 类型 必填 说明
模板ID UUID / 自增整数 是 全局唯一标识,用于关联任务实例、审计日志和权限控制
名称 字符串(1~128字符) 是 人类可读的模板名称,支持中英文、数字、下划线
描述 文本(0~1024字符) 否 模板用途、适用场景、注意事项的简要说明
标签 字符串数组 否 用于分类、搜索和权限分组,如“核心链路”“每日回归”
版本 语义化版本(MAJOR.MINOR.PATCH) 是 每次编辑生成新版本,支持回滚和基线锁定
参数占位符 JSON 对象 否 定义模板中可替换的变量,如 ${target_url}、${concurrency}
脚本类型 枚举(JMeter / Locust / wrk / 自定义) 是 决定脚本解析引擎和执行环境
关联资源定义 JSON 对象 是 声明压测所需的资源规格、数量、网络配置
设计原则:元模型遵循“高内聚、低耦合”原则。模板只描述“做什么”和“用什么做”,不包含“在哪做”和“谁来做”——后者由任务实例和调度层负责。

4.2 核心属性详解

4.2.1 模板ID 与版本

模板ID 采用 UUID v4 格式(如 a1b2c3d4-e5f6-7890-abcd-ef1234567890),保证分布式环境下的全局唯一性。版本号遵循语义化版本规范:

  • MAJOR:脚本结构或资源定义发生不兼容变更时递增
  • MINOR:新增参数占位符或可选资源时递增
  • PATCH:修复脚本错误、优化描述或标签时递增

每个版本生成不可变的快照,任务实例必须绑定具体版本号,避免因模板变更导致历史任务结果不可追溯。

4.2.2 参数占位符

参数占位符是模板可复用的关键机制。占位符采用 ${变量名} 语法,在任务执行前由用户或自动化流程注入实际值。占位符定义包含以下字段:

{
  "target_url": {
    "type": "string",
    "default": "http://localhost:8080/api/v1/order",
    "description": "压测目标URL",
    "required": true
  },
  "concurrency": {
    "type": "integer",
    "default": 100,
    "min": 1,
    "max": 10000,
    "description": "并发用户数"
  },
  "duration_sec": {
    "type": "integer",
    "default": 300,
    "description": "压测持续时间(秒)"
  }
}

4.2.3 脚本类型与关联资源定义

脚本类型决定了平台使用哪个执行器来解析和运行脚本。关联资源定义则声明执行该脚本所需的压测机规格:

脚本类型 典型资源需求 适用场景
JMeter 4C8G × 2~10 台 复杂业务链路、多断言、分布式压测
Locust 2C4G × 1~5 台 Python 生态、实时 Web UI、快速原型
wrk 2C4G × 1 台 简单 HTTP 接口、低延迟、高吞吐
自定义 按需声明 私有协议、gRPC、WebSocket 等

4.3 元模型关系图

任务模板元模型核心结构 任务模板 模板ID (UUID) 名称 + 描述 标签数组 版本 (MAJOR.MINOR.PATCH) 参数占位符 脚本类型 关联资源定义 模板ID + 版本 构成不可变快照,任务实例绑定具体版本确保可追溯 参数占位符 + 资源定义 在任务执行时由用户或自动化流程注入实际值

4.4 元模型校验规则

模板在创建和更新时必须通过以下校验,确保元数据完整性:

  1. 唯一性校验:同一命名空间下,模板名称 + 版本组合必须唯一。
  2. 占位符完整性:脚本中引用的所有 ${变量} 必须在参数占位符定义中存在,且类型匹配。
  3. 资源约束校验:关联资源定义中的 CPU、内存、实例数不能超过租户配额上限。
  4. 脚本语法校验:根据脚本类型调用对应的语法检查器,如 JMeter 的 XML Schema 校验、Locust 的 Python 语法检查。
常见陷阱:参数占位符的默认值不要设置为生产环境敏感信息(如数据库密码)。建议默认值使用测试环境地址或占位字符串,生产值在任务执行时通过安全注入通道传入。

4.5 元模型与任务实例的关系

模板 → 实例 执行链路 任务模板 元模型 + 脚本 + 资源定义 实例化 任务实例 注入参数 + 绑定资源 实例化过程完成三件事: ① 将参数占位符替换为实际值 ② 根据资源定义申请并分配压测机 ③ 记录模板版本快照,建立可追溯关联