{ "endpoints": [ { "cases": [ { "name": "缓存全部测试", "method": "GET", "passed": true, "response": { "result": { "cache_mode": "compatible", "cleanup": "已清理所有测试缓存数据", "name": "数据库缓存测试", "success": true, "tests": [ { "cached_value": { "active": true, "count": 123, "name": "测试数据" }, "name": "1. 基础 set/get 测试", "result": true }, { "after_exists": false, "before_exists": true, "name": "2. delete 删除缓存测试", "result": true }, { "immediate_exists": true, "name": "3. 过期时间测试(短超时)", "note": "设置了2秒过期,可等待后再次访问验证过期", "result": true }, { "name": "4. 不存在的 key 读取测试", "result": true, "value": null }, { "first": "第一次值", "name": "5. 重复 set 同一个 key 测试", "result": true, "second": "第二次值", "third": { "version": 3 } }, { "after": { "a": false, "b": false, "c": false }, "before": { "a": true, "b": true, "c": true }, "name": "6. 通配删除测试 (key*)", "result": true }, { "bool": true, "float": 3.14159, "int": 12345, "map": { "key": "value", "num": 100 }, "name": "7. 不同数据类型存储测试", "result": true, "slice": [ 1, 2, 3, "four", { "five": 5 } ], "string": "字符串值" }, { "name": "8. 自定义超时时间参数测试", "result": true, "value": "长期数据" }, { "name": "9. 缓存表状态查询", "new_table_count": 29, "new_table_name": "hotime_cache", "result": true } ] }, "status": 0 }, "expect": { "result": { "cache_mode": "sample", "cleanup": "sample", "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "status": 0 } } ], "ctr": "cache", "method": "GET", "params": [], "path": "/app/cache/all", "project": "app", "summary": "缓存全部测试", "tested": true }, { "cases": [ { "name": "批量缓存测试", "method": "GET", "passed": true, "response": { "result": { "message": "批量缓存测试完成,请查看控制台输出和日志文件" }, "status": 0 }, "expect": { "result": { "message": "sample" }, "status": 0 } } ], "ctr": "cache", "method": "GET", "params": [], "path": "/app/cache/batch", "project": "app", "summary": "批量缓存测试", "tested": true }, { "cases": [ { "name": "兼容模式测试", "method": "GET", "passed": true, "response": { "result": { "success": true, "test_name": "兼容模式白盒测试", "tests": [ { "mode": "compatible", "name": "1. 查询当前缓存模式", "result": true }, { "count": 0, "data": [], "legacy_table": "cached", "name": "2. 查询老表cached现有数据", "result": true }, { "count": 5, "data": [ { "create_time": "2026-04-18 05:26:58", "end_time": "2026-07-14 12:37:13", "id": 8, "key": "INFORMATION_SCHEMA.TABLES:111a1ad16d7b315170077c5f0d2ed79f", "modify_time": "2026-07-13 16:37:13", "state": 0, "value": "[{\"label\":\"\",\"name\":\"体育\"},{\"label\":\"\",\"name\":\"军事\"},{\"label\":\"\",\"name\":\"历史\"},{\"label\":\"\",\"name\":\"地理\"},{\"label\":\"\",\"name\":\"外语\"},{\"label\":\"\",\"name\":\"天文\"},{\"label\":\"\",\"name\":\"影音\"},{\"label\":\"\",\"name\":\"数学\"},{\"label\":\"\",\"name\":\"数学1\"},{\"label\":\"\",\"name\":\"文学\"},{\"label\":\"\",\"name\":\"生物\"},{\"label\":\"\",\"name\":\"综合\"},{\"label\":\"管理员表\",\"name\":\"admin\"},{\"label\":\"文章表\",\"name\":\"article\"},{\"label\":\"\",\"name\":\"auth_role\"},{\"label\":\"\",\"name\":\"auth_user\"},{\"label\":\"老版本缓存表\",\"name\":\"cached\"},{\"label\":\"分类表\",\"name\":\"ctg\"},{\"label\":\"\",\"name\":\"history\"},{\"label\":\"缓存管理\",\"name\":\"hotime_cache\"},{\"label\":\"\",\"name\":\"ibang0420_iqiyi\"},{\"label\":\"\",\"name\":\"question\"},{\"label\":\"\",\"name\":\"role\"},{\"label\":\"\",\"name\":\"role_user\"},{\"label\":\"\",\"name\":\"stroage\"},{\"label\":\"批量测试表\",\"name\":\"test_batch\"},{\"label\":\"\",\"name\":\"user\"},{\"label\":\"\",\"name\":\"version\"}]" }, { "create_time": "2026-04-18 05:26:58", "end_time": "2026-07-14 12:37:13", "id": 9, "key": "INFORMATION_SCHEMA.COLUMNS:a8e3500cce5681cb71ce9e5cb57edddd", "modify_time": "2026-07-13 16:37:13", "state": 0, "value": "[{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qname\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase1\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase2\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase3\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase4\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qanswer\",\"type\":\"double\"},{\"dflt_value\":\"7\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qcid\",\"type\":\"int(11)\"},{\"dflt_value\":\"1526019499\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qtime\",\"type\":\"int(11)\"}]" }, { "create_time": "2026-04-18 05:27:02", "end_time": "2026-07-14 12:37:13", "id": 10, "key": "INFORMATION_SCHEMA.COLUMNS:15df4912fb74d22d53ac3000217e50ad", "modify_time": "2026-07-13 16:37:13", "state": 0, "value": "[{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qname\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase1\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase2\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase3\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase4\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qanswer\",\"type\":\"double\"},{\"dflt_value\":\"10\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qcid\",\"type\":\"int(11)\"},{\"dflt_value\":\"1526019499\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qtime\",\"type\":\"int(11)\"}]" }, { "create_time": "2026-04-18 05:27:02", "end_time": "2026-07-14 12:37:13", "id": 11, "key": "INFORMATION_SCHEMA.COLUMNS:bfaf5c253bab96452cb68392e4e37e58", "modify_time": "2026-07-13 16:37:13", "state": 0, "value": "[{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qname\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase1\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase2\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase3\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase4\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qanswer\",\"type\":\"double\"},{\"dflt_value\":\"4\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qcid\",\"type\":\"int(4)\"},{\"dflt_value\":\"1526019499\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qtime\",\"type\":\"int(11)\"}]" }, { "create_time": "2026-04-18 05:27:03", "end_time": "2026-07-14 12:37:13", "id": 12, "key": "INFORMATION_SCHEMA.COLUMNS:d79863ef6c6082a111b1e474d25ef746", "modify_time": "2026-07-13 16:37:13", "state": 0, "value": "[{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qname\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase1\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase2\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase3\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qcase4\",\"type\":\"varchar(255)\"},{\"dflt_value\":null,\"label\":\"\",\"must\":\"YES\",\"name\":\"qanswer\",\"type\":\"double\"},{\"dflt_value\":\"8\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qcid\",\"type\":\"int(11)\"},{\"dflt_value\":\"1526019499\",\"label\":\"\",\"must\":\"YES\",\"name\":\"qtime\",\"type\":\"int(11)\"}]" } ], "name": "3. 查询新表hotime_cache现有数据", "new_table": "hotime_cache", "result": true }, { "cache_api_result": null, "key_in_new_table": false, "name": "4. 测试兼容模式老表回退读取", "result": false, "test_key": "test_compat_fallback_1783934340909146200" }, { "name": "5. 测试兼容模式写新删老", "result": false, "step1_legacy_before": true, "step2_new_after": false, "step3_legacy_after_deleted": false }, { "after_legacy_deleted": false, "after_new_deleted": false, "before_legacy": true, "before_new": true, "name": "6. 测试兼容模式删除(删除两表)", "result": false } ], "timestamp": "2026-07-13 17:19:00" }, "status": 0 }, "expect": { "result": { "success": true, "test_name": "sample", "tests": [ { "name": "sample", "result": true } ], "timestamp": "sample" }, "status": 0 } } ], "ctr": "cache", "method": "GET", "params": [], "path": "/app/cache/compat", "project": "app", "summary": "缓存兼容模式测试", "tested": true }, { "cases": null, "ctr": "dmdb", "method": "POST", "params": [], "path": "/app/dmdb/describe", "project": "app", "summary": "查询达梦表结构", "tested": true }, { "cases": null, "ctr": "dmdb", "method": "POST", "params": [], "path": "/app/dmdb/rawsql", "project": "app", "summary": "达梦原生 SQL 测试", "tested": true }, { "cases": null, "ctr": "dmdb", "method": "POST", "params": [], "path": "/app/dmdb/tables", "project": "app", "summary": "查询达梦所有表", "tested": true }, { "cases": [ { "name": "result是布尔", "method": "GET", "passed": true, "response": { "result": true, "status": 0 }, "expect": { "result": true, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/bool_result", "project": "app", "summary": "返回布尔-结构+值校验", "tested": true }, { "cases": [ { "name": "名称为空-缺少必填字段", "method": "POST", "passed": true, "form": { "name": "" }, "response": { "error": { "msg": "名称不能为空", "type": "请求参数异常" }, "result": { "msg": "名称不能为空", "type": "请求参数异常" }, "status": 3 }, "expect": { "error": { "msg": "名称不能为空", "type": "请求参数异常" }, "result": { "msg": "名称不能为空", "type": "请求参数异常" }, "status": 3 } }, { "name": "名称正确-结构+值校验", "method": "POST", "passed": true, "form": { "name": "测试商品" }, "response": { "result": { "created": true, "id": 1, "name": "测试商品" }, "status": 0 }, "expect": { "result": { "created": true, "id": 1, "name": "sample" }, "status": 0 } } ], "ctr": "expect_demo", "method": "POST", "params": [ { "name": "name", "required": true, "type": "string", "example": "测试商品", "in": "form" } ], "path": "/app/expect_demo/error_demo", "project": "app", "summary": "错误先行+正确请求完整校验", "tested": true }, { "cases": [ { "name": "result是小数", "method": "GET", "passed": true, "response": { "result": 3.14, "status": 0 }, "expect": { "result": 1, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/float_result", "project": "app", "summary": "返回小数-结构+值校验", "tested": true }, { "cases": [ { "name": "result是Map-校验字段名+类型+值", "method": "GET", "passed": true, "response": { "result": { "id": 1, "in_stock": true, "name": "示例商品", "price": 19.9 }, "status": 0 }, "expect": { "result": { "id": 1, "in_stock": true, "name": "sample", "price": 1 }, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/map_result", "project": "app", "summary": "返回对象-结构+值校验", "tested": true }, { "cases": [ { "name": "深层嵌套Map+Slice+Map", "method": "GET", "passed": true, "response": { "result": { "customer": { "id": 1, "name": "张三", "phone": "13800138000" }, "extra": { "delivery": { "address": "XX路1号", "fee": 5 } }, "id": 100, "items": [ { "goods_name": "苹果", "id": 1, "price": 3.5, "quantity": 5 }, { "goods_name": "香蕉", "id": 2, "price": 2, "quantity": 10 } ], "title": "测试订单" }, "status": 0 }, "expect": { "result": { "customer": { "id": 1, "name": "sample", "phone": "sample" }, "extra": { "delivery": { "address": "sample", "fee": 1 } }, "id": 1, "items": [ { "goods_name": "sample", "id": 1, "price": 1, "quantity": 1 } ], "title": "sample" }, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/nested_result", "project": "app", "summary": "返回嵌套对象-结构+值校验", "tested": true }, { "cases": [ { "name": "有Verify值断言", "method": "GET", "passed": true, "response": { "result": { "data": "无预期校验", "id": 1 }, "status": 0 }, "expect": { "result": { "data": "sample", "id": 1 }, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/no_expect", "project": "app", "summary": "最小正确用例-仍需值断言", "tested": true }, { "cases": [ { "name": "result是整数", "method": "GET", "passed": true, "response": { "result": 42, "status": 0 }, "expect": { "result": 1, "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/number_result", "project": "app", "summary": "返回整数-结构+值校验", "tested": true }, { "cases": [ { "name": "result直接是Slice", "method": "GET", "passed": true, "response": { "result": [ { "id": 1, "name": "标签A" }, { "id": 2, "name": "标签B" } ], "status": 0 }, "expect": { "result": [ { "id": 1, "name": "sample" } ], "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/slice_result", "project": "app", "summary": "返回数组-结构+值校验", "tested": true }, { "cases": [ { "name": "result是字符串", "method": "GET", "passed": true, "response": { "result": "操作成功", "status": 0 }, "expect": { "result": "样本", "status": 0 } } ], "ctr": "expect_demo", "method": "GET", "params": [], "path": "/app/expect_demo/string_result", "project": "app", "summary": "返回字符串-结构+值校验", "tested": true }, { "cases": [ { "name": "名称为空", "method": "POST", "passed": true, "form": { "name": "" }, "response": { "error": { "msg": "名称不能为空", "type": "请求参数异常" }, "result": { "msg": "名称不能为空", "type": "请求参数异常" }, "status": 3 }, "expect": { "error": { "msg": "名称不能为空", "type": "请求参数异常" }, "result": { "msg": "名称不能为空", "type": "请求参数异常" }, "status": 3 } }, { "name": "写入并校验DB+响应", "method": "POST", "passed": true, "form": { "name": "verify_test" }, "response": { "result": { "id": 213, "name": "verify_test" }, "status": 0 }, "expect": { "result": { "id": 1, "name": "sample" }, "status": 0 } } ], "ctr": "expect_demo", "method": "POST", "params": [ { "name": "name", "required": true, "type": "string", "example": "verify_test", "in": "form" } ], "path": "/app/expect_demo/verify_demo", "project": "app", "summary": "Verify完整范式演示", "tested": true }, { "cases": [ { "name": "不传table参数", "method": "GET", "passed": true, "response": { "error": { "msg": "请提供 table 参数", "type": "内部系统异常" }, "result": { "msg": "请提供 table 参数", "type": "内部系统异常" }, "status": 1 }, "expect": { "error": { "msg": "请提供 table 参数", "type": "内部系统异常" }, "result": { "msg": "请提供 table 参数", "type": "内部系统异常" }, "status": 1 } }, { "name": "DESCRIBE admin", "method": "GET", "passed": true, "query": { "table": "admin" }, "response": { "result": { "columns": [ { "Default": null, "Extra": "auto_increment", "Field": "id", "Key": "PRI", "Null": "NO", "Type": "int(11) unsigned" }, { "Default": null, "Extra": "", "Field": "name", "Key": "", "Null": "YES", "Type": "varchar(100)" }, { "Default": null, "Extra": "", "Field": "phone", "Key": "UNI", "Null": "YES", "Type": "varchar(20)" }, { "Default": "0", "Extra": "", "Field": "state", "Key": "", "Null": "YES", "Type": "int(2)" }, { "Default": null, "Extra": "", "Field": "password", "Key": "", "Null": "YES", "Type": "varchar(100)" }, { "Default": "0", "Extra": "", "Field": "role_id", "Key": "", "Null": "YES", "Type": "int(11)" }, { "Default": null, "Extra": "", "Field": "title", "Key": "", "Null": "YES", "Type": "varchar(100)" }, { "Default": null, "Extra": "", "Field": "create_time", "Key": "", "Null": "YES", "Type": "datetime" }, { "Default": null, "Extra": "", "Field": "modify_time", "Key": "", "Null": "YES", "Type": "datetime" } ], "sample_data": [ { "create_time": "2026-03-20 02:32:47", "id": 1, "modify_time": "2026-03-20 02:32:47", "name": "超级管理员", "password": "admin123", "phone": "13800000001", "role_id": 1, "state": 1, "title": "系统管理员" }, { "create_time": "2026-03-20 02:32:47", "id": 2, "modify_time": "2026-03-20 02:32:47", "name": "编辑员", "password": "editor123", "phone": "13800000002", "role_id": 2, "state": 1, "title": "内容编辑" }, { "create_time": "2026-03-20 02:32:47", "id": 3, "modify_time": "2026-03-20 02:32:47", "name": "审核员", "password": "review123", "phone": "13800000003", "role_id": 3, "state": 1, "title": "内容审核" }, { "create_time": "2026-03-20 02:43:03", "id": 6, "modify_time": "2026-03-20 02:43:03", "name": "测试管理员_1773974584", "password": "test123456", "phone": "13873974584", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-20 02:43:09", "id": 9, "modify_time": "2026-03-20 02:43:09", "name": "测试管理员_1773974590", "password": "test123456", "phone": "13873974590", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-20 02:50:47", "id": 12, "modify_time": "2026-03-20 02:50:47", "name": "测试管理员_1773975048", "password": "test123456", "phone": "13873975048", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-20 02:57:19", "id": 18, "modify_time": "2026-03-20 02:57:19", "name": "测试管理员_1773975440", "password": "test123456", "phone": "13873975440", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-29 16:47:48", "id": 22, "modify_time": "2026-03-29 16:47:48", "name": "测试管理员_1774802868", "password": "test123456", "phone": "13874802868", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-29 16:47:49", "id": 25, "modify_time": "2026-03-29 16:47:50", "name": "测试管理员_1774802869", "password": "test123456", "phone": "13874802869", "role_id": 1, "state": 1, "title": "更新后的职位" }, { "create_time": "2026-03-29 16:54:20", "id": 28, "modify_time": "2026-03-29 16:54:20", "name": "测试管理员_1774803260", "password": "test123456", "phone": "13874803260", "role_id": 1, "state": 1, "title": "更新后的职位" } ], "table": "admin" }, "status": 0 }, "expect": { "result": { "columns": [], "sample_data": [], "table": "sample" }, "status": 0 } } ], "ctr": "mysql", "method": "GET", "params": [ { "name": "table", "required": false, "type": "string", "example": "admin", "in": "query" } ], "path": "/app/mysql/describe", "project": "app", "summary": "查询 MySQL 表结构", "tested": true }, { "cases": [ { "name": "MySQL原生SQL", "method": "GET", "passed": true, "response": { "result": { "name": "MySQL原生SQL测试", "success": true, "tests": [ { "count": 5, "name": "Query 原生查询 (反引号)", "result": true }, { "affected": 1, "name": "Exec 原生执行 (反引号)", "result": true }, { "count": 5, "lastQuery": "SELECT id, title FROM `article` WHERE id IN (?, ?, ?, ?, ?) LIMIT 10", "name": "IN (?) 非空数组展开", "result": true }, { "count": 0, "lastQuery": "SELECT id, title FROM `article` WHERE 1=0 LIMIT 10", "name": "IN (?) 空数组替换为1=0", "result": true }, { "count": 10, "lastQuery": "SELECT id, title FROM `article` WHERE 1=1 LIMIT 10", "name": "NOT IN (?) 空数组替换为1=1", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "status": 0 } } ], "ctr": "mysql", "method": "GET", "params": [], "path": "/app/mysql/rawsql", "project": "app", "summary": "MySQL 原生 SQL 测试", "tested": true }, { "cases": [ { "name": "SHOW TABLES", "method": "GET", "passed": true, "response": { "result": { "tables": [ { "Tables_in_test": "体育" }, { "Tables_in_test": "军事" }, { "Tables_in_test": "历史" }, { "Tables_in_test": "地理" }, { "Tables_in_test": "外语" }, { "Tables_in_test": "天文" }, { "Tables_in_test": "影音" }, { "Tables_in_test": "数学" }, { "Tables_in_test": "数学1" }, { "Tables_in_test": "文学" }, { "Tables_in_test": "生物" }, { "Tables_in_test": "综合" }, { "Tables_in_test": "admin" }, { "Tables_in_test": "article" }, { "Tables_in_test": "auth_role" }, { "Tables_in_test": "auth_user" }, { "Tables_in_test": "cached" }, { "Tables_in_test": "ctg" }, { "Tables_in_test": "history" }, { "Tables_in_test": "hotime_cache" }, { "Tables_in_test": "ibang0420_iqiyi" }, { "Tables_in_test": "question" }, { "Tables_in_test": "role" }, { "Tables_in_test": "role_user" }, { "Tables_in_test": "stroage" }, { "Tables_in_test": "test_batch" }, { "Tables_in_test": "user" }, { "Tables_in_test": "version" } ] }, "status": 0 }, "expect": { "result": { "tables": [] }, "status": 0 } } ], "ctr": "mysql", "method": "GET", "params": [], "path": "/app/mysql/tables", "project": "app", "summary": "查询 MySQL 所有表", "tested": true }, { "cases": [ { "name": "聚合函数", "method": "GET", "passed": true, "response": { "result": { "name": "聚合函数测试", "success": true, "tests": [ { "count": 11, "name": "Count 总数统计", "result": true }, { "count": 9, "name": "Count 条件统计", "result": true }, { "lastQuery": "SELECT SUM(click_num) FROM `article` WHERE `state` =? ;", "name": "Sum 求和 (单字段名)", "result": true, "sum": 12311 }, { "avg": 1367.8889, "lastQuery": "SELECT AVG(click_num) FROM `article` WHERE `state` =? ;", "name": "Avg 平均值 (单字段名)", "result": true }, { "lastQuery": "SELECT MAX(click_num) FROM `article` WHERE `state` =? ;", "max": 9999, "name": "Max 最大值 (单字段名)", "result": true }, { "lastQuery": "SELECT MIN(sort) FROM `article` WHERE `state` =? ;", "min": 1, "name": "Min 最小值 (单字段名)", "result": true }, { "name": "GROUP BY 分组统计", "result": true, "stats": [ { "article_count": 4, "avg_clicks": 450, "ctg_id": 2, "total_clicks": 1800 }, { "article_count": 3, "avg_clicks": 3461, "ctg_id": 1, "total_clicks": 10383 }, { "article_count": 1, "avg_clicks": 32, "ctg_id": 3, "total_clicks": 32 }, { "article_count": 1, "avg_clicks": 96, "ctg_id": 4, "total_clicks": 96 } ] }, { "lastQuery": "SELECT SUM(`article`.`click_num`) FROM `article` WHERE `state` =? ;", "match_single_field": false, "name": "Sum 求和 (table.column 格式)", "result": true, "sum": 0 }, { "name": "聚合函数一致性验证", "result": false, "summary": "Sum: 12311=0, Avg: 1367.8889=0, Max: 9999=0, Min: 1=0" }, { "lastQuery": "SELECT SUM(`article`.`click_num`) FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? ;", "name": "Sum 带 JOIN (table.column 格式)", "result": true, "sum": 0 }, { "count": 9, "lastQuery": "SELECT COUNT(*) FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? ;", "name": "Count 带 JOIN", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/aggregate", "project": "app", "summary": "聚合函数测试", "tested": true }, { "cases": [ { "name": "全部测试", "method": "GET", "passed": true, "response": { "result": { "1_basic_crud": { "name": "基础CRUD测试", "success": true, "tests": [ { "adminId": 76, "lastQuery": "INSERT INTO `admin` (`name`,`phone`,`state`,`password`,`role_id`,`title`,`create_time`,`modify_time`) VALUES (?,?,?,?,?,?,NOW(),NOW());", "name": "Insert 插入测试 (admin表)", "result": true }, { "admin": { "create_time": "2026-07-13 09:19:02", "id": 76, "modify_time": "2026-07-13 09:19:02", "name": "测试管理员_1783934341158219100", "password": "test123456", "phone": "13958219100", "role_id": 1, "state": 1, "title": "测试职位" }, "name": "Get 获取单条记录测试", "result": true }, { "count": 5, "name": "Select 单条件查询测试", "result": true }, { "count": 5, "lastQuery": "SELECT * FROM `admin` WHERE `role_id` \u003e? AND `state` =? ORDER BY id DESC LIMIT 5 ;", "name": "Select 多条件自动AND测试", "result": true }, { "affected": 1, "name": "Update 更新测试", "result": true }, { "affected": 1, "name": "Delete 删除测试", "result": true } ] }, "2_condition_syntax": { "name": "条件查询语法测试", "success": true, "tests": [ { "count": 3, "name": "等于条件 (=)", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,state FROM `article` WHERE `state` !=? LIMIT 3 ;", "name": "不等于条件 ([!])", "result": true }, { "count": 3, "name": "大于小于条件 ([\u003e], [\u003c])", "result": true }, { "count": 3, "name": "大于等于小于等于条件 ([\u003e=], [\u003c=])", "result": true }, { "count": 1, "lastQuery": "SELECT id,title FROM `article` WHERE `title` LIKE ? LIMIT 3 ;", "name": "LIKE 模糊查询 ([~])", "result": true }, { "count": 0, "name": "右模糊查询 ([~!])", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,click_num FROM `article` WHERE `click_num` BETWEEN ? AND ? LIMIT 3 ;", "name": "BETWEEN 区间查询 ([\u003c\u003e])", "result": true }, { "count": 3, "name": "NOT BETWEEN 查询 ([\u003e\u003c])", "result": true }, { "count": 5, "lastQuery": "SELECT id,title FROM `article` WHERE (`id` BETWEEN ? AND ? ) LIMIT 5 ;", "name": "IN 查询", "result": true }, { "count": 5, "name": "NOT IN 查询 ([!])", "result": true }, { "count": 3, "name": "IS NULL 查询", "result": true }, { "count": 3, "name": "IS NOT NULL 查询 ([!])", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,create_time FROM `article` WHERE create_time \u003e DATE_SUB(NOW(), INTERVAL 365 DAY) LIMIT 3 ;", "name": "直接 SQL 片段查询 ([##])", "result": true }, { "count": 3, "name": "显式 AND 条件", "result": true }, { "count": 5, "name": "OR 条件", "result": true }, { "count": 5, "lastQuery": "SELECT id,title,sort,state FROM `article` WHERE (( `click_num` \u003e? OR `sort` \u003e=? ) AND `state` =?) LIMIT 5 ;", "name": "嵌套 AND/OR 条件", "result": true } ] }, "3_chain_query": { "name": "链式查询测试", "success": true, "tests": [ { "count": 9, "name": "基本链式查询 Table().Where().Select()", "result": true }, { "count": 9, "name": "链式 And 条件", "result": true }, { "count": 9, "name": "链式 Or 条件", "result": true }, { "count": 5, "name": "链式 Order 排序", "result": true }, { "count": 3, "name": "链式 Limit 限制", "result": true }, { "article": { "author": "管理员", "id": 1, "title": "数据库入门指南" }, "name": "链式 Get 获取单条", "result": true }, { "count": 9, "name": "链式 Count 统计", "result": true }, { "count": 5, "name": "链式 Page 分页", "result": true }, { "name": "链式 Group 分组", "result": true, "stats": [ { "cnt": 3, "ctg_id": 1 }, { "cnt": 4, "ctg_id": 2 }, { "cnt": 1, "ctg_id": 3 }, { "cnt": 1, "ctg_id": 4 } ] }, { "affected": 1, "name": "链式 Update 更新", "result": true } ] }, "4_join_query": { "name": "JOIN查询测试", "success": true, "tests": [ { "count": 5, "data": [ { "ctg_name": "新闻资讯", "id": 1, "title": "数据库入门指南" }, { "ctg_name": "新闻资讯", "id": 2, "title": "新闻发布系统上线公告" }, { "ctg_name": "新闻资讯", "id": 11, "title": "高点击量文章" }, { "ctg_name": "技术文档", "id": 3, "title": "Go语言最佳实践" }, { "ctg_name": "技术文档", "id": 4, "title": "API接口设计规范" } ], "name": "LEFT JOIN 链式查询", "result": true }, { "count": 5, "lastQuery": "SELECT `article`.`id`, `article`.`title`, `ctg`.`name` as ctg_name FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? LIMIT 5 ;", "name": "传统 JOIN 语法", "result": true }, { "count": 5, "data": [ { "admin_name": "超级管理员", "ctg_name": "新闻资讯", "id": 1, "title": "数据库入门指南" }, { "admin_name": "编辑员", "ctg_name": "新闻资讯", "id": 2, "title": "新闻发布系统上线公告" }, { "admin_name": "编辑员", "ctg_name": "新闻资讯", "id": 11, "title": "高点击量文章" }, { "admin_name": "超级管理员", "ctg_name": "技术文档", "id": 3, "title": "Go语言最佳实践" }, { "admin_name": "审核员", "ctg_name": "技术文档", "id": 4, "title": "API接口设计规范" } ], "name": "多表 JOIN", "result": true }, { "count": 5, "name": "INNER JOIN", "result": true } ] }, "5_aggregate": { "name": "聚合函数测试", "success": true, "tests": [ { "count": 11, "name": "Count 总数统计", "result": true }, { "count": 9, "name": "Count 条件统计", "result": true }, { "lastQuery": "SELECT SUM(click_num) FROM `article` WHERE `state` =? ;", "name": "Sum 求和 (单字段名)", "result": true, "sum": 12311 }, { "avg": 1367.8889, "lastQuery": "SELECT AVG(click_num) FROM `article` WHERE `state` =? ;", "name": "Avg 平均值 (单字段名)", "result": true }, { "lastQuery": "SELECT MAX(click_num) FROM `article` WHERE `state` =? ;", "max": 9999, "name": "Max 最大值 (单字段名)", "result": true }, { "lastQuery": "SELECT MIN(sort) FROM `article` WHERE `state` =? ;", "min": 1, "name": "Min 最小值 (单字段名)", "result": true }, { "name": "GROUP BY 分组统计", "result": true, "stats": [ { "article_count": 4, "avg_clicks": 450, "ctg_id": 2, "total_clicks": 1800 }, { "article_count": 3, "avg_clicks": 3461, "ctg_id": 1, "total_clicks": 10383 }, { "article_count": 1, "avg_clicks": 32, "ctg_id": 3, "total_clicks": 32 }, { "article_count": 1, "avg_clicks": 96, "ctg_id": 4, "total_clicks": 96 } ] }, { "lastQuery": "SELECT SUM(`article`.`click_num`) FROM `article` WHERE `state` =? ;", "match_single_field": false, "name": "Sum 求和 (table.column 格式)", "result": true, "sum": 0 }, { "name": "聚合函数一致性验证", "result": false, "summary": "Sum: 12311=0, Avg: 1367.8889=0, Max: 9999=0, Min: 1=0" }, { "lastQuery": "SELECT SUM(`article`.`click_num`) FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? ;", "name": "Sum 带 JOIN (table.column 格式)", "result": true, "sum": 0 }, { "count": 9, "lastQuery": "SELECT COUNT(*) FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? ;", "name": "Count 带 JOIN", "result": true } ] }, "6_pagination": { "name": "分页查询测试", "success": true, "tests": [ { "count": 5, "name": "PageSelect 分页查询", "result": true }, { "count": 4, "name": "PageSelect 第二页", "result": true }, { "count": 3, "name": "链式 Page 分页", "result": true }, { "count": 3, "lastQuery": "SELECT id,title FROM `article` WHERE (`state` =?) LIMIT 3 OFFSET 2 ;", "name": "Offset 偏移查询", "result": true } ] }, "7_batch_insert": { "name": "批量插入测试", "success": true, "tests": [ { "affected": 3, "lastQuery": "INSERT INTO `test_batch` (`name`, `state`, `title`) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?)", "name": "Inserts 批量插入", "result": true }, { "affected": 2, "name": "Inserts 带 [#] 标记", "result": true } ] }, "8_upsert": { "name": "Upsert测试", "success": true, "tests": [ { "affected": 1, "lastQuery": "INSERT INTO `admin` (`password`, `role_id`, `title`, `create_time`, `modify_time`, `name`, `phone`, `state`) VALUES (?, ?, ?, NOW(), NOW(), ?, ?, ?) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `state` = VALUES(`state`), `title` = VALUES(`title`), `modify_time` = NOW()", "name": "Upsert 插入新记录 (admin表)", "result": true }, { "affected": 2, "name": "Upsert 更新已存在记录", "result": true, "updatedAdmin": { "create_time": "2026-07-13 09:19:02", "id": 77, "modify_time": "2026-07-13 09:19:02", "name": "Upsert更新后管理员", "password": "test123", "phone": "19983934341", "role_id": 2, "state": 1, "title": "更新后职位" } } ] }, "9_transaction": { "name": "事务测试", "success": true, "tests": [ { "name": "事务成功提交", "recordExists": true, "result": true }, { "name": "事务回滚", "recordRolledBack": false, "result": true } ] } }, "status": 0 }, "expect": { "result": { "1_basic_crud": { "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "2_condition_syntax": { "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "3_chain_query": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "4_join_query": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "5_aggregate": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "6_pagination": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "7_batch_insert": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "8_upsert": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "9_transaction": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] } }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/all", "project": "app", "summary": "运行全部通用测试", "tested": true }, { "cases": [ { "name": "批量插入", "method": "GET", "passed": true, "response": { "result": { "name": "批量插入测试", "success": true, "tests": [ { "affected": 3, "lastQuery": "INSERT INTO `test_batch` (`name`, `state`, `title`) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?)", "name": "Inserts 批量插入", "result": true }, { "affected": 2, "name": "Inserts 带 [#] 标记", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/batch", "project": "app", "summary": "批量插入测试", "tested": true }, { "cases": [ { "name": "链式查询", "method": "GET", "passed": true, "response": { "result": { "name": "链式查询测试", "success": true, "tests": [ { "count": 9, "name": "基本链式查询 Table().Where().Select()", "result": true }, { "count": 9, "name": "链式 And 条件", "result": true }, { "count": 9, "name": "链式 Or 条件", "result": true }, { "count": 5, "name": "链式 Order 排序", "result": true }, { "count": 3, "name": "链式 Limit 限制", "result": true }, { "article": { "author": "管理员", "id": 1, "title": "数据库入门指南" }, "name": "链式 Get 获取单条", "result": true }, { "count": 9, "name": "链式 Count 统计", "result": true }, { "count": 5, "name": "链式 Page 分页", "result": true }, { "name": "链式 Group 分组", "result": true, "stats": [ { "cnt": 3, "ctg_id": 1 }, { "cnt": 4, "ctg_id": 2 }, { "cnt": 1, "ctg_id": 3 }, { "cnt": 1, "ctg_id": 4 } ] }, { "affected": 0, "name": "链式 Update 更新", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/chain", "project": "app", "summary": "链式查询测试", "tested": true }, { "cases": [ { "name": "条件查询", "method": "GET", "passed": true, "response": { "result": { "name": "条件查询语法测试", "success": true, "tests": [ { "count": 3, "name": "等于条件 (=)", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,state FROM `article` WHERE `state` !=? LIMIT 3 ;", "name": "不等于条件 ([!])", "result": true }, { "count": 3, "name": "大于小于条件 ([\u003e], [\u003c])", "result": true }, { "count": 3, "name": "大于等于小于等于条件 ([\u003e=], [\u003c=])", "result": true }, { "count": 1, "lastQuery": "SELECT id,title FROM `article` WHERE `title` LIKE ? LIMIT 3 ;", "name": "LIKE 模糊查询 ([~])", "result": true }, { "count": 0, "name": "右模糊查询 ([~!])", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,click_num FROM `article` WHERE `click_num` BETWEEN ? AND ? LIMIT 3 ;", "name": "BETWEEN 区间查询 ([\u003c\u003e])", "result": true }, { "count": 3, "name": "NOT BETWEEN 查询 ([\u003e\u003c])", "result": true }, { "count": 5, "lastQuery": "SELECT id,title FROM `article` WHERE (`id` BETWEEN ? AND ? ) LIMIT 5 ;", "name": "IN 查询", "result": true }, { "count": 5, "name": "NOT IN 查询 ([!])", "result": true }, { "count": 3, "name": "IS NULL 查询", "result": true }, { "count": 3, "name": "IS NOT NULL 查询 ([!])", "result": true }, { "count": 3, "lastQuery": "SELECT id,title,create_time FROM `article` WHERE create_time \u003e DATE_SUB(NOW(), INTERVAL 365 DAY) LIMIT 3 ;", "name": "直接 SQL 片段查询 ([##])", "result": true }, { "count": 3, "name": "显式 AND 条件", "result": true }, { "count": 5, "name": "OR 条件", "result": true }, { "count": 5, "lastQuery": "SELECT id,title,sort,state FROM `article` WHERE (( `click_num` \u003e? OR `sort` \u003e=? ) AND `state` =?) LIMIT 5 ;", "name": "嵌套 AND/OR 条件", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/condition", "project": "app", "summary": "条件查询语法测试", "tested": true }, { "cases": [ { "name": "CRUD测试", "method": "GET", "passed": true, "response": { "result": { "name": "基础CRUD测试", "success": true, "tests": [ { "adminId": 79, "lastQuery": "INSERT INTO `admin` (`phone`,`state`,`password`,`role_id`,`title`,`create_time`,`modify_time`,`name`) VALUES (?,?,?,?,?,NOW(),NOW(),?);", "name": "Insert 插入测试 (admin表)", "result": true }, { "admin": { "create_time": "2026-07-13 09:19:02", "id": 79, "modify_time": "2026-07-13 09:19:02", "name": "测试管理员_1783934341599114700", "password": "test123456", "phone": "13999114700", "role_id": 1, "state": 1, "title": "测试职位" }, "name": "Get 获取单条记录测试", "result": true }, { "count": 5, "name": "Select 单条件查询测试", "result": true }, { "count": 5, "lastQuery": "SELECT * FROM `admin` WHERE `role_id` \u003e? AND `state` =? ORDER BY id DESC LIMIT 5 ;", "name": "Select 多条件自动AND测试", "result": true }, { "affected": 1, "name": "Update 更新测试", "result": true }, { "affected": 1, "name": "Delete 删除测试", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample", "result": true } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/crud", "project": "app", "summary": "基础 CRUD 测试", "tested": true }, { "cases": [ { "name": "JOIN查询", "method": "GET", "passed": true, "response": { "result": { "name": "JOIN查询测试", "success": true, "tests": [ { "count": 5, "data": [ { "ctg_name": "新闻资讯", "id": 1, "title": "数据库入门指南" }, { "ctg_name": "新闻资讯", "id": 2, "title": "新闻发布系统上线公告" }, { "ctg_name": "新闻资讯", "id": 11, "title": "高点击量文章" }, { "ctg_name": "技术文档", "id": 3, "title": "Go语言最佳实践" }, { "ctg_name": "技术文档", "id": 4, "title": "API接口设计规范" } ], "name": "LEFT JOIN 链式查询", "result": true }, { "count": 5, "lastQuery": "SELECT `article`.`id`, `article`.`title`, `ctg`.`name` as ctg_name FROM `article` LEFT JOIN `ctg` ON `article`.`ctg_id` = `ctg`.`id` WHERE `article`.`state` =? LIMIT 5 ;", "name": "传统 JOIN 语法", "result": true }, { "count": 5, "data": [ { "admin_name": "超级管理员", "ctg_name": "新闻资讯", "id": 1, "title": "数据库入门指南" }, { "admin_name": "编辑员", "ctg_name": "新闻资讯", "id": 2, "title": "新闻发布系统上线公告" }, { "admin_name": "编辑员", "ctg_name": "新闻资讯", "id": 11, "title": "高点击量文章" }, { "admin_name": "超级管理员", "ctg_name": "技术文档", "id": 3, "title": "Go语言最佳实践" }, { "admin_name": "审核员", "ctg_name": "技术文档", "id": 4, "title": "API接口设计规范" } ], "name": "多表 JOIN", "result": true }, { "count": 5, "name": "INNER JOIN", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/join", "project": "app", "summary": "JOIN 查询测试", "tested": true }, { "cases": [ { "name": "分页查询", "method": "GET", "passed": true, "response": { "result": { "name": "分页查询测试", "success": true, "tests": [ { "count": 5, "name": "PageSelect 分页查询", "result": true }, { "count": 4, "name": "PageSelect 第二页", "result": true }, { "count": 3, "name": "链式 Page 分页", "result": true }, { "count": 3, "lastQuery": "SELECT id,title FROM `article` WHERE (`state` =?) LIMIT 3 OFFSET 2 ;", "name": "Offset 偏移查询", "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/pagination", "project": "app", "summary": "分页查询测试", "tested": true }, { "cases": [ { "name": "固定返回错误码2", "method": "GET", "passed": true, "response": { "error": { "msg": "dsadasd", "type": "访问权限异常" }, "result": { "msg": "dsadasd", "type": "访问权限异常" }, "status": 2 }, "expect": { "error": { "msg": "dsadasd", "type": "访问权限异常" }, "result": { "msg": "dsadasd", "type": "访问权限异常" }, "status": 2 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/test", "project": "app", "summary": "固定错误返回", "tested": true }, { "cases": [ { "name": "事务测试", "method": "GET", "passed": true, "response": { "result": { "name": "事务测试", "success": true, "tests": [ { "name": "事务成功提交", "recordExists": true, "result": true }, { "name": "事务回滚", "recordRolledBack": false, "result": true } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/transaction", "project": "app", "summary": "事务测试", "tested": true }, { "cases": [ { "name": "Upsert测试", "method": "GET", "passed": true, "response": { "result": { "name": "Upsert测试", "success": true, "tests": [ { "affected": 1, "lastQuery": "INSERT INTO `admin` (`create_time`, `modify_time`, `name`, `phone`, `state`, `password`, `role_id`, `title`) VALUES (NOW(), NOW(), ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `state` = VALUES(`state`), `title` = VALUES(`title`), `modify_time` = NOW()", "name": "Upsert 插入新记录 (admin表)", "result": true }, { "affected": 2, "name": "Upsert 更新已存在记录", "result": true, "updatedAdmin": { "create_time": "2026-07-13 09:19:02", "id": 80, "modify_time": "2026-07-13 09:19:02", "name": "Upsert更新后管理员", "password": "test123", "phone": "19983934341", "role_id": 2, "state": 1, "title": "更新后职位" } } ] }, "status": 0 }, "expect": { "result": { "name": "sample", "success": true, "tests": [ { "name": "sample" } ] }, "status": 0 } } ], "ctr": "test", "method": "GET", "params": [], "path": "/app/test/upsert", "project": "app", "summary": "Upsert 测试", "tested": true } ], "flows": [ { "desc": "expect_demo 多接口联调", "group": "expect_demo", "name": "expect_chain", "passed": true, "prep": "依次调用 string_result 与 map_result。\n步骤通过 FromCase 复用单接口验收用例的请求模板,跑通后回写该用例的响应与通过状态。", "steps": [ { "bindCase": "result是字符串", "caseName": "步骤1-字符串", "expect": { "result": "样本", "status": 0 }, "failReason": "", "form": null, "index": 1, "json": null, "method": "GET", "name": "字符串结果", "note": "校验字符串 result:期望返回「操作成功」。", "passed": true, "path": "/app/expect_demo/string_result", "query": null, "response": { "result": "操作成功", "status": 0 }, "verifyError": "" }, { "bindCase": "result是Map-校验字段名+类型+值", "caseName": "步骤2-Map", "expect": { "result": { "id": 1, "in_stock": true, "name": "sample", "price": 1 }, "status": 0 }, "failReason": "", "form": null, "index": 2, "json": null, "method": "GET", "name": "Map结果", "note": "校验对象 result:至少包含 id=1,用于串联后续步骤前的结构确认。", "passed": true, "path": "/app/expect_demo/map_result", "query": null, "response": { "result": { "id": 1, "in_stock": true, "name": "示例商品", "price": 19.9 }, "status": 0 }, "verifyError": "" } ] } ], "title": "My API", "version": "1.0.0" }