301 lines
9.2 KiB
PowerShell
301 lines
9.2 KiB
PowerShell
|
|
# ====================================
|
|||
|
|
# 项目创建功能测试脚本 (PowerShell版本)
|
|||
|
|
# 功能:测试创建项目时集成流水分析平台
|
|||
|
|
# 作者:Claude Code
|
|||
|
|
# 日期:2026-03-04
|
|||
|
|
# ====================================
|
|||
|
|
|
|||
|
|
# 配置
|
|||
|
|
$BaseUrl = "http://localhost:8080"
|
|||
|
|
$Username = "admin"
|
|||
|
|
$Password = "admin123"
|
|||
|
|
$Token = $null
|
|||
|
|
|
|||
|
|
# 计数器
|
|||
|
|
$PassCount = 0
|
|||
|
|
$FailCount = 0
|
|||
|
|
|
|||
|
|
# 日志函数
|
|||
|
|
function Write-LogInfo {
|
|||
|
|
param([string]$Message)
|
|||
|
|
Write-Host "[INFO] " -ForegroundColor Green -NoNewline
|
|||
|
|
Write-Host $Message
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function Write-LogError {
|
|||
|
|
param([string]$Message)
|
|||
|
|
Write-Host "[ERROR] " -ForegroundColor Red -NoNewline
|
|||
|
|
Write-Host $Message
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function Write-LogWarning {
|
|||
|
|
param([string]$Message)
|
|||
|
|
Write-Host "[WARNING] " -ForegroundColor Yellow -NoNewline
|
|||
|
|
Write-Host $Message
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 检查后端服务
|
|||
|
|
function Test-BackendService {
|
|||
|
|
Write-LogInfo "检查后端服务状态..."
|
|||
|
|
try {
|
|||
|
|
$response = Invoke-WebRequest -Uri "$BaseUrl/actuator/health" -TimeoutSec 5 -ErrorAction Stop
|
|||
|
|
Write-LogInfo "✓ 后端服务运行正常"
|
|||
|
|
return $true
|
|||
|
|
} catch {
|
|||
|
|
Write-LogError "✗ 后端服务未运行,请先启动后端服务"
|
|||
|
|
Write-LogInfo "启动命令: cd ruoyi-admin; mvn spring-boot:run"
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 获取访问令牌
|
|||
|
|
function Get-AccessToken {
|
|||
|
|
Write-LogInfo "获取访问令牌..."
|
|||
|
|
try {
|
|||
|
|
$response = Invoke-RestMethod -Uri "$BaseUrl/login/test?username=$Username&password=$Password" -Method POST
|
|||
|
|
|
|||
|
|
if ($response.code -eq 200 -and $response.token) {
|
|||
|
|
$script:Token = $response.token
|
|||
|
|
Write-LogInfo "✓ 成功获取令牌"
|
|||
|
|
return $true
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "获取令牌失败:响应格式不正确"
|
|||
|
|
Write-LogInfo "响应内容: $($response | ConvertTo-Json)"
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
Write-LogError "获取令牌失败: $($_.Exception.Message)"
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 测试场景1:创建项目成功
|
|||
|
|
function Test-CreateProjectSuccess {
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "测试场景1:创建项目成功"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
|
|||
|
|
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
|||
|
|
$projectName = "集成测试项目_$timestamp"
|
|||
|
|
|
|||
|
|
$requestData = @{
|
|||
|
|
projectName = $projectName
|
|||
|
|
description = "测试集成流水分析平台"
|
|||
|
|
configType = "default"
|
|||
|
|
} | ConvertTo-Json
|
|||
|
|
|
|||
|
|
Write-LogInfo "请求数据: $requestData"
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$headers = @{
|
|||
|
|
"Content-Type" = "application/json"
|
|||
|
|
"Authorization" = "Bearer $Token"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$response = Invoke-RestMethod -Uri "$BaseUrl/ccdi/project" -Method POST -Headers $headers -Body $requestData
|
|||
|
|
|
|||
|
|
Write-LogInfo "响应内容: $($response | ConvertTo-Json -Depth 5)"
|
|||
|
|
|
|||
|
|
if ($response.code -eq 200) {
|
|||
|
|
Write-LogInfo "✓ 项目创建成功"
|
|||
|
|
|
|||
|
|
if ($response.data.lsfxProjectId) {
|
|||
|
|
Write-LogInfo "✓ 流水分析平台项目ID: $($response.data.lsfxProjectId)"
|
|||
|
|
$script:PassCount++
|
|||
|
|
return $true
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 流水分析平台项目ID为空"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 项目创建失败: $($response.msg)"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
Write-LogError "请求失败: $($_.Exception.Message)"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 测试场景2:创建项目失败(项目名称为空)
|
|||
|
|
function Test-CreateProjectEmptyName {
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "测试场景2:创建项目失败(项目名称为空)"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
|
|||
|
|
$requestData = @{
|
|||
|
|
projectName = ""
|
|||
|
|
description = "测试异常场景"
|
|||
|
|
configType = "default"
|
|||
|
|
} | ConvertTo-Json
|
|||
|
|
|
|||
|
|
Write-LogInfo "请求数据: $requestData"
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$headers = @{
|
|||
|
|
"Content-Type" = "application/json"
|
|||
|
|
"Authorization" = "Bearer $Token"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$response = Invoke-RestMethod -Uri "$BaseUrl/ccdi/project" -Method POST -Headers $headers -Body $requestData
|
|||
|
|
|
|||
|
|
if ($response.code -ne 200) {
|
|||
|
|
Write-LogInfo "✓ 正确拒绝了空项目名称"
|
|||
|
|
$script:PassCount++
|
|||
|
|
return $true
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 未正确验证项目名称"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
Write-LogInfo "✓ 正确拒绝了空项目名称(请求失败)"
|
|||
|
|
$script:PassCount++
|
|||
|
|
return $true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 测试场景3:查询项目列表
|
|||
|
|
function Test-QueryProjectList {
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "测试场景3:查询项目列表"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$headers = @{
|
|||
|
|
"Authorization" = "Bearer $Token"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$response = Invoke-RestMethod -Uri "$BaseUrl/ccdi/project/list?pageNum=1&pageSize=10" -Method GET -Headers $headers
|
|||
|
|
|
|||
|
|
Write-LogInfo "响应内容(前500字符): $($response | ConvertTo-Json -Depth 3 | Select-Object -First 500)"
|
|||
|
|
|
|||
|
|
if ($response.code -eq 200) {
|
|||
|
|
Write-LogInfo "✓ 查询项目列表成功"
|
|||
|
|
|
|||
|
|
if ($response.rows -and $response.rows[0].lsfxProjectId) {
|
|||
|
|
Write-LogInfo "✓ 项目列表包含 lsfxProjectId 字段"
|
|||
|
|
} else {
|
|||
|
|
Write-LogWarning "! 项目列表可能缺少 lsfxProjectId 字段"
|
|||
|
|
}
|
|||
|
|
$script:PassCount++
|
|||
|
|
return $true
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 查询项目列表失败"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
Write-LogError "请求失败: $($_.Exception.Message)"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 测试场景4:流水分析平台不可用
|
|||
|
|
function Test-LsfxUnavailable {
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "测试场景4:流水分析平台不可用"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogWarning "注意:此测试需要停止 Mock Server"
|
|||
|
|
Write-LogInfo "请手动停止 lsfx-mock-server 并重新运行此测试"
|
|||
|
|
|
|||
|
|
$confirm = Read-Host "是否已停止 Mock Server?(y/n)"
|
|||
|
|
if ($confirm -ne "y") {
|
|||
|
|
Write-LogInfo "跳过此测试"
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
|||
|
|
$projectName = "异常测试项目_$timestamp"
|
|||
|
|
|
|||
|
|
$requestData = @{
|
|||
|
|
projectName = $projectName
|
|||
|
|
description = "测试流水分析平台不可用"
|
|||
|
|
configType = "default"
|
|||
|
|
} | ConvertTo-Json
|
|||
|
|
|
|||
|
|
Write-LogInfo "请求数据: $requestData"
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
$headers = @{
|
|||
|
|
"Content-Type" = "application/json"
|
|||
|
|
"Authorization" = "Bearer $Token"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$response = Invoke-RestMethod -Uri "$BaseUrl/ccdi/project" -Method POST -Headers $headers -Body $requestData
|
|||
|
|
|
|||
|
|
if ($response.code -eq 500) {
|
|||
|
|
Write-LogInfo "✓ 正确处理了流水分析平台不可用的情况"
|
|||
|
|
Write-LogInfo "错误信息: $($response.msg)"
|
|||
|
|
|
|||
|
|
# 注意:PowerShell版本无法直接验证数据库,需要MySQL工具
|
|||
|
|
Write-LogWarning "请手动验证数据库无脏数据"
|
|||
|
|
|
|||
|
|
$script:PassCount++
|
|||
|
|
return $true
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 未正确处理异常情况"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
} catch {
|
|||
|
|
Write-LogError "请求失败: $($_.Exception.Message)"
|
|||
|
|
$script:FailCount++
|
|||
|
|
return $false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主函数
|
|||
|
|
function Main {
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "开始执行项目创建功能测试"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
|
|||
|
|
# 检查后端服务
|
|||
|
|
if (-not (Test-BackendService)) {
|
|||
|
|
exit 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 获取令牌
|
|||
|
|
if (-not (Get-AccessToken)) {
|
|||
|
|
exit 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 执行测试
|
|||
|
|
Test-CreateProjectSuccess
|
|||
|
|
Test-CreateProjectEmptyName
|
|||
|
|
Test-QueryProjectList
|
|||
|
|
|
|||
|
|
# 可选测试
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "可选测试:流水分析平台不可用场景"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
$runUnavailableTest = Read-Host "是否执行流水分析平台不可用测试?(y/n)"
|
|||
|
|
if ($runUnavailableTest -eq "y") {
|
|||
|
|
Test-LsfxUnavailable
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 输出测试结果
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "测试结果汇总"
|
|||
|
|
Write-LogInfo "=========================================="
|
|||
|
|
Write-LogInfo "通过: $PassCount"
|
|||
|
|
Write-LogError "失败: $FailCount"
|
|||
|
|
Write-LogInfo "总计: $($PassCount + $FailCount)"
|
|||
|
|
|
|||
|
|
if ($FailCount -eq 0) {
|
|||
|
|
Write-LogInfo "✓ 所有测试通过!"
|
|||
|
|
exit 0
|
|||
|
|
} else {
|
|||
|
|
Write-LogError "✗ 存在失败的测试"
|
|||
|
|
exit 1
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 执行主函数
|
|||
|
|
Main
|