234 lines
9.1 KiB
Bash
234 lines
9.1 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# =============================================================================
|
|||
|
|
# 企微IT智能服务台 — 快速规则 API 联调测试脚本
|
|||
|
|
# =============================================================================
|
|||
|
|
# 用途:独立测试所有 12 个快速规则 API
|
|||
|
|
# 日期:2026-07-27
|
|||
|
|
# =============================================================================
|
|||
|
|
|
|||
|
|
# 默认配置
|
|||
|
|
BASE_URL="${API_BASE_URL:-http://localhost:8000}"
|
|||
|
|
TOKEN="${API_TOKEN:-}"
|
|||
|
|
|
|||
|
|
# 颜色
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
|
|||
|
|
# 计数器
|
|||
|
|
PASS=0
|
|||
|
|
FAIL=0
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 工具函数
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
check_response() {
|
|||
|
|
local response="$1"
|
|||
|
|
local expected_code="$2"
|
|||
|
|
local test_name="$3"
|
|||
|
|
|
|||
|
|
if echo "$response" | grep -q "\"code\":$expected_code"; then
|
|||
|
|
echo -e "${GREEN}✓ PASS${NC}: $test_name"
|
|||
|
|
((PASS++))
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}✗ FAIL${NC}: $test_name"
|
|||
|
|
echo "Response: $response"
|
|||
|
|
((FAIL++))
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 0. 健康检查
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "${YELLOW}=== 0. 健康检查 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/health")
|
|||
|
|
echo "Health: $RESPONSE"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 1. 测试登录(获取 token)
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 1. 登录 ===${NC}"
|
|||
|
|
echo "请先用浏览器登录获取 token,或使用下面的方式:"
|
|||
|
|
|
|||
|
|
# 直接测试(需要 token)
|
|||
|
|
if [ -z "$TOKEN" ]; then
|
|||
|
|
echo -e "${RED}错误:请先设置 API_TOKEN 环境变量${NC}"
|
|||
|
|
echo "使用方式:API_TOKEN=your_token bash $0"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 2. 规则列表
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 2. 规则列表 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/api/admin/quick-rules?page=1&size=10" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "GET /quick-rules"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 3. 创建规则
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 3. 创建规则 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"rule_type": "greeting",
|
|||
|
|
"keyword": "test_你好",
|
|||
|
|
"priority": 10,
|
|||
|
|
"is_active": true
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules"
|
|||
|
|
RULE_ID=$(echo "$RESPONSE" | grep -oP '"id":\K\d+' | head -1)
|
|||
|
|
echo "Created rule ID: $RULE_ID"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 4. 更新规则
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 4. 更新规则 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X PUT "$BASE_URL/api/admin/quick-rules/$RULE_ID" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"priority": 20,
|
|||
|
|
"is_active": false
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "PUT /quick-rules/$RULE_ID"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 5. 批量导入
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 5. 批量导入 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/import" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"rules": [
|
|||
|
|
{"rule_type": "greeting", "keyword": "test_hey", "priority": 5},
|
|||
|
|
{"rule_type": "greeting", "keyword": "test_hello", "priority": 5}
|
|||
|
|
],
|
|||
|
|
"mode": "skip_duplicates"
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/import"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 6. 批量导出
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 6. 批量导出 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/api/admin/quick-rules/export?format=json" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "GET /quick-rules/export"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 7. 智能体更新(高置信度)
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 7. 智能体更新(高置信度) ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/agent-update" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"rule_type": "routing_prefilter",
|
|||
|
|
"category": "IT服务",
|
|||
|
|
"keyword": "test_投影仪",
|
|||
|
|
"priority": 5,
|
|||
|
|
"confidence": 0.92,
|
|||
|
|
"reason": "测试用例",
|
|||
|
|
"agent_id": "test_agent"
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/agent-update (confidence=0.92)"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 8. 智能体更新(中等置信度)
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 8. 智能体更新(中等置信度) ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/agent-update" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"rule_type": "routing_prefilter",
|
|||
|
|
"category": "IT服务",
|
|||
|
|
"keyword": "test_音响",
|
|||
|
|
"priority": 5,
|
|||
|
|
"confidence": 0.7,
|
|||
|
|
"reason": "测试用例",
|
|||
|
|
"agent_id": "test_agent"
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/agent-update (confidence=0.7)"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 9. 智能体更新(低置信度)
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 9. 智能体更新(低置信度) ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/agent-update" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"rule_type": "routing_prefilter",
|
|||
|
|
"category": "IT服务",
|
|||
|
|
"keyword": "test_键盘",
|
|||
|
|
"priority": 5,
|
|||
|
|
"confidence": 0.3,
|
|||
|
|
"reason": "测试用例",
|
|||
|
|
"agent_id": "test_agent"
|
|||
|
|
}')
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/agent-update (confidence=0.3)"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 10. 审计日志
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 10. 审计日志 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/api/admin/quick-rules/audit-log?page=1&size=10" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "GET /quick-rules/audit-log"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 11. 统计详情
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 11. 统计详情 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/api/admin/quick-rules/stats/detail" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "GET /quick-rules/stats/detail"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 12. 刷新缓存
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 12. 刷新缓存 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/refresh" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/refresh"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 13. 批量删除
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 13. 批量删除 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X POST "$BASE_URL/api/admin/quick-rules/batch-delete" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d "{\"ids\": [$RULE_ID]}")
|
|||
|
|
check_response "$RESPONSE" "0" "POST /quick-rules/batch-delete"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 14. 简单统计
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 14. 简单统计 ===${NC}"
|
|||
|
|
RESPONSE=$(curl -s -X GET "$BASE_URL/api/admin/quick-rules/stats" \
|
|||
|
|
-H "Authorization: Bearer $TOKEN")
|
|||
|
|
check_response "$RESPONSE" "0" "GET /quick-rules/stats"
|
|||
|
|
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
# 汇总
|
|||
|
|
# --------------------------------------------------------------------------
|
|||
|
|
echo -e "\n${YELLOW}=== 测试汇总 ===${NC}"
|
|||
|
|
echo -e "${GREEN}通过: $PASS${NC}"
|
|||
|
|
echo -e "${RED}失败: $FAIL${NC}"
|
|||
|
|
|
|||
|
|
if [ $FAIL -eq 0 ]; then
|
|||
|
|
echo -e "${GREEN}✓ 所有测试通过!${NC}"
|
|||
|
|
exit 0
|
|||
|
|
else
|
|||
|
|
echo -e "${RED}✗ 有 $FAIL 个测试失败${NC}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|