#!/bin/bash set -eu # ============================================ # 端到端测试 # ============================================ ROOT="$(cd "$(dirname "$0")/.." && pwd)" API="http://127.0.0.1:8770/api" PASS=0 FAIL=0 check() { local name="$1" local condition="$2" if eval "$condition"; then echo " ✓ $name" PASS=$((PASS + 1)) else echo " ✗ $name" FAIL=$((FAIL + 1)) fi } echo "=== 端到端测试 ===" echo "" # 测试1: 仪表盘 echo "[仪表盘]" DASHBOARD=$(curl -s "$API/dashboard") check "仪表盘返回200" '[ -n "$DASHBOARD" ]' check "总消息数 > 0" 'echo "$DASHBOARD" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if d[\"total_messages\"]>0 else 1)"' check "销售人数 = 3" 'echo "$DASHBOARD" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d[\"salespersons\"])==3 else 1)"' # 测试2: 销售列表 echo "[销售列表]" SP=$(curl -s "$API/salespersons") check "销售列表返回3条" 'echo "$SP" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d)==3 else 1)"' # 测试3: 客户列表 echo "[客户列表]" CUSTOMERS=$(curl -s "$API/customers") check "客户列表非空" 'echo "$CUSTOMERS" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d)>0 else 1)"' HIGH=$(curl -s "$API/customers?intent_level=high") check "高意向筛选有效" 'echo "$HIGH" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if all(c[\"intent_level\"]==\"high\" for c in d) else 1)"' # 测试4: 客户详情 echo "[客户详情]" FIRST_CUST_ID=$(echo "$CUSTOMERS" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d[0][\"id\"])") DETAIL=$(curl -s "$API/customers/$FIRST_CUST_ID") check "客户详情有摘要" 'echo "$DETAIL" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if d.get(\"summary\") else 1)"' check "客户详情有阶段" 'echo "$DETAIL" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if d.get(\"stage\") else 1)"' # 测试5: 聊天记录 echo "[聊天记录]" MSGS=$(curl -s "$API/customers/$FIRST_CUST_ID/messages?page=1&page_size=10") check "聊天记录非空" 'echo "$MSGS" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d[\"messages\"])>0 else 1)"' check "聊天记录总数 > 0" 'echo "$MSGS" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if d[\"total\"]>0 else 1)"' # 测试6: 成交录入 echo "[成交录入]" DEAL_RES=$(curl -s -X POST "$API/deals" \ -H "Content-Type: application/json" \ -d "{\"salesperson_id\":1,\"customer_id\":$FIRST_CUST_ID,\"product_name\":\"测试产品\",\"amount\":99,\"deal_date\":\"2026-07-14\"}") check "成交录入成功" 'echo "$DEAL_RES" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if d.get(\"id\") else 1)"' # 测试7: 成交列表 echo "[成交列表]" DEALS=$(curl -s "$API/deals") check "成交列表非空" 'echo "$DEALS" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d)>0 else 1)"' # 测试8: 同步状态 echo "[同步状态]" SYNC=$(curl -s "$API/sync/status") check "同步状态返回3条" 'echo "$SYNC" | python3 -c "import sys,json; d=json.load(sys.stdin); exit(0 if len(d)==3 else 1)"' echo "" echo "==========================================" echo " 通过: $PASS 失败: $FAIL" echo "==========================================" [ "$FAIL" -eq 0 ] && exit 0 || exit 1