{"openapi":"3.0.1","info":{"title":"JMeter性能测试教学演示接口","description":"包含登录鉴权、商品CRUD、文件上传下载、限流熔断、Dubbo/gRPC等全场景接口，配合JMeter各类工具组件实操演示","contact":{"name":"PerfTest","email":"perftest@example.com"},"version":"1.0.0"},"servers":[{"url":"http://jiekou.ceshijia.cn","description":"Generated server url"}],"tags":[{"name":"07-延迟模拟","description":"延迟/慢响应/超时模拟，适配JMeter各类定时器和断言演示"},{"name":"05-订单管理","description":"完整业务串联链路：登录→商品列表→详情→下单"},{"name":"02-需要Token的安全接口","description":"全局Token拦截校验，不带Token返回401，用于全局Token封装实操演示"},{"name":"10-慢SQL实战分析","description":"真实全表扫描慢SQL + explain根因分析 + 索引优化对比教学"},{"name":"06-限流熔断","description":"基于Sentinel的限流、熔断、降级演示"},{"name":"03-用户查询","description":"CSV参数化专用接口，配合CSV批量用户数据做参数化实战"},{"name":"08-服务器监控演示","description":"CPU/慢SQL/磁盘IO/内存压力模拟，用于服务器监控教学演示"},{"name":"02-商品管理","description":"商品列表、详情、批量、随机数据，用于JMeter断言/提取器/大数据实操"},{"name":"04-文件管理","description":"文件上传/下载，用于JMeter文件上传取样器和下载压测演示"},{"name":"01-登录鉴权","description":"登录、Token生成、Token校验，用于JMeter全局鉴权实操"}],"paths":{"/api/user/query":{"post":{"tags":["03-用户查询"],"summary":"用户查询","description":"POST /api/user/query，接收username和phone，配合CSV参数化","operationId":"queryUser","parameters":[{"name":"username","in":"query","description":"用户名","required":false,"schema":{"type":"string"}},{"name":"phone","in":"query","description":"手机号","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultUser"}}}}}}},"/api/secure/feedback":{"post":{"tags":["02-需要Token的安全接口"],"summary":"提交反馈（需Token）","description":"POST /api/secure/feedback，带Token的POST请求演示","operationId":"feedback","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}},"security":[{"BearerAuth":[]}]}},"/api/order/create":{"post":{"tags":["05-订单管理"],"summary":"创建订单","description":"POST /api/order/create，完整业务链路最后一步","operationId":"createOrder","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOrder"}}}}}}},"/api/login":{"post":{"tags":["01-登录鉴权"],"summary":"用户登录","description":"POST /api/login，返回JWT Token，用于全局Token/Cookie鉴权","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/flow/reset":{"post":{"tags":["06-限流熔断"],"summary":"重置计数器","description":"重置限流演示的请求计数器","operationId":"reset","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultString"}}}}}}},"/api/file/upload":{"post":{"tags":["04-文件管理"],"summary":"文件上传","description":"POST /api/file/upload，接收MultipartFile","operationId":"upload","parameters":[{"name":"uploader","in":"query","description":"上传者","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["file"],"type":"object","properties":{"file":{"type":"string","description":"上传文件","format":"binary"}}}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/user/list":{"get":{"tags":["03-用户查询"],"summary":"用户列表","description":"查询所有用户，用于了解测试数据","operationId":"listAll","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultObject"}}}}}}},"/api/slowQuery":{"get":{"tags":["10-慢SQL实战分析"],"summary":"慢SQL查询（全表扫描）","description":"根据无索引字段phone做LIKE模糊查询t_test_user大表（40万条），触发全表扫描+逐行字符串匹配+TEXT溢出页读取，产生慢SQL（约8秒）。返回SQL文本和执行耗时，可直接用EXPLAIN分析根因。前置条件：需先执行sql/slow_query_demo.sql建表造数据。","operationId":"slowQuery","parameters":[{"name":"phone","in":"query","description":"手机号模糊查询条件（LIKE '%phone%'，phone字段无索引，触发全表扫描）","required":false,"schema":{"type":"string","default":"00050000"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/secure/profile":{"get":{"tags":["02-需要Token的安全接口"],"summary":"个人信息（需Token）","description":"GET /api/secure/profile，从Token解析当前用户信息","operationId":"profile","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}},"security":[{"BearerAuth":[]}]}},"/api/secure/points":{"get":{"tags":["02-需要Token的安全接口"],"summary":"积分查询（需Token）","description":"GET /api/secure/points，查询当前用户积分","operationId":"points","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}},"security":[{"BearerAuth":[]}]}},"/api/secure/orders":{"get":{"tags":["02-需要Token的安全接口"],"summary":"我的订单（需Token）","description":"GET /api/secure/orders，根据Token中的userId查询订单","operationId":"myOrders","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOrder"}}}}},"security":[{"BearerAuth":[]}]}},"/api/order/list":{"get":{"tags":["05-订单管理"],"summary":"订单列表","description":"根据用户ID查询订单","operationId":"listByUser","parameters":[{"name":"userId","in":"query","description":"用户ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListOrder"}}}}}}},"/api/order/detail":{"get":{"tags":["05-订单管理"],"summary":"订单详情","description":"根据订单ID查询详情","operationId":"detail","parameters":[{"name":"id","in":"query","description":"订单ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultOrder"}}}}}}},"/api/goods/random":{"get":{"tags":["02-商品管理"],"summary":"随机数据","description":"返回随机数字和时间戳，适配JMeter函数助手和随机变量","operationId":"randomData","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/goods/list":{"get":{"tags":["02-商品管理"],"summary":"商品列表","description":"GET商品列表，返回标准JSON，用于断言和分位响应时间演示","operationId":"list","parameters":[{"name":"category","in":"query","description":"商品分类（可选）","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultListGoods"}}}}}}},"/api/goods/detail/{id}":{"get":{"tags":["02-商品管理"],"summary":"商品详情","description":"GET /api/goods/detail/{id}，支持路径参数和请求参数","operationId":"detail_1","parameters":[{"name":"id","in":"path","description":"商品ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fields","in":"query","description":"指定返回字段，逗号分隔（可选）","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/goods/batch":{"get":{"tags":["02-商品管理"],"summary":"批量商品列表","description":"返回大量商品数据，用于大数据响应和大并发压测","operationId":"batchList","parameters":[{"name":"count","in":"query","description":"返回条数","required":false,"schema":{"type":"integer","format":"int32","default":1000}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/flow/limit":{"get":{"tags":["06-限流熔断"],"summary":"限流演示","description":"/api/flow/limit，配合Sentinel限流规则演示","operationId":"flowLimit","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/flow/circuit":{"get":{"tags":["06-限流熔断"],"summary":"熔断演示","description":"/api/flow/circuit，配合Sentinel熔断规则演示","operationId":"flowCircuit","parameters":[{"name":"error","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/file/list":{"get":{"tags":["04-文件管理"],"summary":"文件列表","description":"查询已上传的文件记录","operationId":"list_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultObject"}}}}}}},"/api/file/download":{"get":{"tags":["04-文件管理"],"summary":"文件下载","description":"GET /api/file/download?id=xxx，返回文件流","operationId":"download","parameters":[{"name":"id","in":"query","description":"文件记录ID","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"binary"}}}}}}},"/api/demo/timeout":{"get":{"tags":["07-延迟模拟"],"summary":"超时模拟","description":"模拟超时场景，用于JMeter超时配置和故障压测","operationId":"timeout","parameters":[{"name":"timeout","in":"query","description":"超时毫秒数","required":false,"schema":{"type":"integer","format":"int64","default":10000}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/slowsql":{"get":{"tags":["08-服务器监控演示"],"summary":"慢SQL模拟","description":"执行一条耗时大于sleep_ms的SQL（SELECT SLEEP），用于演示慢查询日志","operationId":"slowSql","parameters":[{"name":"sleep_ms","in":"query","description":"SQL执行时长（毫秒）","required":false,"schema":{"type":"integer","format":"int64","default":1500}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/slow":{"get":{"tags":["07-延迟模拟"],"summary":"随机延迟","description":"随机延迟，模拟不稳定的慢接口","operationId":"slow","parameters":[{"name":"minDelay","in":"query","description":"最小延迟ms","required":false,"schema":{"type":"integer","format":"int32","default":500}},{"name":"maxDelay","in":"query","description":"最大延迟ms","required":false,"schema":{"type":"integer","format":"int32","default":5000}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/memreset":{"get":{"tags":["08-服务器监控演示"],"summary":"释放占用内存","description":"释放memleak占用的内存，防止服务OOM，释放后建议观察GC回收效果","operationId":"memReset","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/memleak":{"get":{"tags":["08-服务器监控演示"],"summary":"内存占用（模拟泄漏）","description":"每次调用占用少量堆内存且不释放，演示内存增长，演示完请调用memreset释放","operationId":"memLeak","parameters":[{"name":"mb","in":"query","description":"本次占用MB数","required":false,"schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/highio":{"get":{"tags":["08-服务器监控演示"],"summary":"磁盘IO压力模拟","description":"循环读写临时文件，制造磁盘IO压力","operationId":"highIo","parameters":[{"name":"write_count","in":"query","description":"写入轮次","required":false,"schema":{"type":"integer","format":"int32","default":500}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/highcpu":{"get":{"tags":["08-服务器监控演示"],"summary":"CPU高负载模拟","description":"纯CPU密集循环运算，不操作数据库，用于观察CPU使用率","operationId":"highCpu","parameters":[{"name":"loop","in":"query","description":"循环次数","required":false,"schema":{"type":"integer","format":"int64","default":1000000}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/health":{"get":{"tags":["07-延迟模拟"],"summary":"健康检查","description":"简单的健康检查接口","operationId":"health","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/demo/delay":{"get":{"tags":["07-延迟模拟"],"summary":"延迟模拟","description":"传入sleep毫秒数，模拟慢接口响应","operationId":"delay","parameters":[{"name":"sleep","in":"query","description":"延迟毫秒数","required":false,"schema":{"type":"integer","format":"int64","default":1000}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}},"/api/auth/check":{"get":{"tags":["01-登录鉴权"],"summary":"校验Token","description":"验证JWT Token是否有效","operationId":"checkToken","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResultMapStringObject"}}}}}}}},"components":{"schemas":{"ResultUser":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"$ref":"#/components/schemas/User"},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"User":{"type":"object","properties":{"id":{"type":"integer","description":"用户ID","format":"int64"},"username":{"type":"string","description":"用户名"},"password":{"type":"string","description":"密码"},"nickname":{"type":"string","description":"昵称"},"phone":{"type":"string","description":"手机号"},"email":{"type":"string","description":"邮箱"},"avatar":{"type":"string","description":"头像URL"},"status":{"type":"integer","description":"状态：0-禁用 1-启用","format":"int32"},"createTime":{"type":"string","description":"创建时间","format":"date-time"},"updateTime":{"type":"string","description":"更新时间","format":"date-time"}},"description":"用户实体"},"FeedbackRequest":{"type":"object","properties":{"content":{"type":"string"}}},"ResultMapStringObject":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"type":"object","additionalProperties":{"type":"object","description":"返回数据"},"description":"返回数据"},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"OrderRequest":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"goodsId":{"type":"integer","format":"int64"},"quantity":{"type":"integer","format":"int32"}}},"Order":{"type":"object","properties":{"id":{"type":"integer","description":"订单ID","format":"int64"},"orderNo":{"type":"string","description":"订单编号"},"userId":{"type":"integer","description":"用户ID","format":"int64"},"goodsId":{"type":"integer","description":"商品ID","format":"int64"},"goodsName":{"type":"string","description":"商品名称"},"quantity":{"type":"integer","description":"购买数量","format":"int32"},"totalAmount":{"type":"number","description":"订单总金额"},"status":{"type":"integer","description":"状态：0-待支付 1-已支付 2-已发货 3-已完成 4-已取消","format":"int32"},"createTime":{"type":"string","description":"下单时间","format":"date-time"},"updateTime":{"type":"string","description":"更新时间","format":"date-time"}},"description":"订单实体"},"ResultOrder":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"$ref":"#/components/schemas/Order"},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"LoginRequest":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}}},"ResultString":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"type":"string","description":"返回数据"},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"ResultObject":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"type":"object","description":"返回数据"},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"ResultListOrder":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"type":"array","description":"返回数据","items":{"$ref":"#/components/schemas/Order"}},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"},"Goods":{"type":"object","properties":{"id":{"type":"integer","description":"商品ID","format":"int64"},"name":{"type":"string","description":"商品名称"},"category":{"type":"string","description":"商品分类"},"price":{"type":"number","description":"商品价格"},"stock":{"type":"integer","description":"库存数量","format":"int32"},"description":{"type":"string","description":"商品描述"},"imageUrl":{"type":"string","description":"商品图片URL"},"status":{"type":"integer","description":"状态：0-下架 1-上架","format":"int32"},"sales":{"type":"integer","description":"销量","format":"int32"},"createTime":{"type":"string","description":"创建时间","format":"date-time"},"updateTime":{"type":"string","description":"更新时间","format":"date-time"}},"description":"商品实体"},"ResultListGoods":{"type":"object","properties":{"code":{"type":"integer","description":"状态码，200表示成功","format":"int32"},"msg":{"type":"string","description":"提示信息"},"data":{"type":"array","description":"返回数据","items":{"$ref":"#/components/schemas/Goods"}},"timestamp":{"type":"integer","description":"响应时间戳（毫秒）","format":"int64"}},"description":"统一响应结果"}},"securitySchemes":{"BearerAuth":{"type":"http","description":"先调用 POST /api/login 获取token，再将data.token的值粘贴到此处（不需要加Bearer前缀）","scheme":"bearer","bearerFormat":"JWT"}}}}