Vegeta HTTP 负载测试工具

打印 上一主题 下一主题

主题 1925|帖子 1925|积分 5775

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Go接口压测的第三方包,一个很好用的负载测试工具。vegeta测试工具组件(可执行文件)支持linux以及mac系统,这里指的是通过终端命令行进行进行测试,不需要从代码层面使用这个工具的时候支持linux以及mac系统,在windows上可能会出现问题。但是通过vegeta包代码执行的时候是可以在多平台执行的,但是在数据的展示上会有局限性,当然也可能是博主本人不会用没有找到对应的使用方式。
比如测试工具组件执行完命令后可以在终端控制台很直观的看到Histogram图,但是在代码层面测试后就很难分析出Histogram的情况
下面贴一下代码层面的吧,至于组件的方式大家百度一下有很多详细的教程
http的形式
传参,用户验证参数
  1. package main
  2. import (
  3.         "encoding/base64"
  4.         "encoding/json"
  5.         "fmt"
  6.         vegeta "github.com/tsenart/vegeta/lib"
  7.         "net/http"
  8.         "time"
  9. )
  10. func main() {
  11.         // 测试目标 URL
  12.         target := "https://your.domain.name/"
  13.         // 测试参数
  14.         rate := 20                  // 每秒请求数
  15.         duration := 1 * time.Second // 测试时间
  16.         // 请求体数据
  17.         data := map[string]string{
  18.                 "key1": "value1",
  19.                 "key2": "value2",
  20.         }
  21.         body, _ := json.Marshal(&data)
  22.         // Basic验证
  23.         authString := "user:password"
  24.         encodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString))
  25.         headers := http.Header{
  26.                 "Content-Type":  []string{"application/json"},
  27.                 "Authorization": []string{"Basic " + encodedAuthString},
  28.         }
  29.         // 使用自定义transport创建attacker
  30.         attacker := vegeta.NewAttacker()
  31.         // 创建 vegeta 目标
  32.         targets := []vegeta.Target{{Method: "GET", URL: target, Header: headers, Body: body}}
  33.         // 创建和执行 vegeta 测试
  34.         results := attacker.Attack(vegeta.NewStaticTargeter(targets...), vegeta.Rate{Freq: rate, Per: time.Second}, duration, "Load Test")
  35.         // 分析结果
  36.         metrics := &vegeta.Metrics{}
  37.         for res := range results {
  38.                 metrics.Add(res)
  39.         }
  40.         metrics.Close()
  41.         // 打印结果
  42.         fmt.Printf("Requests: %d\n", metrics.Requests)
  43.         fmt.Printf("成功率: %.2f%%\n", metrics.Success*100)
  44.         fmt.Printf("最大延迟: %s\n", metrics.Latencies.Max)
  45.         fmt.Printf("平均延迟: %s\n", metrics.Latencies.Mean)
  46.         fmt.Printf("P95 延迟: %s\n", metrics.Latencies.P95)
  47.         fmt.Printf("P99 延迟: %s\n", metrics.Latencies.P99)
  48.         fmt.Printf("QPS: %.2f\n", metrics.Rate)
  49. }
复制代码
Https的形式
传参,用户验证参数,跨过证书验证
  1. package main
  2. import (
  3.         "crypto/tls"
  4.         "encoding/base64"
  5.         "encoding/json"
  6.         "fmt"
  7.         vegeta "github.com/tsenart/vegeta/lib"
  8.         "net/http"
  9.         "time"
  10. )
  11. func main() {
  12.         // 测试目标 URL
  13.         target := "https://your.domain.name/"
  14.         // 测试参数
  15.         rate := 20                  // 每秒请求数
  16.         duration := 1 * time.Second // 测试时间
  17.         // 请求体数据
  18.         data := map[string]string{
  19.                 "key1": "value1",
  20.                 "key2": "value2",
  21.         }
  22.         body, _ := json.Marshal(&data)
  23.         // Basic验证
  24.         authString := "user:password"
  25.         encodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString))
  26.         headers := http.Header{
  27.                 "Content-Type":  []string{"application/json"},
  28.                 "Authorization": []string{"Basic " + encodedAuthString},
  29.         }
  30.         // 创建http.Transport以跳过证书验证
  31.         transport := &http.Transport{
  32.                 TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  33.         }
  34.         // 使用自定义transport创建attacker
  35.         attacker := vegeta.NewAttacker(vegeta.Client(&http.Client{Transport: transport}))
  36.         // 创建 vegeta 目标
  37.         targets := []vegeta.Target{{Method: "GET", URL: target, Header: headers, Body: body}}
  38.         // 创建和执行 vegeta 测试
  39.         results := attacker.Attack(vegeta.NewStaticTargeter(targets...), vegeta.Rate{Freq: rate, Per: time.Second}, duration, "Load Test")
  40.         // 分析结果
  41.         metrics := &vegeta.Metrics{}
  42.         for res := range results {
  43.                 metrics.Add(res)
  44.         }
  45.         metrics.Close()
  46.         // 打印结果
  47.         fmt.Printf("Requests: %d\n", metrics.Requests)
  48.         fmt.Printf("成功率: %.2f%%\n", metrics.Success*100)
  49.         fmt.Printf("最大延迟: %s\n", metrics.Latencies.Max)
  50.         fmt.Printf("平均延迟: %s\n", metrics.Latencies.Mean)
  51.         fmt.Printf("P95 延迟: %s\n", metrics.Latencies.P95)
  52.         fmt.Printf("P99 延迟: %s\n", metrics.Latencies.P99)
  53.         fmt.Printf("QPS: %.2f\n", metrics.Rate)
  54. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表