# comprehensive_test.ps1 - 通过代理全面测试所有API # 1. 先登录获取token # 2. 从all_api_urls.json读取所有URL # 3. 通过代理(80端口)用POST方法测试 # 4. 分类统计结果 $ErrorActionPreference = "SilentlyContinue" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # 登录获取token Write-Output "=== 登录获取token ===" $loginBody = '{"username":"admin","password":"admin123","tenantCode":"T202605253515"}' $loginResp = Invoke-WebRequest -Uri 'http://localhost/prod-api/login' -Method POST -ContentType 'application/json' -Body $loginBody -UseBasicParsing -TimeoutSec 10 $loginJson = $loginResp.Content | ConvertFrom-Json $token = $loginJson.token if (-not $token) { Write-Output "登录失败!退出" exit 1 } Write-Output "Token: $($token.Substring(0,20))..." # 读取所有API URL $allUrls = Get-Content -Path 'd:\ylrz\saasadminui\all_api_urls.json' -Raw | ConvertFrom-Json Write-Output "总URL数: $($allUrls.Count)" # 去重 $uniqueUrls = $allUrls | Select-Object -Unique Write-Output "唯一URL数: $($uniqueUrls.Count)" # 测试结果分类 $results = @{ ok = [System.Collections.ArrayList]::new() notFound = [System.Collections.ArrayList]::new() serverError = [System.Collections.ArrayList]::new() forbidden = [System.Collections.ArrayList]::new() timeout = [System.Collections.ArrayList]::new() other = [System.Collections.ArrayList]::new() } $headers = @{ 'Authorization' = "Bearer $token" 'Content-Type' = 'application/json' } $total = $uniqueUrls.Count $i = 0 foreach ($url in $uniqueUrls) { $i++ $fullUrl = "http://localhost/prod-api$url" # 进度每100个输出一次 if ($i % 100 -eq 0) { Write-Output "进度: $i / $total (OK=$($results.ok.Count) 404=$($results.notFound.Count) 500=$($results.serverError.Count) TIMEOUT=$($results.timeout.Count) OTHER=$($results.other.Count))" } try { $resp = Invoke-WebRequest -Uri $fullUrl -Method POST -Headers $headers -Body '{}' -UseBasicParsing -TimeoutSec 8 $code = $resp.StatusCode # 有些API即使200也可能返回错误 $body = $resp.Content if ($code -eq 200) { [void]$results.ok.Add("$url") } else { [void]$results.other.Add("$code|$url") } } catch { $errMsg = $_.Exception.Message if ($errMsg -match '404') { [void]$results.notFound.Add("404|$url") } elseif ($errMsg -match '500') { [void]$results.serverError.Add("500|$url") } elseif ($errMsg -match '403') { [void]$results.forbidden.Add("403|$url") } elseif ($errMsg -match '401') { [void]$results.forbidden.Add("401|$url") } elseif ($errMsg -match 'timeout|timed out|连接|无法连接') { [void]$results.timeout.Add("0|$url") } else { # 提取HTTP状态码 if ($errMsg -match '(\d{3})') { $code = $Matches[1] [void]$results.other.Add("$code|$url|$errMsg") } else { [void]$results.other.Add("0|$url|$errMsg") } } } } # 输出统计 Write-Output "" Write-Output "=== TEST SUMMARY ===" Write-Output "OK: $($results.ok.Count)" Write-Output "404 NOT FOUND: $($results.notFound.Count)" Write-Output "500 SERVER ERROR: $($results.serverError.Count)" Write-Output "403/401 FORBIDDEN: $($results.forbidden.Count)" Write-Output "TIMEOUT: $($results.timeout.Count)" Write-Output "OTHER: $($results.other.Count)" # 保存详细结果 $output = @() $output += "=== TEST SUMMARY ===" $output += "OK: $($results.ok.Count)" $output += "404 NOT FOUND: $($results.notFound.Count)" $output += "500 SERVER ERROR: $($results.serverError.Count)" $output += "403/401 FORBIDDEN: $($results.forbidden.Count)" $output += "TIMEOUT: $($results.timeout.Count)" $output += "OTHER: $($results.other.Count)" $output += "" $output += "=== ALL 404 ERRORS ===" $output += $results.notFound $output += "" $output += "=== ALL 500 ERRORS ===" $output += $results.serverError $output += "" $output += "=== ALL 403/401 ERRORS ===" $output += $results.forbidden $output += "" $output += "=== ALL TIMEOUT ERRORS ===" $output += $results.timeout $output += "" $output += "=== ALL OTHER ERRORS ===" $output += $results.other $output | Out-File -FilePath 'd:\ylrz\saasadminui\test_results_v3.txt' -Encoding utf8 Write-Output "结果已保存到 test_results_v3.txt"