gitee.com/chenleup/lego@v1.2.6/benchmarks_test.go (about) 1 /* 2 @Time : 2020/12/29 2:02 下午 3 @Author : chenle 4 @File : benchmarks_test 5 @Software: GoLand 6 */ 7 package lego 8 9 import ( 10 "io/ioutil" 11 "log" 12 "net/http" 13 "testing" 14 ) 15 16 func BenchmarkOneRoute(B *testing.B) { 17 router := New() 18 router.GET("/ping", func(c *Context) {}) 19 runRequest(B, router, "GET", "/ping") 20 } 21 22 //BenchmarkRequest-8 7556 193750 ns/op 3596 B/op 46 allocs/op 23 //BenchmarkRequest-8 8108 159146 ns/op 3596 B/op 46 allocs/op 24 25 func BenchmarkRequest(b *testing.B) { 26 b.ReportAllocs() 27 b.ResetTimer() 28 for i := 0; i < b.N; i++ { 29 rsp, err := http.Get("http://127.0.0.1/hello") 30 if err != nil { 31 log.Println(err) 32 return 33 } 34 35 body, _ := ioutil.ReadAll(rsp.Body) 36 rsp.Body.Close() 37 log.Println(string(body)) 38 } 39 40 } 41 42 //func BenchmarkRecoveryMiddleware(B *testing.B) { 43 // router := New() 44 // router.Use(Recovery()) 45 // router.GET("/", func(c *Context) {}) 46 // runRequest(B, router, "GET", "/") 47 //} 48 // 49 //func BenchmarkLoggerMiddleware(B *testing.B) { 50 // router := New() 51 // router.Use(LoggerWithWriter(newMockWriter())) 52 // router.GET("/", func(c *Context) {}) 53 // runRequest(B, router, "GET", "/") 54 //} 55 // 56 //func BenchmarkManyHandlers(B *testing.B) { 57 // router := New() 58 // router.Use(Recovery(), LoggerWithWriter(newMockWriter())) 59 // router.Use(func(c *Context) {}) 60 // router.Use(func(c *Context) {}) 61 // router.GET("/ping", func(c *Context) {}) 62 // runRequest(B, router, "GET", "/ping") 63 //} 64 // 65 //func Benchmark5Params(B *testing.B) { 66 // DefaultWriter = os.Stdout 67 // router := New() 68 // router.Use(func(c *Context) {}) 69 // router.GET("/param/:param1/:params2/:param3/:param4/:param5", func(c *Context) {}) 70 // runRequest(B, router, "GET", "/param/path/to/parameter/john/12345") 71 //} 72 // 73 //func BenchmarkOneRouteJSON(B *testing.B) { 74 // router := New() 75 // data := struct { 76 // Status string `json:"status"` 77 // }{"ok"} 78 // router.GET("/json", func(c *Context) { 79 // c.JSON(http.StatusOK, data) 80 // }) 81 // runRequest(B, router, "GET", "/json") 82 //} 83 // 84 //func BenchmarkOneRouteHTML(B *testing.B) { 85 // router := New() 86 // t := template.Must(template.New("index").Parse(` 87 // <html><body><h1>{{.}}</h1></body></html>`)) 88 // router.SetHTMLTemplate(t) 89 // 90 // router.GET("/html", func(c *Context) { 91 // c.HTML(http.StatusOK, "index", "hola") 92 // }) 93 // runRequest(B, router, "GET", "/html") 94 //} 95 // 96 //func BenchmarkOneRouteSet(B *testing.B) { 97 // router := New() 98 // router.GET("/ping", func(c *Context) { 99 // c.Set("key", "value") 100 // }) 101 // runRequest(B, router, "GET", "/ping") 102 //} 103 // 104 //func BenchmarkOneRouteString(B *testing.B) { 105 // router := New() 106 // router.GET("/text", func(c *Context) { 107 // c.String(http.StatusOK, "this is a plain text") 108 // }) 109 // runRequest(B, router, "GET", "/text") 110 //} 111 // 112 //func BenchmarkManyRoutesFist(B *testing.B) { 113 // router := New() 114 // router.Any("/ping", func(c *Context) {}) 115 // runRequest(B, router, "GET", "/ping") 116 //} 117 // 118 //func BenchmarkManyRoutesLast(B *testing.B) { 119 // router := New() 120 // router.Any("/ping", func(c *Context) {}) 121 // runRequest(B, router, "OPTIONS", "/ping") 122 //} 123 // 124 //func Benchmark404(B *testing.B) { 125 // router := New() 126 // router.Any("/something", func(c *Context) {}) 127 // router.NoRoute(func(c *Context) {}) 128 // runRequest(B, router, "GET", "/ping") 129 //} 130 // 131 //func Benchmark404Many(B *testing.B) { 132 // router := New() 133 // router.GET("/", func(c *Context) {}) 134 // router.GET("/path/to/something", func(c *Context) {}) 135 // router.GET("/post/:id", func(c *Context) {}) 136 // router.GET("/view/:id", func(c *Context) {}) 137 // router.GET("/favicon.ico", func(c *Context) {}) 138 // router.GET("/robots.txt", func(c *Context) {}) 139 // router.GET("/delete/:id", func(c *Context) {}) 140 // router.GET("/user/:id/:mode", func(c *Context) {}) 141 // 142 // router.NoRoute(func(c *Context) {}) 143 // runRequest(B, router, "GET", "/viewfake") 144 //} 145 146 type mockWriter struct { 147 headers http.Header 148 } 149 150 func newMockWriter() *mockWriter { 151 return &mockWriter{ 152 http.Header{}, 153 } 154 } 155 156 func (m *mockWriter) Header() (h http.Header) { 157 return m.headers 158 } 159 160 func (m *mockWriter) Write(p []byte) (n int, err error) { 161 return len(p), nil 162 } 163 164 func (m *mockWriter) WriteString(s string) (n int, err error) { 165 return len(s), nil 166 } 167 168 func (m *mockWriter) WriteHeader(int) {} 169 170 func runRequest(B *testing.B, r *Lego, method, path string) { 171 // create fake request 172 req, err := http.NewRequest(method, path, nil) 173 if err != nil { 174 panic(err) 175 } 176 w := newMockWriter() 177 B.ReportAllocs() 178 B.ResetTimer() 179 for i := 0; i < B.N; i++ { 180 r.ServeHTTP(w, req) 181 } 182 }