马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |