Go接口压测的第三方包,一个很好用的负载测试工具。vegeta测试工具组件(可执行文件)支持linux以及mac系统,这里指的是通过终端命令行进行进行测试,不需要从代码层面使用这个工具的时候支持linux以及mac系统,在windows上可能会出现问题。但是通过vegeta包代码执行的时候是可以在多平台执行的,但是在数据的展示上会有局限性,当然也可能是博主本人不会用没有找到对应的使用方式。
比如测试工具组件执行完命令后可以在终端控制台很直观的看到Histogram图,但是在代码层面测试后就很难分析出Histogram的情况
下面贴一下代码层面的吧,至于组件的方式大家百度一下有很多详细的教程
http的形式
传参,用户验证参数
packagemainimport("encoding/base64""encoding/json""fmt"vegeta"github.com/tsenart/vegeta/lib""net/http""time")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:password"encodedAuthString:=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/tls""encoding/base64""encoding/json""fmt"vegeta"github.com/tsenart/vegeta/lib""net/http""time")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: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创建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)}