Vegeta HTTP 负载测试工具

Vegeta HTTP 负载测试工具
Go接口压测的第三方包一个很好用的负载测试工具。vegeta测试工具组件可执行文件支持linux以及mac系统这里指的是通过终端命令行进行进行测试不需要从代码层面使用这个工具的时候支持linux以及mac系统在windows上可能会出现问题。但是通过vegeta包代码执行的时候是可以在多平台执行的但是在数据的展示上会有局限性当然也可能是博主本人不会用没有找到对应的使用方式。比如测试工具组件执行完命令后可以在终端控制台很直观的看到Histogram图但是在代码层面测试后就很难分析出Histogram的情况下面贴一下代码层面的吧至于组件的方式大家百度一下有很多详细的教程http的形式传参用户验证参数packagemainimport(encoding/base64encoding/jsonfmtvegetagithub.com/tsenart/vegeta/libnet/httptime)funcmain(){// 测试目标 URLtarget: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:passwordencodedAuthString:base64.StdEncoding.EncodeToString([]byte(authString))headers:http.Header{Content-Type:[]string{application/json},Authorization:[]string{Basic encodedAuthString},}// 使用自定义transport创建attackerattacker: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{}forres:rangeresults{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的形式传参用户验证参数跨过证书验证packagemainimport(crypto/tlsencoding/base64encoding/jsonfmtvegetagithub.com/tsenart/vegeta/libnet/httptime)funcmain(){// 测试目标 URLtarget: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:passwordencodedAuthString: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创建attackerattacker: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{}forres:rangeresults{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)}