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