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的使用封装脚本
源码分析:
- hey主要借助go原生的net/http包构造测试请求,可以充当压测小工具。对于请求的响应会做详细的分析,包括:请求摘要信息(平均时延/Qps/最快时延/最慢时延等),响应时延(histogram、tp99等),以及请求时间的具体耗时分析。

-
使用hey工具,hey直接linux使用运行,其结果可以输出到文件中,后续对文件内数据进行提取统计分析;
-
其中的Makefile文件对于不同环境的构建进行描述,如下,并且使用make release即可在linux进行编译构建;

源码借鉴:
-
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) } }