5.6 KiB
5.6 KiB
測試結果解讀指南
📊 如何解讀測試結果
✅ 成功的測試結果特徵
- 所有檢查通過:
checks_succeeded: 100% - 請求成功:
http_req_failed: 0% - 閾值通過:所有閾值顯示
✓ - 響應時間正常:在預期的時間範圍內
❌ 失敗的測試結果特徵
- 連接錯誤:
connection refused、timeout、no route to host - HTTP 錯誤:
http_req_failed > 0% - 檢查失敗:
checks_succeeded < 100% - 閾值失敗:閾值顯示
✗
🔍 常見錯誤及解決方案
錯誤 1: Connection Refused
錯誤信息:
dial tcp 127.0.0.1:8888: connect: connection refused
原因:
- API 服務器沒有運行
- BASE_URL 設置錯誤
- 服務器運行在不同的端口或地址
解決方案:
# 1. 檢查 API 服務器是否運行
curl https://api.example.com/api/v1/health
# 2. 設置正確的 BASE_URL
export BASE_URL=https://api.example.com
make smoke-health
# 或直接在命令中指定
make smoke-health BASE_URL=https://api.example.com
錯誤 2: Timeout
錯誤信息:
context deadline exceeded
原因:
- 服務器響應太慢
- 網絡問題
- 服務器過載
解決方案:
# 1. 檢查服務器響應時間
curl -w "@-" -o /dev/null -s https://api.example.com/api/v1/health <<'EOF'
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
EOF
# 2. 調整測試的閾值(如果需要)
# 編輯測試文件,增加響應時間閾值
錯誤 3: HTTP 4xx/5xx 錯誤
錯誤信息:
http_req_failed: 20.00% (4xx/5xx responses)
原因:
- API 端點不存在
- 認證失敗
- 服務器內部錯誤
解決方案:
# 1. 檢查 API 端點是否正確
curl -v https://api.example.com/api/v1/health
# 2. 檢查認證(如果需要)
curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/api/v1/health
# 3. 查看服務器日誌
# 檢查應用程序的日誌文件
錯誤 4: 閾值失敗
錯誤信息:
✗ 'rate==1.0' rate=95.00%
原因:
- 部分請求失敗
- 部分檢查未通過
- 性能未達標
解決方案:
# 1. 查看詳細的失敗原因
# 檢查輸出中的具體錯誤信息
# 2. 調整閾值(如果合理)
# 編輯測試文件,調整閾值要求
# 例如:從 'rate==1.0' 改為 'rate>0.95'
# 3. 修復根本問題
# 如果是服務器問題,需要修復服務器
📈 測試結果指標說明
HTTP 指標
- http_reqs: 總請求數
- http_req_duration: 請求持續時間
avg: 平均時間min: 最短時間max: 最長時間p(90): 90% 的請求在此時間內完成p(95): 95% 的請求在此時間內完成
- http_req_failed: 失敗的請求百分比
檢查指標
- checks_total: 總檢查數
- checks_succeeded: 成功的檢查數
- checks_failed: 失敗的檢查數
執行指標
- iterations: 迭代次數
- iteration_duration: 每次迭代的持續時間
- vus: 虛擬用戶數
網絡指標
- data_received: 接收的數據量
- data_sent: 發送的數據量
🎯 閾值說明
閾值(Thresholds)是測試的通過標準:
rate==1.0: 100% 必須通過rate>0.95: 至少 95% 必須通過p(95)<2000: 95% 的請求必須在 2000ms 內完成rate<0.05: 失敗率必須低於 5%
💡 最佳實踐
-
先運行健康檢查:確保服務器可用
make smoke-health BASE_URL=https://api.example.com -
逐步增加負載:從冒煙測試開始,然後負載測試,最後壓力測試
-
監控關鍵指標:
- 響應時間
- 錯誤率
- 吞吐量
-
設置合理的閾值:
- 開發環境:較寬鬆的閾值
- 生產環境:嚴格的閾值
-
保存測試結果:
make run-with-output TEST=tests/smoke/smoke-health-test.js OUTPUT=results.json
🔧 調試技巧
1. 使用詳細輸出
# 查看詳細的請求信息
k6 run --http-debug tests/smoke/smoke-health-test.js
2. 檢查網絡連接
# 測試連接
curl -v https://api.example.com/api/v1/health
# 檢查 DNS
nslookup api.example.com
# 檢查端口
telnet api.example.com 443
3. 查看 Docker 日誌
# 如果使用 Docker,查看容器日誌
docker logs k6-test
4. 本地測試
# 如果本地安裝了 k6,可以直接運行
export BASE_URL=https://api.example.com
k6 run tests/smoke/smoke-health-test.js
📝 示例:解讀你的測試結果
你的測試結果分析
✗ checks: rate==1.0 (實際: 50.00%)
- 10 個檢查中,5 個通過,5 個失敗
- 狀態碼檢查:0% 通過(因為連接失敗)
- 響應時間檢查:100% 通過(沒有實際請求)
✗ health_check_success: rate==1.0 (實際: 0.00%)
- 所有健康檢查都失敗了
✓ http_req_duration: p(95)<500 (實際: 0s)
- 沒有實際請求,所以響應時間為 0
http_req_failed: 100.00% (5 out of 5)
- 所有請求都失敗了
解決方案
# 1. 確認 API 服務器地址
# 例如:https://dev-api.example.com 或 https://localhost:8888
# 2. 設置 BASE_URL
export BASE_URL=https://dev-api.example.com
# 3. 重新運行測試
make smoke-health
# 或如果服務器在本地運行
export BASE_URL=http://localhost:8888
make smoke-health