Files
ccdi/docs/test-scripts/test-project-creation.ps1
wkc 206754adb4 test: 添加项目创建功能测试脚本和文档
- 添加 Bash 测试脚本 (test-project-creation.sh)
- 添加 PowerShell 测试脚本 (test-project-creation.ps1)
- 添加批处理测试脚本 (test-project-creation.bat)
- 添加测试说明文档 (README.md)
- 支持4个测试场景:成功、参数校验、查询列表、异常处理
- 包含数据库验证和事务回滚验证
2026-03-04 11:04:16 +08:00

301 lines
9.2 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ====================================
# 项目创建功能测试脚本 (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