golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用
go-web-framework-benchmark 高性能Web框架基准测试插件库使用指南
概述
go-web-framework-benchmark 是一个用于比较Go语言Web框架性能的基准测试套件。它不同于只测试路由性能的工具,而是测试完整的HTTP请求处理过程,包括连接、路由选择和处理程序执行。
测试框架列表
该基准测试覆盖了以下稳定的Go Web框架(按字母顺序排列):
- atreugo
- baa
- beego
- bone
- chi
- clevergo
- default http
- denco
- don
- echo
- fasthttp-routing
- fasthttp/router
- fasthttp
- fiber
- gear
- gearbox
- gem
- gin
- goframe
- go-ozzo
- go-restful
- go-tigertonic
- goji
- golf
- gorilla
- gorouter
- goyave
- httprouter
- httptreemux
- httpz
- indigo
- lars
- lion
- macaron
- muxie
- negroni
- pat
- pulse
- pure
- r2router
- tango
- tinyrouter
- treemux
- violetear
- vulcan
- webgo
安装与使用
1. 安装基准测试工具
go get github.com/smallnest/go-web-framework-bbenchmark
2. 运行基础测试
cd $GOPATH/src/github.com/smallnest/go-web-framework-benchmark
go build -o gowebbenchmark .
./test.sh
测试完成后会生成 processtime.csv 和 concurrency.csv 结果文件。
3. 扩展测试选项
测试延迟和内存分配
./test-latency.sh
禁用keepalive测试
./test-latency-nonkeepalive.sh
测试HTTP管道化
./test-pipelining.sh
运行全部测试
./test-all.sh
注意:完整测试所有框架需要数小时时间。
4. 自定义测试框架
修改 test.sh 脚本,只保留你想测试的框架:
web_frameworks=("default" "gin" "echo" "fasthttp" "fiber" "beego" "goji")
示例代码
以下是模拟业务逻辑的测试处理器示例:
api.Get("/rest/hello", func(c *XXXXX.Context) {
sleepTime := strconv.Atoi(os.Args[1]) //10ms
if sleepTime > 0 {
time.Sleep(time.Duration(sleepTime) * time.Millisecond)
}
c.Text("Hello world")
})
测试结果解读
测试结果包含以下指标:
- 吞吐量:每秒处理的请求数(越高越好)
- 延迟:服务器实际处理时间(越低越好)
- 内存分配:测试期间堆内存分配量(MB,越低越好)
测试环境:
- CPU: KVM Virtual CPU version(2 GHz, 4 cores)
- 内存: 16G
- Go版本: go1.18.5 linux/amd64
- OS: Ubuntu 22.04.1 LTS with Kernel 5.15.0-41-generic
添加新框架
欢迎贡献新的框架测试,步骤如下:
- 在README中添加框架链接
- 在server.go中添加框架的实现
- 在libs.sh中添加框架名称
请按字母顺序添加新框架。
更多关于golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-web-framework-benchmark 使用指南
go-web-framework-benchmark
是一个用于测试和比较各种 Go Web 框架性能的基准测试工具。下面我将详细介绍如何使用这个工具。
安装
首先需要安装该工具:
go get -u github.com/smallnest/go-web-framework-benchmark
基本使用
1. 运行所有框架的基准测试
cd $GOPATH/src/github.com/smallnest/go-web-framework-benchmark
go build -o benchmark main.go
./benchmark
2. 测试特定框架
./benchmark -framework gin,echo,iris
3. 常用参数
./benchmark -h
常用参数包括:
-concurrency
: 并发数 (默认: 100)-requests
: 总请求数 (默认: 10000)-duration
: 测试持续时间 (如 10s, 1m)-framework
: 指定测试的框架列表 (逗号分隔)-port
: 测试服务器端口 (默认: 8080)
示例代码
如果你想将自己的框架加入测试,可以参考以下示例:
1. 添加测试框架
在 server
目录下创建你的框架实现,例如 myframework.go
:
package server
import (
"net/http"
"github.com/yourname/yourframework"
)
func init() {
servers["yourframework"] = yourFrameworkServer
}
func yourFrameworkServer(addr string) error {
app := yourframework.New()
app.Get("/hello", func(c yourframework.Context) error {
return c.String("world")
})
return app.Start(addr)
}
2. 注册框架
在 main.go
中添加你的框架到 allServers
变量:
var allServers = []string{
// 其他框架...
"yourframework",
}
测试结果解读
测试完成后会输出类似以下结果:
Framework Requests/sec Latency(ms) Transfer(MB)
gin 125678 0.79 12.5
echo 118765 0.84 11.8
iris 121234 0.82 12.1
yourframework 110987 0.90 11.0
- Requests/sec: 每秒处理的请求数,越高越好
- Latency: 平均延迟时间,越低越好
- Transfer: 数据传输量
高级用法
1. 生成图表
./benchmark -plot
这会生成 benchmark.png
图表文件。
2. 持续集成
可以编写脚本定期运行测试并记录结果:
#!/bin/bash
DATE=$(date +%Y%m%d)
./benchmark -framework gin,echo,iris > results/$DATE.txt
3. 自定义测试用例
修改 server/common.go
中的测试路由和响应内容:
const (
TestString = "world" // 修改测试返回内容
)
注意事项
- 测试环境应保持一致,最好在干净的机器上运行
- 避免在测试期间运行其他消耗资源的程序
- 多次运行取平均值以获得更准确的结果
- 不同版本的框架性能可能有差异,注意记录版本号
通过这个工具,你可以客观地比较不同 Go Web 框架的性能表现,为项目选型提供数据支持。