AI 性能接入效能平台:从生成脚本到 Jenkins 执行回写,一套完整闭环实战
```text产品 / 项目性能场景脚本资产脚本版本执行配置Jenkins Job执行记录控制台日志性能报告结果回写```
## 一、整体思路很简单
## 二、整体链路图

## 三、第一步:性能场景先选产品,再选项目

```json{"productId": 1,"projectId": 10,"name": "测试采购待办查询接口","code": "purchase_todo_query","envCode": "st","status": 1}```
## 四、第二步:上传脚本,先把脚本变成平台资产
```text性能测试 -> 性能场景 -> 上传脚本```

```textscenarioId: 性能场景 IDname: 脚本名称toolType: jmeter / k6 / locustfile: 脚本文件```
```textresources/performance_scripts/{scenarioId}/{scriptId}/{version}/xxx.jmx```
## 五、第三步:AI 不直接生成脚本,先生成压测方案
```text生成方案人工确认后生成脚本```
```text我要测试采购待办查询接口,目标并发 300,逐步升压,关注平均响应时间、P95、吞吐量和错误率。```
```json{"target": "验证采购待办查询接口在逐步升压到 300 并发时的性能表现","toolType": "jmeter","concurrentUsers": 300,"rampUpSeconds": 300,"durationSeconds": 600,"metrics": ["avg_rt", "p95", "throughput", "error_rate"],"risk": ["需要确认接口路径", "需要补充认证信息"]}```

## 六、第四步:人工确认后生成脚本,并做 JMeter 兜底
```text人工确认后生成脚本```

### JMeter 为什么要兜底
```textCannotResolveClassException:kg.apc.jmeter.threads.UltimateThreadGroup```
```text禁止 kg.apc.*禁止 UltimateThreadGroup禁止 SteppingThreadGroup禁止 ConcurrencyThreadGroup```
```textTestPlanThreadGroupLoopControllerHTTPSamplerProxy```

## 七、第五步:Jenkins 创建 performance-runner Job
```textperformance-runner```
```texthttp://xxxx/view/xxx/```

### Jenkins 创建步骤

### Job 参数清单
```textRUN_IDPERFORMANCE_RUN_IDSCENARIO_IDSCRIPT_IDSCRIPT_VERSION_IDEXECUTION_CONFIG_IDTOOL_TYPEENV_CODETEST_MACHINE_IDVIRTUAL_USERSDURATION_SECONDSRAMP_UP_SECONDSCALLBACK_TOKENPLATFORM_BASE_URL```
### 第一版 Pipeline:先验证联通
```groovypipeline {agent anyparameters {string(name: 'RUN_ID', defaultValue: '', description: '平台性能执行记录ID')string(name: 'PERFORMANCE_RUN_ID', defaultValue: '', description: '兼容字段')string(name: 'SCENARIO_ID', defaultValue: '', description: '性能场景ID')string(name: 'SCRIPT_ID', defaultValue: '', description: '脚本ID')string(name: 'SCRIPT_VERSION_ID', defaultValue: '', description: '脚本版本ID')string(name: 'EXECUTION_CONFIG_ID', defaultValue: '', description: '执行配置ID')string(name: 'TOOL_TYPE', defaultValue: 'jmeter', description: '工具类型')string(name: 'ENV_CODE', defaultValue: 'st', description: '环境编码')string(name: 'TEST_MACHINE_ID', defaultValue: '', description: '测试机ID')string(name: 'VIRTUAL_USERS', defaultValue: '10', description: '并发用户数')string(name: 'DURATION_SECONDS', defaultValue: '300', description: '持续时间')string(name: 'RAMP_UP_SECONDS', defaultValue: '30', description: '爬坡时间')string(name: 'CALLBACK_TOKEN', defaultValue: '', description: '回调Token')string(name: 'PLATFORM_BASE_URL', defaultValue: '', description: '平台后端地址')}stages {stage('检查平台参数') {steps {echo "RUN_ID=${params.RUN_ID}"echo "SCENARIO_ID=${params.SCENARIO_ID}"echo "SCRIPT_VERSION_ID=${params.SCRIPT_VERSION_ID}"echo "TOOL_TYPE=${params.TOOL_TYPE}"echo "VIRTUAL_USERS=${params.VIRTUAL_USERS}"echo "DURATION_SECONDS=${params.DURATION_SECONDS}"}}stage('模拟执行') {steps {echo 'Jenkins 已接收到平台参数,联通成功。'}}}}```
```text平台点击确认发起后,Jenkins 出现新构建。Console Output 能看到 RUN_ID、SCENARIO_ID、TOOL_TYPE、VIRTUAL_USERS。```
## 八、第六步:平台点击确认发起,调用 Jenkins 执行
```text性能测试 -> 发起压测```
```text选择场景 -> 执行配置 -> 确认执行 -> 确认发起```

```textRUN_IDSCENARIO_IDSCRIPT_IDSCRIPT_VERSION_IDTOOL_TYPEENV_CODEVIRTUAL_USERSDURATION_SECONDSRAMP_UP_SECONDSCALLBACK_TOKENPLATFORM_BASE_URL```
```text平台 -> Jenkins```
## 九、第七步:前端轮询执行记录,通过 Jenkins API 同步状态
```textJob 已执行,但平台还显示排队中Job 失败了,但前端没有变化用户需要手动刷新页面```
```text每 5 秒请求一次执行记录列表```
```text列表接口返回前,先同步 Jenkins 状态```

### 1. 队列阶段
```text/queue/item/{queueId}/api/json```
### 2. 构建阶段
```text/job/{jobName}/{buildNumber}/api/json```
```textbuildingresulttimestampdurationurl```
| Jenkins 状态 | 平台状态 || --- | --- || queue 未进入 build | 排队中 || building=true | 执行中 || result=SUCCESS | 成功 || result=FAILURE | 失败 || result=ABORTED | 已取消 |
```textJenkins 构建链接Console 日志链接报告链接开始时间结束时间```
```textJenkins -> 平台 -> 前端```
## 十、完整闭环时序图

## 结尾:AI 生成脚本只是起点,执行闭环才是落地
```text场景管理-> 脚本上传 / AI 生成-> JMeter 原生兜底-> Jenkins 执行-> 前端轮询 Jenkins API-> 执行记录与报告展示```






```textAI 生成脚本 -> Jenkins 执行 -> 前端轮询结果```
https://github.com/qiaoxinjiu/effekt
注意:下载使用时,需要换成自己的模型配置和对应的数据库,redis账号配置
夜雨聆风