322 lines
13 KiB
Bash
Executable File
322 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
||
BASE_URL="http://localhost:8080/api"
|
||
TOKEN=""
|
||
PROJECT_ID=""
|
||
PASS_COUNT=0
|
||
FAIL_COUNT=0
|
||
TOTAL_COUNT=0
|
||
|
||
assert_eq() {
|
||
local actual="$1"
|
||
local expected="$2"
|
||
local name="$3"
|
||
TOTAL_COUNT=$((TOTAL_COUNT + 1))
|
||
if [ "$actual" = "$expected" ]; then
|
||
echo " PASS: $name"
|
||
PASS_COUNT=$((PASS_COUNT + 1))
|
||
else
|
||
echo " FAIL: $name (expected=$expected, actual=$actual)"
|
||
FAIL_COUNT=$((FAIL_COUNT + 1))
|
||
fi
|
||
}
|
||
|
||
assert_contains() {
|
||
local haystack="$1"
|
||
local needle="$2"
|
||
local name="$3"
|
||
TOTAL_COUNT=$((TOTAL_COUNT + 1))
|
||
if echo "$haystack" | grep -q "$needle"; then
|
||
echo " PASS: $name"
|
||
PASS_COUNT=$((PASS_COUNT + 1))
|
||
else
|
||
echo " FAIL: $name (expected to contain: $needle)"
|
||
FAIL_COUNT=$((FAIL_COUNT + 1))
|
||
fi
|
||
}
|
||
|
||
login() {
|
||
echo "=== 登录获取Token ==="
|
||
local response=$(curl -s -X POST "$BASE_URL/auth/login" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"username":"admin","password":"admin123"}')
|
||
TOKEN=$(echo "$response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
|
||
if [ -z "$TOKEN" ]; then
|
||
echo "FATAL: 登录失败,无法获取Token"
|
||
exit 1
|
||
fi
|
||
echo "Token获取成功"
|
||
}
|
||
|
||
setup_project() {
|
||
echo "=== 创建测试项目 ==="
|
||
local response=$(curl -s -X POST "$BASE_URL/mdm/projects" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: " \
|
||
-d "{\"code\":\"TEST-ASSET-$$\",\"name\":\"ASSET测试项目\",\"projectType\":\"RESIDENTIAL\"}")
|
||
PROJECT_ID=$(echo "$response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -z "$PROJECT_ID" ]; then
|
||
echo "FATAL: 创建测试项目失败"
|
||
exit 1
|
||
fi
|
||
echo "测试项目创建成功: $PROJECT_ID"
|
||
}
|
||
|
||
test_create_equipment() {
|
||
echo "--- TC-ASSET-001: 创建设备 ---"
|
||
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"TEST-EQ-$$_$RANDOM\",\"equipmentName\":\"测试电梯设备\",\"equipmentType\":\"ELEVATOR\",\"systemType\":\"ELEVATOR\",\"ownershipType\":\"PROJECT\"}")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
local body=$(echo "$response" | head -n -1)
|
||
assert_eq "$status" "201" "TC-ASSET-001: 创建设备返回201"
|
||
EQUIPMENT_ID=$(echo "$body" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
}
|
||
|
||
test_query_equipment_by_project() {
|
||
echo "--- TC-ASSET-002: 按项目查询设备 ---"
|
||
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/by-project/$PROJECT_ID" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "200" "TC-ASSET-002: 按项目查询设备返回200"
|
||
}
|
||
|
||
test_query_equipment_by_space() {
|
||
echo "--- TC-ASSET-003: 按空间查询设备 ---"
|
||
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/by-space/00000000-0000-0000-0000-000000000000" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "200" "TC-ASSET-003: 按空间查询设备返回200"
|
||
}
|
||
|
||
test_batch_delete_equipment() {
|
||
echo "--- TC-ASSET-004: 设备批量删除 ---"
|
||
local eq1_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"BATCH-DEL-1-$$_$RANDOM\",\"equipmentName\":\"批量删除测试1\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
|
||
local eq1_id=$(echo "$eq1_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
local eq2_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"BATCH-DEL-2-$$_$RANDOM\",\"equipmentName\":\"批量删除测试2\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
|
||
local eq2_id=$(echo "$eq2_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -n "$eq1_id" ] && [ -n "$eq2_id" ]; then
|
||
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment/batch-delete" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"ids\":[\"$eq1_id\",\"$eq2_id\"]}")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "200" "TC-ASSET-004: 批量删除返回200"
|
||
else
|
||
echo " SKIP: TC-ASSET-004 (无法创建测试设备)"
|
||
fi
|
||
}
|
||
|
||
test_elevator_extension() {
|
||
echo "--- TC-ASSET-005: 电梯扩展表管理 ---"
|
||
if [ -z "$EQUIPMENT_ID" ]; then
|
||
echo " SKIP: TC-ASSET-005 (无设备ID)"
|
||
return
|
||
fi
|
||
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$EQUIPMENT_ID/elevator" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d '{"elevatorType":"PASSENGER","model":"TEST-001","loadCapacity":1000,"speed":2.5,"floorCount":20}')
|
||
local put_status=$(echo "$put_response" | tail -n 1)
|
||
assert_eq "$put_status" "200" "TC-ASSET-005: 更新电梯扩展表返回200"
|
||
local get_response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/$EQUIPMENT_ID/elevator" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local get_status=$(echo "$get_response" | tail -n 1)
|
||
assert_eq "$get_status" "200" "TC-ASSET-005: 查询电梯扩展表返回200"
|
||
}
|
||
|
||
test_hvac_extension() {
|
||
echo "--- TC-ASSET-006: 暖通扩展表管理 ---"
|
||
local hvac_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"HVAC-TEST-$$_$RANDOM\",\"equipmentName\":\"测试暖通设备\",\"equipmentType\":\"HVAC\",\"systemType\":\"HVAC\",\"ownershipType\":\"PROJECT\"}")
|
||
local hvac_id=$(echo "$hvac_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -z "$hvac_id" ]; then
|
||
echo " SKIP: TC-ASSET-006 (无法创建暖通设备)"
|
||
return
|
||
fi
|
||
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$hvac_id/hvac" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d '{"hvacType":"CHILLER","coolingCapacity":500,"heatingCapacity":400}')
|
||
local put_status=$(echo "$put_response" | tail -n 1)
|
||
assert_eq "$put_status" "200" "TC-ASSET-006: 更新暖通扩展表返回200"
|
||
HVAC_EQ_ID="$hvac_id"
|
||
}
|
||
|
||
test_fire_extension() {
|
||
echo "--- TC-ASSET-007: 消防扩展表管理 ---"
|
||
local fire_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"FIRE-TEST-$$_$RANDOM\",\"equipmentName\":\"测试消防设备\",\"equipmentType\":\"FIRE_PROTECTION\",\"systemType\":\"FIRE\",\"ownershipType\":\"PROJECT\"}")
|
||
local fire_id=$(echo "$fire_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -z "$fire_id" ]; then
|
||
echo " SKIP: TC-ASSET-007 (无法创建消防设备)"
|
||
return
|
||
fi
|
||
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$fire_id/fire" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d '{"fireEquipmentType":"SPRINKLER","installationArea":200}')
|
||
local put_status=$(echo "$put_response" | tail -n 1)
|
||
assert_eq "$put_status" "200" "TC-ASSET-007: 更新消防扩展表返回200"
|
||
FIRE_EQ_ID="$fire_id"
|
||
}
|
||
|
||
test_energy_extension() {
|
||
echo "--- TC-ASSET-008: 能源计量扩展表管理 ---"
|
||
local energy_response=$(curl -s -X POST "$BASE_URL/asset/equipment" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"equipmentCode\":\"ENERGY-TEST-$$_$RANDOM\",\"equipmentName\":\"测试能源计量设备\",\"equipmentType\":\"ENERGY_METER\",\"systemType\":\"ELECTRICAL\",\"ownershipType\":\"PROJECT\"}")
|
||
local energy_id=$(echo "$energy_response" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -z "$energy_id" ]; then
|
||
echo " SKIP: TC-ASSET-008 (无法创建能源计量设备)"
|
||
return
|
||
fi
|
||
local put_response=$(curl -s -w "\n%{http_code}" -X PUT "$BASE_URL/asset/equipment/$energy_id/energy" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d '{"meterType":"ELECTRICITY","energyType":"LIGHTING","accuracyClass":"1.0"}')
|
||
local put_status=$(echo "$put_response" | tail -n 1)
|
||
assert_eq "$put_status" "200" "TC-ASSET-008: 更新能源计量扩展表返回200"
|
||
ENERGY_EQ_ID="$energy_id"
|
||
}
|
||
|
||
test_equipment_statistics() {
|
||
echo "--- TC-ASSET-009: 设备统计 ---"
|
||
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/statistics/by-type?projectId=$PROJECT_ID" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "200" "TC-ASSET-009: 设备统计返回200"
|
||
}
|
||
|
||
test_health_score() {
|
||
echo "--- TC-ASSET-010: 健康评分查询 ---"
|
||
if [ -z "$EQUIPMENT_ID" ]; then
|
||
echo " SKIP: TC-ASSET-010 (无设备ID)"
|
||
return
|
||
fi
|
||
local response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/equipment/$EQUIPMENT_ID/health" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "200" "TC-ASSET-010: 健康评分查询返回200"
|
||
}
|
||
|
||
test_failure_record() {
|
||
echo "--- TC-ASSET-011: 故障记录 ---"
|
||
if [ -z "$EQUIPMENT_ID" ]; then
|
||
echo " SKIP: TC-ASSET-011 (无设备ID)"
|
||
return
|
||
fi
|
||
local response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/equipment/$EQUIPMENT_ID/failures" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d '{"failureType":"SUDDEN","failureLevel":"MEDIUM","description":"测试故障记录","failureTime":"2026-05-18T10:00:00"}')
|
||
local status=$(echo "$response" | tail -n 1)
|
||
assert_eq "$status" "201" "TC-ASSET-011: 故障记录返回201"
|
||
}
|
||
|
||
test_ownership_entity_crud() {
|
||
echo "--- TC-ASSET-012: 归属主体CRUD ---"
|
||
local create_response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/asset/ownership-entities" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID" \
|
||
-d "{\"entityName\":\"测试归属主体-$$_$RANDOM\",\"entityType\":\"COMPANY\",\"contactPerson\":\"张三\",\"contactPhone\":\"13800138000\"}")
|
||
local create_status=$(echo "$create_response" | tail -n 1)
|
||
local create_body=$(echo "$create_response" | head -n -1)
|
||
assert_eq "$create_status" "201" "TC-ASSET-012: 创建归属主体返回201"
|
||
OWNERSHIP_ID=$(echo "$create_body" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
if [ -n "$OWNERSHIP_ID" ]; then
|
||
local query_response=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL/asset/ownership-entities/$OWNERSHIP_ID" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-H "X-Project-ID: $PROJECT_ID")
|
||
local query_status=$(echo "$query_response" | tail -n 1)
|
||
assert_eq "$query_status" "200" "TC-ASSET-012: 查询归属主体返回200"
|
||
fi
|
||
}
|
||
|
||
cleanup() {
|
||
echo "=== 清理测试数据 ==="
|
||
if [ -n "$PROJECT_ID" ]; then
|
||
curl -s -X DELETE "$BASE_URL/mdm/projects/$PROJECT_ID" \
|
||
-H "Authorization: Bearer $TOKEN" > /dev/null 2>&1
|
||
fi
|
||
}
|
||
|
||
print_summary() {
|
||
echo ""
|
||
echo "=========================================="
|
||
echo " Asset Domain API Test Summary"
|
||
echo "=========================================="
|
||
echo " Total: $TOTAL_COUNT"
|
||
echo " Passed: $PASS_COUNT"
|
||
echo " Failed: $FAIL_COUNT"
|
||
if [ "$TOTAL_COUNT" -gt 0 ]; then
|
||
local rate=$(echo "scale=1; $PASS_COUNT * 100 / $TOTAL_COUNT" | bc)
|
||
echo " Rate: ${rate}%"
|
||
fi
|
||
echo "=========================================="
|
||
if [ "$FAIL_COUNT" -gt 0 ]; then
|
||
return 1
|
||
fi
|
||
return 0
|
||
}
|
||
|
||
EQUIPMENT_ID=""
|
||
HVAC_EQ_ID=""
|
||
FIRE_EQ_ID=""
|
||
ENERGY_EQ_ID=""
|
||
OWNERSHIP_ID=""
|
||
|
||
echo "=========================================="
|
||
echo " Ether PMS - Asset Domain API Tests"
|
||
echo "=========================================="
|
||
echo ""
|
||
|
||
login
|
||
setup_project
|
||
|
||
test_create_equipment
|
||
test_query_equipment_by_project
|
||
test_query_equipment_by_space
|
||
test_batch_delete_equipment
|
||
test_elevator_extension
|
||
test_hvac_extension
|
||
test_fire_extension
|
||
test_energy_extension
|
||
test_equipment_statistics
|
||
test_health_score
|
||
test_failure_record
|
||
test_ownership_entity_crud
|
||
|
||
cleanup
|
||
print_summary
|