@extends('layouts.app') @section('content')

壓力測試報告

匯出 PDF 返回列表
{{-- ===== 測試說明 ===== --}}
測試說明
本報告為網站壓力測試結果,旨在評估目標網站在不同負載條件下的效能表現與穩定性。
測試工具:K6(Grafana Labs 開源負載測試工具),透過模擬多個虛擬使用者(VUs)同時對目標網站發送 HTTP 請求。
測試方式:每組 VUs 測試持續 30 秒,依序執行不同人數階段。
主要指標: 平均回應時間(avg)、中位數(med)、P90/P95、最大回應時間(max)、每秒請求數(RPS)、失敗率、檢查通過率。
{{-- ===== 測試對象 ===== --}}
測試對象
@if ($test->login_path) @endif
學校名稱 {{ $test->school_name }}
測試網址 {{ $test->url }}
登入路徑 {{ $test->login_path }}
@if ($test->email) @endif
測試人數 (VUs) @foreach ($stages as $vus) {{ $vus }} VUs @endforeach
每階段時長 30 秒
測試時間 {{ \Carbon\Carbon::parse($test->test_time)->format('Y-m-d H:i:s') }}
測試帳號 {{ $test->email }}
測試工具 K6 (Grafana Labs)
@php $validResults = collect($stageResults)->filter(fn($s) => isset($s['http_reqs'])); @endphp @if ($validResults->count() > 0) {{-- ===== 測試結果總覽 ===== --}}
測試結果總覽
@foreach ($validResults as $sr) @endforeach
VUs (人數) HTTP 請求數 每秒請求 (RPS) 平均回應 (ms) 中位數 (ms) P90 (ms) P95 (ms) 最大回應 (ms) 失敗率 檢查通過率
{{ $sr['vus'] }} {{ number_format($sr['http_reqs']) }} {{ $sr['http_reqs_rate'] }} {{ $sr['avg_duration'] }} {{ $sr['med_duration'] }} {{ $sr['p90_duration'] }} {{ $sr['p95_duration'] }} {{ $sr['max_duration'] }} @if ($sr['fail_rate'] == 0) 0% @elseif ($sr['fail_rate'] < 0.05) {{ round($sr['fail_rate'] * 100, 2) }}% @else {{ round($sr['fail_rate'] * 100, 2) }}% @endif @if ($sr['check_pass_rate'] >= 90) {{ $sr['check_pass_rate'] }}% @elseif ($sr['check_pass_rate'] >= 60) {{ $sr['check_pass_rate'] }}% @else {{ $sr['check_pass_rate'] }}% @endif
{{-- ===== 圖表總覽 ===== --}}
回應時間比較 (ms)
每秒請求數 (RPS)
請求失敗率 (%)
檢查通過率 (%)
{{-- ===== 曲線圖:不同 VUs 趨勢比較 ===== --}}
回應時間趨勢 (ms)
綜合效能趨勢
{{-- ===== 各階段詳細結果 ===== --}} @foreach ($validResults as $idx => $sr)
{{ $sr['vus'] }} VUs 階段詳細結果
虛擬使用者數{{ $sr['vus'] }} 人
HTTP 請求總數{{ number_format($sr['http_reqs']) }} 次({{ $sr['http_reqs_rate'] }} req/s)
迭代次數{{ number_format($sr['iterations']) }} 次
接收資料量{{ $sr['data_received'] }} KB
發送資料量{{ $sr['data_sent'] }} KB
{{-- 回應時間分布圖 --}}
指標數值 (ms)
最小值{{ $sr['min_duration'] }}
平均值{{ $sr['avg_duration'] }}
中位數{{ $sr['med_duration'] }}
P90{{ $sr['p90_duration'] }}
P95{{ $sr['p95_duration'] }}
最大值{{ $sr['max_duration'] }}
@if (!empty($sr['checks'])) @php $checkDesc = [ 'HTTP 回應成功 (2xx)' => 'HTTP 狀態碼 200–299,表示請求被伺服器正常處理', '伺服器無錯誤 (非 5xx)' => 'HTTP 狀態碼小於 500,表示伺服器端未發生錯誤', 'status 2xx' => 'HTTP 狀態碼 200–299,表示請求被伺服器正常處理', 'status not 5xx' => 'HTTP 狀態碼小於 500,表示伺服器端未發生錯誤', ]; @endphp
檢查項目
@foreach ($sr['checks'] as $checkName => $check) @php $name = $check['name'] ?? $checkName; @endphp @endforeach
檢查名稱 說明 通過 失敗 結果
{{ $name }} {{ $checkDesc[$name] ?? '—' }} {{ number_format($check['passes'] ?? 0) }} {{ number_format($check['fails'] ?? 0) }} @if (($check['fails'] ?? 0) == 0) PASS @else FAIL @endif
@endif
@endforeach @else
無法讀取測試結果 JSON 檔案。
@endif
@endsection @if (collect($stageResults)->filter(fn($s) => isset($s['http_reqs']))->count() > 0) @push('scripts') @endpush @endif