壓力測試方案怎麼寫:壓測計劃與 k6 腳本生成提示詞(目標、場景、指標、通過標準)

大促、上線新系統前要做性能壓測時用:讓 AI 先幫你把壓測目標和流量模型定清楚,再生成帶階梯加壓、思考時間和通過閾值的 k6 腳本,最後給出結果怎麼看、瓶頸怎麼定位的清單。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名性能測試工程師。請幫我制定壓測方案並編寫 k6 腳本。

- 被測系統與接口:[接口列表或業務流程]
- 預期業務量:[預期業務量](例:大促峰值每秒 800 單,平時每秒 50 單)
- 用戶行為比例:[用戶行為比例](例:70% 瀏覽商品、20% 加購、10% 下單)
- 性能要求:[性能要求](例:95% 請求 300 毫秒內、錯誤率低於 0.1%)
- 壓測環境:[壓測環境](例:與生產同配置的預發環境,2 台應用伺服器)
- 鑑權方式與測試帳號來源:[鑑權方式]

第一部分:壓測方案
1. 壓測目標:用一句話寫清要回答的問題(例如「峰值 800 單每秒時,響應時間和錯誤率是否達標」「系統最多能扛多少」)。
2. 流量模型:把業務量換算成每個接口的請求速率,說明換算過程和假設。
3. 場景設計:基準測試(低壓力驗證腳本)、負載測試(目標壓力持續一段時間)、壓力測試(逐步加壓找到拐點)、穩定性測試(中等壓力長時間運行)——按我的目標選擇需要的,寫明每個場景的加壓方式和持續時間。
4. 監控清單:壓測時除了 k6 的結果,還要同時看哪些服務端指標(CPU、內存、數據庫連接數、慢查詢、緩存命中率、垃圾回收、線程池),以便定位瓶頸。
5. 風險與準備:測試數據準備、是否會觸發短訊或支付等外部調用(必須用模擬接口隔離)、是否會影響其他系統、壓測後的數據清理。

第二部分:k6 腳本
- 用場景配置實現階梯加壓,按業務比例分配不同的用戶行為;
- 加入隨機思考時間;
- 用閾值配置寫出通過標準,不達標時測試判定為失敗;
- 對關鍵接口做返回內容校驗,而不僅僅檢查狀態碼;
- 測試帳號和數據從外部文件讀取。

第三部分:結果分析指南
拿到結果後看哪些數字、典型的瓶頸表現(如響應時間隨壓力線性上升、錯誤率突然跳升)分別意味着什麼。

只針對自己擁有或獲得授權的系統壓測。

高亮處換成你自己的內容:[接口列表或業務流程]、[預期業務量]、[用戶行為比例]、[性能要求]、[壓測環境]、[鑑權方式]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[預期業務量] 和 [用戶行為比例] 是整個方案的基礎,可以從歷史監控裏取峰值數據。沒有數據就寫「估計」,AI 會在方案裏標出這些假設,壓測前要和業務確認。

常見坑:

  • 只壓單個接口,得出「每秒能扛 5000 次」的結論,真實場景裏多個接口共享數據庫和緩存,實際容量會低得多。按業務比例混合壓測更接近真實情況。
  • 壓測機自身成為瓶頸(CPU 打滿、帶寬不夠),測出來的是壓測機的極限。腳本要監控壓測機資源。
  • 壓測時沒有隔離短訊、支付等外部接口,可能真的給用戶發了幾萬條短訊。壓測環境裏這些調用必須指向模擬服務。

追問技巧:壓測完成後,把 k6 的彙總輸出和同時間段的伺服器監控數據貼回去,問「瓶頸最可能在哪一層,下一步該看什麼」。

示例輸出

示例,僅供參考(k6 腳本節選)
js
import http from 'k6/http'
import { check, sleep } from 'k6'

export const options = {
  scenarios: {
    browse: {
      executor: 'ramping-arrival-rate',
      startRate: 50, timeUnit: '1s', preAllocatedVUs: 200,
      stages: [
        { target: 560, duration: '5m' },   // 加壓到峰值的 70%(瀏覽)
        { target: 560, duration: '20m' },  // 保持
        { target: 0, duration: '2m' },
      ],
      exec: 'browse',
    },
  },
  thresholds: {
    http_req_failed: ['rate<0.001'],
    http_req_duration: ['p(95)<300'],
  },
}

export function browse() {
  const res = http.get(`${__ENV.BASE_URL}/api/products/1001`)
  check(res, { '返回商品數據': (r) => r.status === 200 && r.json('id') === 1001 })
  sleep(Math.random() * 2 + 1)
}

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~