hey- a tiny program that sends some load to a web application

源码地址rakyll/hey: HTTP load generator, ApacheBench (ab) replacement (github.com)

源码语言:GO

源码出品:Google

源码关联分析(3条消息) fasthttp性能真的比标准库http包好很多吗?一文告诉你真相!_不想秃头的晨晨的博客-CSDN博客_fasthttp

experiments/http_client_load.sh at master · bigwhite/experiments (github.com) hey的使用封装脚本

源码分析

  1. hey主要借助go原生的net/http包构造测试请求,可以充当压测小工具。对于请求的响应会做详细的分析,包括:请求摘要信息(平均时延/Qps/最快时延/最慢时延等),响应时延(histogram、tp99等),以及请求时间的具体耗时分析。

  1. 使用hey工具,hey直接linux使用运行,其结果可以输出到文件中,后续对文件内数据进行提取统计分析;

  2. 其中的Makefile文件对于不同环境的构建进行描述,如下,并且使用make release即可在linux进行编译构建;

image-202205220940343103

源码借鉴

  • cmd的命令行参数解析,flag.string的使用,以及cmd help场景,做一个命令行工具的标准参考;

  • 对于需要做服务端的请求metrics信息统计,可以参考,快速实现直方图/TP时延等信息的收集;

  • 相关的并发协程的高级用法参考使用;

  • Test测试用例的写法,t.Errorf即可输出测试用例失败场景;

    func TestBody(t *testing.T) {
       var count int64
       handler := func(w http.ResponseWriter, r *http.Request) {
          body, _ := ioutil.ReadAll(r.Body)
          if string(body) == "Body" {
             atomic.AddInt64(&count, 1)
          }
       }
       server := httptest.NewServer(http.HandlerFunc(handler))
       defer server.Close()
    
    
       req, _ := http.NewRequest("POST", server.URL, bytes.NewBuffer([]byte("Body")))
       w := &Work{
          Request:     req,
          RequestBody: []byte("Body"),
          N:           10,
          C:           1,
       }
       w.Run()
       if count != 10 {
          t.Errorf("Expected to work 10 times, found %v", count)
       }
    }
    
Liao lile
Liao lile
架构师 | 系统工程师

目前主要方向在微服务、服务网格等云原生相关领域技术