Go介面壓測的第三方包,一個很好用的負載測試工具。**vegeta測試工具組件(可執行文件)**支持linux以及mac系統,這裡指的是通過終端命令行進行進行測試,不需要從代碼層面使用這個工具的時候支持linux以及mac系統,在windows上可能會出現問題。但是通過**vegeta包代碼執行** ...
Go介面壓測的第三方包,一個很好用的負載測試工具。vegeta測試工具組件(可執行文件)支持linux以及mac系統,這裡指的是通過終端命令行進行進行測試,不需要從代碼層面使用這個工具的時候支持linux以及mac系統,在windows上可能會出現問題。但是通過vegeta包代碼執行的時候是可以在多平臺執行的,但是在數據的展示上會有局限性,當然也可能是博主本人不會用沒有找到對應的使用方式。
比如測試工具組件執行完命令後可以在終端控制台很直觀的看到Histogram圖,但是在代碼層面測試後就很難分析出Histogram的情況
下麵貼一下代碼層面的吧,至於組件的方式大家百度一下有很多詳細的教程
http的形式
傳參,用戶驗證參數
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
vegeta "github.com/tsenart/vegeta/lib"
"net/http"
"time"
)
func main() {
// 測試目標 URL
target := "https://your.domain.name/"
// 測試參數
rate := 20 // 每秒請求數
duration := 1 * time.Second // 測試時間
// 請求體數據
data := map[string]string{
"key1": "value1",
"key2": "value2",
}
body, _ := json.Marshal(&data)
// Basic驗證
authString := "user:password"
encodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString))
headers := http.Header{
"Content-Type": []string{"application/json"},
"Authorization": []string{"Basic " + encodedAuthString},
}
// 使用自定義transport創建attacker
attacker := vegeta.NewAttacker()
// 創建 vegeta 目標
targets := []vegeta.Target{{Method: "GET", URL: target, Header: headers, Body: body}}
// 創建和執行 vegeta 測試
results := attacker.Attack(vegeta.NewStaticTargeter(targets...), vegeta.Rate{Freq: rate, Per: time.Second}, duration, "Load Test")
// 分析結果
metrics := &vegeta.Metrics{}
for res := range results {
metrics.Add(res)
}
metrics.Close()
// 列印結果
fmt.Printf("Requests: %d\n", metrics.Requests)
fmt.Printf("成功率: %.2f%%\n", metrics.Success*100)
fmt.Printf("最大延遲: %s\n", metrics.Latencies.Max)
fmt.Printf("平均延遲: %s\n", metrics.Latencies.Mean)
fmt.Printf("P95 延遲: %s\n", metrics.Latencies.P95)
fmt.Printf("P99 延遲: %s\n", metrics.Latencies.P99)
fmt.Printf("QPS: %.2f\n", metrics.Rate)
}
Https的形式
傳參,用戶驗證參數,跨過證書驗證
package main
import (
"crypto/tls"
"encoding/base64"
"encoding/json"
"fmt"
vegeta "github.com/tsenart/vegeta/lib"
"net/http"
"time"
)
func main() {
// 測試目標 URL
target := "https://your.domain.name/"
// 測試參數
rate := 20 // 每秒請求數
duration := 1 * time.Second // 測試時間
// 請求體數據
data := map[string]string{
"key1": "value1",
"key2": "value2",
}
body, _ := json.Marshal(&data)
// Basic驗證
authString := "user:password"
encodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString))
headers := http.Header{
"Content-Type": []string{"application/json"},
"Authorization": []string{"Basic " + encodedAuthString},
}
// 創建http.Transport以跳過證書驗證
transport := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
// 使用自定義transport創建attacker
attacker := vegeta.NewAttacker(vegeta.Client(&http.Client{Transport: transport}))
// 創建 vegeta 目標
targets := []vegeta.Target{{Method: "GET", URL: target, Header: headers, Body: body}}
// 創建和執行 vegeta 測試
results := attacker.Attack(vegeta.NewStaticTargeter(targets...), vegeta.Rate{Freq: rate, Per: time.Second}, duration, "Load Test")
// 分析結果
metrics := &vegeta.Metrics{}
for res := range results {
metrics.Add(res)
}
metrics.Close()
// 列印結果
fmt.Printf("Requests: %d\n", metrics.Requests)
fmt.Printf("成功率: %.2f%%\n", metrics.Success*100)
fmt.Printf("最大延遲: %s\n", metrics.Latencies.Max)
fmt.Printf("平均延遲: %s\n", metrics.Latencies.Mean)
fmt.Printf("P95 延遲: %s\n", metrics.Latencies.P95)
fmt.Printf("P99 延遲: %s\n", metrics.Latencies.P99)
fmt.Printf("QPS: %.2f\n", metrics.Rate)
}