gogotesting.B需要测试的代码
我们依然用上一篇的代码结构
│ main.go
│ main_test.go
main.go
func JoinStrUseSprint(a,b string) string {
return fmt.Sprintf("%s%s",a,b)
}
func JoinStrUseNor(a,b string) string {
return a+b
}创建一个基准测试
TestFuncBenchmarkFuncfunc TestJoinStrUseNor(t *testing.T) {
s := JoinStrUseNor("aaa","bbb")
t.Log(s)
}
func TestJoinStrUseSprint(t *testing.T) {
s := JoinStrUseSprint("aaa","bbb")
t.Log(s)
}
func BenchmarkJoinStrUseNor(b *testing.B) {
b.ResetTimer()
for i:=0; i<b.N; i++{
JoinStrUseNor("aaa","bbb")
}
}
func BenchmarkJoinStrUseSprint(b *testing.B) {
b.ResetTimer()
for i:=0; i<b.N; i++{
JoinStrUseSprint("aaa","bbb")
}
}执行基础测试
go test -bench=. -benchtime=1s -benchmem -count=1
goos: linux
goarch: amd64
pkg: test
BenchmarkJoinStrUseNor-8 79888155 15.5 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrUseSprint-8 8956500 135 ns/op 40 B/op 3 allocs/op
PASS
ok test 2.930s命令参数
-bench=..go test -bench=BenchmarkJoinStrUseSprintBenchmarkJoinStrUseSprint-benchtime=1s1s-benchmem-count=1响应参数
goos: linuxgoarch: amd64BenchmarkJoinStrUseNor-8GOMAXPROCS79888155b.N15.5 ns/op0 B/op0 allocs/op结果分析
+fmt.Sprintf()样本分析
go test -bench=BenchmarkJoinStrUseSprint -benchtime=1s -benchmem -count=10benchstatbenchstatGolang安装
go get golang.org/x/perf/cmd/benchstat分析
- 为了对比我们增加一个函数
func JoinStrOpt(a,b string) string {
return fmt.Sprintf("%s%s",a,b)
}- 增加测试
func BenchmarkJoinStrOpt(b *testing.B) {
b.ResetTimer()
for i:=0; i<b.N; i++{
JoinStrOpt("aaa","bbb")
}
}before.txtgo test -bench=BenchmarkJoinStrOpt -benchmem -count=10 | tee before.txt
goos: linux
goarch: amd64
pkg: test
BenchmarkJoinStrOpt-8 9143092 131 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9222475 131 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9344643 130 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9127231 131 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9223482 130 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9126334 131 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9364201 129 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9248034 130 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9034518 130 ns/op 40 B/op 3 allocs/op
BenchmarkJoinStrOpt-8 9102846 130 ns/op 40 B/op 3 allocs/op
PASS
ok test 13.323s- 简单分析结果
benchstat before.txt
name time/op
JoinStrOpt-8 130ns ± 1%
name alloc/op
JoinStrOpt-8 40.0B ± 0%
name allocs/op
JoinStrOpt-8 3.00 ± 0%benchstrat对比分析
JoinStrUseNorfunc JoinStrOpt(a,b string) string {
return a+b
}after.txt>go test -bench=BenchmarkJoinStrOpt -benchmem -count=10 | tee after.txt
goos: linux
goarch: amd64
pkg: test
BenchmarkJoinStrOpt-8 78033046 15.3 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 77211630 15.3 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 78088903 15.4 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 77907912 15.3 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 73805730 15.3 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 78508854 15.3 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 73493384 15.2 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 78618926 15.2 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 74973290 15.2 ns/op 0 B/op 0 allocs/op
BenchmarkJoinStrOpt-8 79287993 15.4 ns/op 0 B/op 0 allocs/op
PASS
ok test 11.959s- 对比分析
>benchstat before.txt after.txt
name old time/op new time/op delta
JoinStrOpt-8 130ns ± 1% 15ns ± 1% -88.27% (p=0.000 n=10+10)
name old alloc/op new alloc/op delta
JoinStrOpt-8 40.0B ± 0% 0.0B -100.00% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
JoinStrOpt-8 3.00 ± 0% 0.00 -100.00% (p=0.000 n=10+10)benchstat对比值括号中的数据含义
pn=10+10benchstat10+10参考资料
期待与您一起交流