#!/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 response=$(curl -s -X "$method" "$BASE_URL$url" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "$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: 发起利率定价流程 - 个人客户信用贷款 test_api "POST" "/loanPricing/workflow/create" '{ "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" }' "发起流程-个人客户信用贷款" # 测试 2: 发起利率定价流程 - 企业客户抵押贷款 test_api "POST" "/loanPricing/workflow/create" '{ "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" }' "发起流程-企业客户抵押贷款" # 测试 3: 发起利率定价流程 - 农业担保贷款 test_api "POST" "/loanPricing/workflow/create" '{ "orgCode": "931000", "runType": "1", "custIsn": "CUST20250119003", "custType": "企业", "guarType": "保证", "applyAmt": "300000", "isAgriGuar": "true", "isAgriLeading": "true", "loanPurpose": "business", "loanRate": "4.15", "custName": "绿源农业合作社", "idType": "统一社会信用代码", "isInclusiveFinance": "true" }' "发起流程-农业担保贷款" # 测试 4: 发起利率定价流程 - 质押贷款 test_api "POST" "/loanPricing/workflow/create" '{ "orgCode": "931000", "runType": "1", "custIsn": "CUST20250119004", "custType": "个人", "guarType": "质押", "applyAmt": "100000", "loanPurpose": "consumer", "collType": "二类", "loanRate": "4.25", "custName": "李四", "idType": "身份证", "isInclusiveFinance": "false" }' "发起流程-个人客户质押贷款" # 测试 5: 查询流程列表 - 默认分页 test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10" "" "查询流程列表-默认分页" # 测试 6: 查询流程列表 - 筛选个人客户 test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10&custType=个人" "" "查询流程列表-筛选个人客户" # 测试 7: 查询流程列表 - 筛选企业客户 test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10&custType=企业" "" "查询流程列表-筛选企业客户" # 测试 8: 查询流程列表 - 按客户名称搜索 test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10&custName=张三" "" "查询流程列表-搜索张三" # 测试 9: 查询流程列表 - 按担保方式筛选 test_api "GET" "/loanPricing/workflow/list?pageNum=1&pageSize=10&guarType=信用" "" "查询流程列表-筛选信用贷款" # 测试 10: 查询流程详情 test_api "GET" "/loanPricing/workflow/CUST20250119001" "" "查询流程详情-CUST20250119001" # ====== 异常测试 ====== echo "" echo -e "${BLUE}【异常测试】${NC}" # 测试 11: 必填字段缺失 - 客户内码为空 test_api "POST" "/loanPricing/workflow/create" '{ "custType": "个人", "guarType": "信用", "applyAmt": "50000", "loanRate": "4.35" }' "异常测试-客户内码为空" 500 # 测试 12: 必填字段缺失 - 贷款利率为空 test_api "POST" "/loanPricing/workflow/create" '{ "custIsn": "TEST001", "custType": "个人", "guarType": "信用", "applyAmt": "50000" }' "异常测试-贷款利率为空" 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