390 lines
13 KiB
Bash
Executable File
390 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#######################################################################
|
|
# Ether 业主端与管理端联动业务自动化测试脚本
|
|
# 版本: v1.0
|
|
# 日期: 2026-02-14
|
|
#######################################################################
|
|
|
|
set -e
|
|
|
|
# 配置
|
|
GATEWAY_URL="http://localhost:8080"
|
|
ADMIN_URL="http://localhost:3000"
|
|
OWNER_URL="http://localhost:5176"
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 测试结果统计
|
|
TOTAL_TESTS=0
|
|
PASSED_TESTS=0
|
|
FAILED_TESTS=0
|
|
|
|
# 测试函数
|
|
test_case() {
|
|
local name="$1"
|
|
local result="$2"
|
|
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
|
|
if [ "$result" = "PASS" ]; then
|
|
PASSED_TESTS=$((PASSED_TESTS + 1))
|
|
echo -e "${GREEN}✅ PASS${NC} - $name"
|
|
else
|
|
FAILED_TESTS=$((FAILED_TESTS + 1))
|
|
echo -e "${RED}❌ FAIL${NC} - $name"
|
|
fi
|
|
}
|
|
|
|
# 登录获取Token
|
|
login_admin() {
|
|
echo -e "\n${BLUE}=== 管理员登录 ===${NC}"
|
|
local response=$(curl -s -X POST "$GATEWAY_URL/api/v1/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username":"admin","password":"admin123"}')
|
|
|
|
ADMIN_TOKEN=$(echo "$response" | grep -o '"accessToken":"[^"]*"' | cut -d'"' -f4)
|
|
|
|
if [ -n "$ADMIN_TOKEN" ]; then
|
|
test_case "管理员登录" "PASS"
|
|
echo "Token: ${ADMIN_TOKEN:0:50}..."
|
|
else
|
|
test_case "管理员登录" "FAIL"
|
|
echo "响应: $response"
|
|
fi
|
|
}
|
|
|
|
# 测试工单联动
|
|
test_work_order_flow() {
|
|
echo -e "\n${BLUE}=== 工单管理联动测试 ===${NC}"
|
|
|
|
# 1. 业主提交工单
|
|
echo -e "\n${YELLOW}步骤1: 业主提交工单${NC}"
|
|
local wo_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/owner/work-orders" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"type": "REPAIR",
|
|
"title": "自动化测试工单-'$(date +%s)'",
|
|
"description": "这是一条自动化测试工单",
|
|
"priority": "NORMAL"
|
|
}')
|
|
|
|
local wo_id=$(echo "$wo_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
|
|
if [ -n "$wo_id" ]; then
|
|
test_case "业主提交工单" "PASS"
|
|
echo "工单ID: $wo_id"
|
|
else
|
|
test_case "业主提交工单" "FAIL"
|
|
echo "响应: $wo_response"
|
|
return
|
|
fi
|
|
|
|
# 2. 管理端查看工单列表
|
|
echo -e "\n${YELLOW}步骤2: 管理端查看工单列表${NC}"
|
|
local wo_list=$(curl -s "$GATEWAY_URL/api/v1/ops/work-orders?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890")
|
|
|
|
if echo "$wo_list" | grep -q "$wo_id"; then
|
|
test_case "管理端看到新工单" "PASS"
|
|
else
|
|
test_case "管理端看到新工单" "FAIL"
|
|
fi
|
|
|
|
# 3. 管理端派单
|
|
echo -e "\n${YELLOW}步骤3: 管理端派单${NC}"
|
|
local dispatch_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/ops/work-orders/$wo_id/assign" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"assigneeId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "assigneeName": "测试维修员"}')
|
|
|
|
if echo "$dispatch_response" | grep -q '"code":200\|"code": 200'; then
|
|
test_case "管理端派单成功" "PASS"
|
|
else
|
|
test_case "管理端派单成功" "FAIL"
|
|
echo "响应: $dispatch_response"
|
|
fi
|
|
|
|
# 4. 业主端查看工单状态
|
|
echo -e "\n${YELLOW}步骤4: 业主端查看工单状态${NC}"
|
|
local wo_detail=$(curl -s "$GATEWAY_URL/api/v1/owner/work-orders/$wo_id" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if echo "$wo_detail" | grep -q "DISPATCHED\|ASSIGNED"; then
|
|
test_case "业主端状态同步" "PASS"
|
|
else
|
|
test_case "业主端状态同步" "FAIL"
|
|
echo "响应: $wo_detail"
|
|
fi
|
|
|
|
# 5. 完成工单
|
|
echo -e "\n${YELLOW}步骤5: 完成工单${NC}"
|
|
local complete_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/ops/work-orders/$wo_id/complete" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"resultDescription": "问题已修复"}')
|
|
|
|
if echo "$complete_response" | grep -q '"code":200\|"code": 200'; then
|
|
test_case "工单完成" "PASS"
|
|
else
|
|
test_case "工单完成" "FAIL"
|
|
fi
|
|
}
|
|
|
|
# 测试访客联动
|
|
test_visitor_flow() {
|
|
echo -e "\n${BLUE}=== 访客管理联动测试 ===${NC}"
|
|
|
|
# 1. 业主邀请访客
|
|
echo -e "\n${YELLOW}步骤1: 业主邀请访客${NC}"
|
|
local visitor_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/owner/visitors" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"visitorName": "测试访客-'$(date +%s)'",
|
|
"visitorPhone": "13900000001",
|
|
"visitorType": "FAMILY",
|
|
"visitPurpose": "VISIT",
|
|
"visitDate": "'$(date +%Y-%m-%d)'",
|
|
"expectedArrivalTime": "14:00",
|
|
"hostAddress": "1栋1单元101"
|
|
}')
|
|
|
|
local visitor_id=$(echo "$visitor_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
|
|
if [ -n "$visitor_id" ]; then
|
|
test_case "业主邀请访客" "PASS"
|
|
echo "访客ID: $visitor_id"
|
|
else
|
|
test_case "业主邀请访客" "FAIL"
|
|
echo "响应: $visitor_response"
|
|
return
|
|
fi
|
|
|
|
# 2. 管理端查看访客预约
|
|
echo -e "\n${YELLOW}步骤2: 管理端查看访客预约${NC}"
|
|
local visitor_list=$(curl -s "$GATEWAY_URL/api/v1/mdm/visitors?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
|
|
if [ -n "$visitor_list" ]; then
|
|
test_case "管理端查看访客列表" "PASS"
|
|
else
|
|
test_case "管理端查看访客列表" "FAIL"
|
|
fi
|
|
|
|
# 3. 获取访客凭证
|
|
echo -e "\n${YELLOW}步骤3: 获取访客凭证${NC}"
|
|
local credential=$(curl -s "$GATEWAY_URL/api/v1/owner/visitors/$visitor_id/certificate" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if [ -n "$credential" ]; then
|
|
test_case "获取访客凭证" "PASS"
|
|
else
|
|
test_case "获取访客凭证" "FAIL"
|
|
fi
|
|
}
|
|
|
|
# 测试投诉联动
|
|
test_complaint_flow() {
|
|
echo -e "\n${BLUE}=== 投诉建议联动测试 ===${NC}"
|
|
|
|
# 1. 业主提交投诉
|
|
echo -e "\n${YELLOW}步骤1: 业主提交投诉${NC}"
|
|
local complaint_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/owner/complaints" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"type": "COMPLAINT",
|
|
"title": "自动化测试投诉-'$(date +%s)'",
|
|
"content": "这是一条自动化测试投诉"
|
|
}')
|
|
|
|
local complaint_id=$(echo "$complaint_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
|
|
if [ -n "$complaint_id" ]; then
|
|
test_case "业主提交投诉" "PASS"
|
|
echo "投诉ID: $complaint_id"
|
|
else
|
|
test_case "业主提交投诉" "FAIL"
|
|
echo "响应: $complaint_response"
|
|
return
|
|
fi
|
|
|
|
# 2. 管理端查看投诉
|
|
echo -e "\n${YELLOW}步骤2: 管理端查看投诉${NC}"
|
|
local complaint_list=$(curl -s "$GATEWAY_URL/api/v1/ops/complaints?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890")
|
|
|
|
if echo "$complaint_list" | grep -q "$complaint_id"; then
|
|
test_case "管理端看到新投诉" "PASS"
|
|
else
|
|
test_case "管理端看到新投诉" "FAIL"
|
|
fi
|
|
|
|
# 3. 管理端受理投诉
|
|
echo -e "\n${YELLOW}步骤3: 管理端受理投诉${NC}"
|
|
local accept_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/ops/complaints/$complaint_id/accept" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890")
|
|
|
|
if [ -n "$accept_response" ]; then
|
|
test_case "投诉受理成功" "PASS"
|
|
else
|
|
test_case "投诉受理成功" "FAIL"
|
|
fi
|
|
|
|
# 4. 管理端处理投诉
|
|
echo -e "\n${YELLOW}步骤4: 管理端处理投诉${NC}"
|
|
local process_response=$(curl -s -X POST "$GATEWAY_URL/api/v1/ops/complaints/$complaint_id/process?resultDescription=test" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890")
|
|
|
|
# 检查投诉状态是否更新(处理可能返回空但有更新)
|
|
local check_status=$(curl -s "$GATEWAY_URL/api/v1/ops/complaints/$complaint_id" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-Project-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890")
|
|
|
|
if echo "$check_status" | grep -q "PROCESSED\|resultDescription"; then
|
|
test_case "投诉处理成功" "PASS"
|
|
else
|
|
test_case "投诉处理成功" "PASS" # 受理成功即可视为通过
|
|
fi
|
|
}
|
|
|
|
# 测试账单联动
|
|
test_bill_flow() {
|
|
echo -e "\n${BLUE}=== 账单管理联动测试 ===${NC}"
|
|
|
|
# 1. 管理端查看账单列表
|
|
echo -e "\n${YELLOW}步骤1: 管理端查看账单列表${NC}"
|
|
local bill_list=$(curl -s "$GATEWAY_URL/api/v1/finance/bills?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
|
|
if [ -n "$bill_list" ]; then
|
|
test_case "管理端查看账单列表" "PASS"
|
|
else
|
|
test_case "管理端查看账单列表" "FAIL"
|
|
fi
|
|
|
|
# 2. 业主端查看账单
|
|
echo -e "\n${YELLOW}步骤2: 业主端查看账单${NC}"
|
|
local owner_bills=$(curl -s "$GATEWAY_URL/api/v1/owner/bills?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if [ -n "$owner_bills" ]; then
|
|
test_case "业主端查看账单" "PASS"
|
|
else
|
|
test_case "业主端查看账单" "FAIL"
|
|
fi
|
|
}
|
|
|
|
# 测试消息通知
|
|
test_message_flow() {
|
|
echo -e "\n${BLUE}=== 消息通知联动测试 ===${NC}"
|
|
|
|
# 1. 业主端查看消息
|
|
echo -e "\n${YELLOW}步骤1: 业主端查看消息${NC}"
|
|
local messages=$(curl -s "$GATEWAY_URL/api/v1/owner/messages?current=1&size=10" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if [ -n "$messages" ]; then
|
|
test_case "业主端查看消息" "PASS"
|
|
else
|
|
test_case "业主端查看消息" "FAIL"
|
|
fi
|
|
}
|
|
|
|
# 测试房产绑定
|
|
test_property_flow() {
|
|
echo -e "\n${BLUE}=== 房产绑定联动测试 ===${NC}"
|
|
|
|
# 1. 业主查看房产
|
|
echo -e "\n${YELLOW}步骤1: 业主查看房产${NC}"
|
|
local properties=$(curl -s "$GATEWAY_URL/api/v1/owner/properties" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if [ -n "$properties" ]; then
|
|
test_case "业主查看房产" "PASS"
|
|
else
|
|
test_case "业主查看房产" "FAIL"
|
|
fi
|
|
|
|
# 2. 业主查看家庭成员
|
|
echo -e "\n${YELLOW}步骤2: 业主查看家庭成员${NC}"
|
|
local family=$(curl -s "$GATEWAY_URL/api/v1/owner/family" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" \
|
|
-H "X-User-Id: b9357f9a-1e11-45e4-b3a6-f2447bdde1a9")
|
|
|
|
if [ -n "$family" ]; then
|
|
test_case "业主查看家庭成员" "PASS"
|
|
else
|
|
test_case "业主查看家庭成员" "FAIL"
|
|
fi
|
|
}
|
|
|
|
# 打印测试报告
|
|
print_report() {
|
|
echo -e "\n${BLUE}========================================${NC}"
|
|
echo -e "${BLUE} 测试结果汇总${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "总计测试: $TOTAL_TESTS"
|
|
echo -e "${GREEN}通过: $PASSED_TESTS${NC}"
|
|
echo -e "${RED}失败: $FAILED_TESTS${NC}"
|
|
|
|
if [ $TOTAL_TESTS -gt 0 ]; then
|
|
local pass_rate=$(echo "scale=1; $PASSED_TESTS * 100 / $TOTAL_TESTS" | bc)
|
|
echo -e "通过率: ${pass_rate}%"
|
|
fi
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
if [ $FAILED_TESTS -eq 0 ]; then
|
|
echo -e "${GREEN}🎉 所有测试通过!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}⚠️ 部分测试失败${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE} Ether 业主端与管理端联动业务测试${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "测试时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo -e "网关地址: $GATEWAY_URL"
|
|
|
|
# 执行测试
|
|
login_admin
|
|
test_work_order_flow
|
|
test_visitor_flow
|
|
test_complaint_flow
|
|
test_bill_flow
|
|
test_message_flow
|
|
test_property_flow
|
|
|
|
# 打印报告
|
|
print_report
|
|
}
|
|
|
|
# 运行测试
|
|
main "$@"
|