Files
loan-pricing/run-api-tests-fixed.sh
2026-01-20 11:20:39 +08:00

308 lines
7.7 KiB
Bash

#!/bin/bash
# 利率定价流程 API 完整测试脚本 (修复编码问题)
# 自动登录获取 token 并执行所有测试用例
BASE_URL="http://localhost:8080"
TOKEN=""
# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 测试结果统计
TOTAL_TESTS=0
PASSED_TESTS=0
FAILED_TESTS=0
# 测试结果记录
declare -a TEST_RESULTS
echo -e "${BLUE}====================================${NC}"
echo -e "${BLUE} 利率定价流程 API 测试套件${NC}"
echo -e "${BLUE}====================================${NC}"
echo ""
# 步骤 1: 获取 Token
echo -e "${YELLOW}[步骤 1] 获取测试 Token${NC}"
echo "-----------------------------------"
LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/login/test" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}')
# 解析 token
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
if [ -z "$TOKEN" ]; then
echo -e "${RED}✗ 登录失败,无法获取 token${NC}"
echo "响应: $LOGIN_RESPONSE"
exit 1
fi
echo -e "${GREEN}✓ 登录成功${NC}"
echo "Token: ${TOKEN:0:50}..."
echo ""
# 测试函数
test_api() {
local method=$1
local url=$2
local data=$3
local description=$4
local expected_code=${5:-200}
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo -n "[$TOTAL_TESTS] 测试: $description ... "
if [ "$method" = "GET" ]; then
response=$(curl -s -X GET "$BASE_URL$url" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json")
else
# 使用 --data-urlencode 或直接从文件读取来避免编码问题
response=$(curl -s -X "$method" "$BASE_URL$url" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
--data-raw "$data")
fi
# 检查响应
actual_code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2)
if [ "$actual_code" = "$expected_code" ]; then
echo -e "${GREEN}✓ 通过${NC}"
PASSED_TESTS=$((PASSED_TESTS + 1))
TEST_RESULTS+=("$description")
else
echo -e "${RED}✗ 失败 (期望: $expected_code, 实际: $actual_code)${NC}"
FAILED_TESTS=$((FAILED_TESTS + 1))
TEST_RESULTS+=("$description - 期望码: $expected_code, 实际: $actual_code")
echo " 响应: $response"
fi
}
# 步骤 2: 执行测试用例
echo -e "${YELLOW}[步骤 2] 执行测试用例${NC}"
echo "-----------------------------------"
echo ""
# ====== 功能测试 ======
echo -e "${BLUE}【功能测试】${NC}"
# 测试 1: 发起利率定价流程 - 个人客户信用贷款
# 使用 printf 来确保 UTF-8 编码
JSON_DATA_1=$(cat << 'EOF'
{
"orgCode": "931000",
"runType": "1",
"custIsn": "CUST20250119001",
"custType": "个人",
"guarType": "信用",
"midPerQuickPay": "true",
"midPerEleDdc": "false",
"midEntEleDdc": "false",
"midEntWaterDdc": "false",
"applyAmt": "50000",
"isCleanEnt": "false",
"hasSettleAcct": "true",
"isManufacturing": "false",
"isAgriGuar": "false",
"isTaxA": "false",
"isAgriLeading": "false",
"loanPurpose": "consumer",
"bizProof": "true",
"collType": "一类",
"collThirdParty": "false",
"loanRate": "4.35",
"custName": "张三",
"idType": "身份证",
"isInclusiveFinance": "true"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_1" "发起流程-个人客户信用贷款"
# 测试 2: 发起利率定价流程 - 企业客户抵押贷款
JSON_DATA_2=$(cat << 'EOF'
{
"orgCode": "931000",
"runType": "1",
"custIsn": "CUST20250119002",
"custType": "企业",
"guarType": "抵押",
"applyAmt": "500000",
"isCleanEnt": "true",
"hasSettleAcct": "true",
"isManufacturing": "true",
"isTaxA": "true",
"loanPurpose": "business",
"collType": "一线",
"collThirdParty": "false",
"loanRate": "3.85",
"custName": "测试科技有限公司",
"idType": "统一社会信用代码",
"isInclusiveFinance": "true"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_2" "发起流程-企业客户抵押贷款"
# 测试 3: 发起利率定价流程 - 农业担保贷款
JSON_DATA_3=$(cat << 'EOF'
{
"orgCode": "931000",
"runType": "1",
"custIsn": "CUST20250119003",
"custType": "企业",
"guarType": "保证",
"applyAmt": "300000",
"isAgriGuar": "true",
"isAgriLeading": "true",
"loanPurpose": "business",
"loanRate": "4.15",
"custName": "绿源农业合作社",
"idType": "统一社会信用代码",
"isInclusiveFinance": "true"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_3" "发起流程-农业担保贷款"
# 测试 4: 发起利率定价流程 - 质押贷款
JSON_DATA_4=$(cat << 'EOF'
{
"orgCode": "931000",
"runType": "1",
"custIsn": "CUST20250119004",
"custType": "个人",
"guarType": "质押",
"applyAmt": "100000",
"loanPurpose": "consumer",
"collType": "二类",
"loanRate": "4.25",
"custName": "李四",
"idType": "身份证",
"isInclusiveFinance": "false"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_4" "发起流程-个人客户质押贷款"
# 测试 5: 查询流程列表 - 默认分页
test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10" "" "查询流程列表-默认分页"
# ====== 异常测试 ======
echo ""
echo -e "${BLUE}【异常测试】${NC}"
# 测试 11: 必填字段缺失 - 客户内码为空
JSON_DATA_ERR1=$(cat << 'EOF'
{
"custType": "个人",
"guarType": "信用",
"applyAmt": "50000",
"loanRate": "4.35"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_ERR1" "异常测试-客户内码为空" 500
# 测试 12: 必填字段缺失 - 贷款利率为空
JSON_DATA_ERR2=$(cat << 'EOF'
{
"custIsn": "TEST001",
"custType": "个人",
"guarType": "信用",
"applyAmt": "50000"
}
EOF
)
test_api "POST" "/loanPricing/workflow/create" "$JSON_DATA_ERR2" "异常测试-贷款利率为空" 500
# 测试 13: 查询不存在的流程
test_api "GET" "/loanPricing/workflow/NOTEXIST123" "" "异常测试-查询不存在的流程" 500
# 步骤 3: 生成测试报告
echo ""
echo -e "${YELLOW}[步骤 3] 测试结果统计${NC}"
echo "-----------------------------------"
echo ""
# 计算通过率
if [ $TOTAL_TESTS -gt 0 ]; then
PASS_RATE=$((PASSED_TESTS * 100 / TOTAL_TESTS))
else
PASS_RATE=0
fi
echo "总测试数: $TOTAL_TESTS"
echo -e "通过: ${GREEN}$PASSED_TESTS${NC}"
echo -e "失败: ${RED}$FAILED_TESTS${NC}"
echo "通过率: $PASS_RATE%"
echo ""
# 详细结果
echo "详细测试结果:"
echo "-----------------------------------"
for result in "${TEST_RESULTS[@]}"; do
if [[ $result == ✓* ]]; then
echo -e "${GREEN}$result${NC}"
else
echo -e "${RED}$result${NC}"
fi
done
echo ""
# 生成测试报告文件
REPORT_FILE="api-test-report-$(date +%Y%m%d%H%M%S).txt"
echo "生成测试报告: $REPORT_FILE"
cat > "$REPORT_FILE" << EOF
利率定价流程 API 测试报告
====================================
测试时间: $(date '+%Y-%m-%d %H:%M:%S')
测试环境: $BASE_URL
测试账号: admin
测试统计
--------
总测试数: $TOTAL_TESTS
通过数: $PASSED_TESTS
失败数: $FAILED_TESTS
通过率: $PASS_RATE%
测试用例详情
--------
EOF
for result in "${TEST_RESULTS[@]}"; do
echo "$result" >> "$REPORT_FILE"
done
echo "" >> "$REPORT_FILE"
echo "====================================" >> "$REPORT_FILE"
echo "测试结束" >> "$REPORT_FILE"
echo ""
echo -e "${BLUE}====================================${NC}"
echo -e "${BLUE} 测试完成${NC}"
echo -e "${BLUE}====================================${NC}"
echo "测试报告已保存到: $REPORT_FILE"
# 返回退出码
if [ $FAILED_TESTS -gt 0 ]; then
exit 1
else
exit 0
fi