test_business_unit_dashboard.sh 8.76 KB
#!/bin/bash
# 事业部驾驶舱接口全面测试脚本
# 测试时间:202512

BASE_URL="http://localhost:2011"
TEST_MONTH="202512"
BUSINESS_UNIT_ID="734725299018663173"  # 示例事业部ID,需要根据实际情况调整

# 颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 测试结果统计
TOTAL=0
PASSED=0
FAILED=0

# 测试结果文件
RESULT_FILE="事业部驾驶舱接口测试报告.md"

echo "# 事业部驾驶舱接口测试报告" > "$RESULT_FILE"
echo "" >> "$RESULT_FILE"
echo "## 测试概览" >> "$RESULT_FILE"
echo "- 测试时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$RESULT_FILE"
echo "- 测试月份: $TEST_MONTH" >> "$RESULT_FILE"
echo "" >> "$RESULT_FILE"
echo "## 测试详情" >> "$RESULT_FILE"
echo "" >> "$RESULT_FILE"

# 获取token
echo "=========================================="
echo "获取登录token..."
TOKEN_RESPONSE=$(curl -s -X POST "$BASE_URL/api/oauth/Login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e")

TOKEN=$(echo $TOKEN_RESPONSE | grep -o '"token":"[^"]*' | cut -d'"' -f4)
if [ -z "$TOKEN" ]; then
  echo -e "${RED}✗ 获取token失败${NC}"
  exit 1
fi
echo -e "${GREEN}✓ Token获取成功${NC}"
echo ""

# 测试函数
test_api() {
  local api_name=$1
  local endpoint=$2
  local data=$3
  local description=$4
  
  TOTAL=$((TOTAL + 1))
  
  echo "=========================================="
  echo "测试 $TOTAL: $api_name"
  echo "=========================================="
  echo "描述: $description"
  echo "请求参数: $data"
  echo ""
  
  RESPONSE=$(curl -s -X POST "$BASE_URL/api/Extend/LqBusinessUnitDashboard/$endpoint" \
    -H "Content-Type: application/json" \
    -H "Authorization: $TOKEN" \
    -d "$data" \
    -w "\n%{http_code}")
  
  HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
  BODY=$(echo "$RESPONSE" | sed '$d')
  
  echo "$RESPONSE" | head -20
  
  if [ "$HTTP_CODE" = "200" ]; then
    CODE=$(echo "$BODY" | grep -o '"code":[0-9]*' | cut -d':' -f2)
    if [ "$CODE" = "200" ]; then
      echo -e "${GREEN}✓ PASS${NC}"
      PASSED=$((PASSED + 1))
      echo "### $TOTAL. $api_name - ✓ 通过" >> "$RESULT_FILE"
      echo "" >> "$RESULT_FILE"
      echo "- **测试时间**: $(date '+%Y-%m-%d %H:%M:%S')" >> "$RESULT_FILE"
      echo "- **请求参数**: \`$data\`" >> "$RESULT_FILE"
      echo "- **响应状态码**: $CODE" >> "$RESULT_FILE"
      echo "- **响应数据**: 成功返回数据" >> "$RESULT_FILE"
      echo "" >> "$RESULT_FILE"
    else
      echo -e "${RED}✗ FAIL - API返回错误码: $CODE${NC}"
      FAILED=$((FAILED + 1))
      echo "### $TOTAL. $api_name - ✗ 失败" >> "$RESULT_FILE"
      echo "" >> "$RESULT_FILE"
      echo "- **错误信息**: API返回错误码 $CODE" >> "$RESULT_FILE"
      echo "- **响应数据**: $BODY" >> "$RESULT_FILE"
      echo "" >> "$RESULT_FILE"
    fi
  else
    echo -e "${RED}✗ FAIL - HTTP状态码: $HTTP_CODE${NC}"
    FAILED=$((FAILED + 1))
    echo "### $TOTAL. $api_name - ✗ 失败" >> "$RESULT_FILE"
    echo "" >> "$RESULT_FILE"
    echo "- **错误信息**: HTTP状态码 $HTTP_CODE" >> "$RESULT_FILE"
    echo "- **响应数据**: $BODY" >> "$RESULT_FILE"
    echo "" >> "$RESULT_FILE"
  fi
  echo ""
}

# 1. GetStatistics - 核心业务指标统计
test_api "GetStatistics" "GetStatistics" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\"}" \
  "获取核心业务指标统计数据"

# 2. GetPerformanceTrend - 业绩趋势分析
test_api "GetPerformanceTrend" "GetPerformanceTrend" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"monthCount\":6}" \
  "获取近6个月业绩趋势数据"

# 3. GetStoreRanking - 门店排行
test_api "GetStoreRanking" "GetStoreRanking" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"topCount\":10,\"rankingType\":\"NetPerformance\"}" \
  "获取门店业绩排行(按净业绩)"

# 4. GetOperationStatistics - 运营分析
test_api "GetOperationStatistics" "GetOperationStatistics" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\"}" \
  "获取运营分析数据(开单、消耗、退卡分析)"

# 5. GetStoreDetailList - 门店明细列表
test_api "GetStoreDetailList" "GetStoreDetailList" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"currentPage\":1,\"pageSize\":10}" \
  "获取门店明细列表(分页)"

# 6. GetManagerRanking - 总经理/经理业绩排行
test_api "GetManagerRanking" "GetManagerRanking" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"managerType\":1,\"topCount\":10}" \
  "获取总经理/经理业绩排行"

# 7. GetComparisonAnalysis - 对比分析
test_api "GetComparisonAnalysis" "GetComparisonAnalysis" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\"}" \
  "获取对比分析数据(环比、同比)"

# 8. GetStoreDistribution - 门店业绩分布
test_api "GetStoreDistribution" "GetStoreDistribution" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\"}" \
  "获取门店业绩分布数据"

# 9. GetManagerDistribution - 总经理/经理业绩分布
test_api "GetManagerDistribution" "GetManagerDistribution" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\"}" \
  "获取总经理/经理业绩分布数据"

# 10. GetManagerTrend - 总经理/经理业绩趋势(需要先获取managerIds)
echo "=========================================="
echo "测试 10: GetManagerTrend"
echo "=========================================="
echo "先获取经理ID列表..."
MANAGER_RESPONSE=$(curl -s -X POST "$BASE_URL/api/Extend/LqBusinessUnitDashboard/GetManagerRanking" \
  -H "Content-Type: application/json" \
  -H "Authorization: $TOKEN" \
  -d "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"managerType\":1,\"topCount\":5}")
MANAGER_IDS=$(echo "$MANAGER_RESPONSE" | grep -o '"ManagerId":"[^"]*' | cut -d'"' -f4 | head -2 | tr '\n' ',' | sed 's/,$//' | sed 's/,/","/g' | sed 's/^/"/' | sed 's/$/"/' | sed 's/" "/","/g')
if [ -n "$MANAGER_IDS" ] && [ "$MANAGER_IDS" != '""' ]; then
  MANAGER_IDS_ARRAY="[$MANAGER_IDS]"
  test_api "GetManagerTrend" "GetManagerTrend" \
    "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"managerIds\":$MANAGER_IDS_ARRAY,\"monthCount\":6}" \
    "获取总经理/经理业绩趋势数据"
else
  echo "未获取到经理ID,跳过GetManagerTrend测试"
  TOTAL=$((TOTAL + 1))
  echo "### $TOTAL. GetManagerTrend - ⚠ 跳过" >> "$RESULT_FILE"
  echo "" >> "$RESULT_FILE"
  echo "- **原因**: 未获取到经理ID" >> "$RESULT_FILE"
  echo "" >> "$RESULT_FILE"
fi

# 11. GetStoreManagerRanking - 店长业绩排行
test_api "GetStoreManagerRanking" "GetStoreManagerRanking" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"topCount\":10}" \
  "获取店长业绩排行"

# 12. GetHealthCoachRanking - 健康师业绩排行
test_api "GetHealthCoachRanking" "GetHealthCoachRanking" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"topCount\":10}" \
  "获取健康师业绩排行"

# 13. GetManagerDetailList - 总经理/经理明细列表
test_api "GetManagerDetailList" "GetManagerDetailList" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"currentPage\":1,\"pageSize\":10}" \
  "获取总经理/经理明细列表(分页)"

# 14. GetStoreManagerDetailList - 店长明细列表
test_api "GetStoreManagerDetailList" "GetStoreManagerDetailList" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"currentPage\":1,\"pageSize\":10}" \
  "获取店长明细列表(分页)"

# 15. GetHealthCoachDetailList - 健康师明细列表
test_api "GetHealthCoachDetailList" "GetHealthCoachDetailList" \
  "{\"businessUnitId\":\"$BUSINESS_UNIT_ID\",\"statisticsMonth\":\"$TEST_MONTH\",\"currentPage\":1,\"pageSize\":10}" \
  "获取健康师明细列表(分页)"

# 生成测试总结
PASS_RATE=$(echo "scale=1; $PASSED * 100 / $TOTAL" | bc)

echo "" >> "$RESULT_FILE"
echo "## 测试总结" >> "$RESULT_FILE"
echo "" >> "$RESULT_FILE"
echo "- **总计**: $TOTAL 个接口" >> "$RESULT_FILE"
echo "- **通过**: $PASSED 个" >> "$RESULT_FILE"
echo "- **失败**: $FAILED 个" >> "$RESULT_FILE"
echo "- **通过率**: ${PASS_RATE}%" >> "$RESULT_FILE"
echo "" >> "$RESULT_FILE"

echo ""
echo "=========================================="
echo "测试完成"
echo "=========================================="
echo -e "总测试数: ${YELLOW}$TOTAL${NC}"
echo -e "通过数: ${GREEN}$PASSED${NC}"
echo -e "失败数: ${RED}$FAILED${NC}"
echo -e "通过率: ${YELLOW}${PASS_RATE}%${NC}"
echo ""
echo "测试报告已保存到: $RESULT_FILE"