test_lock_by_month_api.sh 6.4 KB
#!/bin/bash
# 测试批量锁定当月工资接口

BASE_URL="http://localhost:2011"

echo "============================================================"
echo "批量锁定当月工资接口测试"
echo "============================================================"
echo ""

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

echo "登录响应: $LOGIN_RESPONSE" | head -c 200
echo ""

TOKEN=$(echo "$LOGIN_RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if 'data' in data and 'token' in data['data']:
        print(data['data']['token'])
    else:
        print('')
except Exception as e:
    print('')
" 2>/dev/null)

if [ -z "$TOKEN" ]; then
  echo "❌ 无法获取token,请检查:"
  echo "   1. 服务是否已启动(${BASE_URL})"
  echo "   2. 登录接口是否正常"
  echo "   3. 账号密码是否正确"
  exit 1
fi

echo "✅ 成功获取token"
echo ""

# 测试年份和月份
YEAR=2025
MONTH=12

# 定义服务列表
declare -a services=(
  "lqsalary:健康师"
  "lqtechteachersalary:科技部老师"
  "lqassistantsalary:店助"
  "lqstoremanagersalary:店长"
  "lqdirectorsalary:主任"
  "lqmajorprojectteachersalary:大项目老师"
  "lqmajorprojectdirectorsalary:大项目主管"
  "lqtechgeneralmanagersalary:科技部总经理"
  "lqbusinessunitmanagersalary:事业部总经理"
)

SUCCESS_COUNT=0
FAIL_COUNT=0
TOTAL_COUNT=${#services[@]}

echo "============================================================"
echo "测试用例1:批量锁定当月所有工资"
echo "============================================================"
echo ""

for service_info in "${services[@]}"; do
  IFS=':' read -r service_name service_desc <<< "$service_info"
  
  echo "测试服务: ${service_desc} (${service_name})"
  
  RESPONSE=$(curl -X POST "${BASE_URL}/api/Extend/${service_name}/lock-by-month" \
    -H "Authorization: ${TOKEN}" \
    -H "Content-Type: application/json" \
    -d "{\"year\": ${YEAR}, \"month\": ${MONTH}, \"isLocked\": true}" \
    -s)
  
  RESULT=$(echo "$RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 or data.get('success') == True:
        print('SUCCESS')
        if 'data' in data:
            result = data['data']
        else:
            result = data
        if isinstance(result, dict):
            print(result.get('message', ''))
            print(str(result.get('total', 0)))
            print(str(result.get('locked', 0)))
        else:
            print(str(result))
    else:
        print('FAILED')
        print(data.get('msg', 'Unknown error'))
except Exception as e:
    print('FAILED')
    print(str(e))
" 2>/dev/null)
  
  if echo "$RESULT" | grep -q "SUCCESS"; then
    echo "  ✅ 接口调用成功"
    echo "$RESULT" | tail -n +2 | while IFS= read -r line; do
      if [ ! -z "$line" ]; then
        echo "     - $line"
      fi
    done
    SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
  else
    echo "  ❌ 接口调用失败"
    echo "$RESULT" | tail -n +2 | while IFS= read -r line; do
      if [ ! -z "$line" ]; then
        echo "     - $line"
      fi
    done
    FAIL_COUNT=$((FAIL_COUNT + 1))
  fi
  
  echo ""
done

echo "============================================================"
echo "测试用例2:批量解锁当月所有工资"
echo "============================================================"
echo ""

# 只测试第一个服务作为示例
FIRST_SERVICE=$(echo "${services[0]}" | cut -d':' -f1)
FIRST_DESC=$(echo "${services[0]}" | cut -d':' -f2)

echo "测试服务: ${FIRST_DESC} (${FIRST_SERVICE})"

RESPONSE=$(curl -X POST "${BASE_URL}/api/Extend/${FIRST_SERVICE}/lock-by-month" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{\"year\": ${YEAR}, \"month\": ${MONTH}, \"isLocked\": false}" \
  -s)

RESULT=$(echo "$RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 or data.get('success') == True:
        print('SUCCESS')
        if 'data' in data:
            result = data['data']
        else:
            result = data
        if isinstance(result, dict):
            print(result.get('message', ''))
            print(str(result.get('total', 0)))
            print(str(result.get('unlocked', 0)))
        else:
            print(str(result))
    else:
        print('FAILED')
        print(data.get('msg', 'Unknown error'))
except Exception as e:
    print('FAILED')
    print(str(e))
" 2>/dev/null)

if echo "$RESULT" | grep -q "SUCCESS"; then
  echo "  ✅ 接口调用成功"
  echo "$RESULT" | tail -n +2 | while IFS= read -r line; do
    if [ ! -z "$line" ]; then
      echo "     - $line"
    fi
  done
else
  echo "  ❌ 接口调用失败"
  echo "$RESULT" | tail -n +2 | while IFS= read -r line; do
    if [ ! -z "$line" ]; then
      echo "     - $line"
    fi
  done
fi

echo ""

echo "============================================================"
echo "测试用例3:参数验证(错误年份)"
echo "============================================================"
echo ""

RESPONSE=$(curl -X POST "${BASE_URL}/api/Extend/${FIRST_SERVICE}/lock-by-month" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{\"year\": 0, \"month\": ${MONTH}, \"isLocked\": true}" \
  -s)

RESULT=$(echo "$RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') != 200 and data.get('code') != 0:
        print('SUCCESS')
        print(data.get('msg', '参数验证失败'))
    else:
        print('FAILED')
        print('参数验证未生效')
except Exception as e:
    print('FAILED')
    print(str(e))
" 2>/dev/null)

if echo "$RESULT" | grep -q "SUCCESS"; then
  echo "  ✅ 参数验证正常"
  echo "$RESULT" | tail -n +2 | while IFS= read -r line; do
    if [ ! -z "$line" ]; then
      echo "     - $line"
    fi
  done
else
  echo "  ❌ 参数验证异常"
  echo "$RESULT" | tail -n +2
fi

echo ""

echo "============================================================"
echo "测试总结"
echo "============================================================"
echo "总计: ${SUCCESS_COUNT}/${TOTAL_COUNT} 个服务接口测试通过"
echo ""

if [ $SUCCESS_COUNT -eq $TOTAL_COUNT ]; then
  echo "🎉 所有接口测试通过!"
  exit 0
else
  echo "⚠️  部分接口测试失败"
  exit 1
fi