benchmark template
This commit is contained in:
parent
a564f3dcf5
commit
cf5ce2712c
72
cmd/bench/base.go
Normal file
72
cmd/bench/base.go
Normal file
@ -0,0 +1,72 @@
|
||||
package bench
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type Target struct {
|
||||
//这里定义需要测试的方法
|
||||
}
|
||||
|
||||
//测试基准
|
||||
type Benchmark struct {
|
||||
Parallelism int //并行数目
|
||||
Data interface{} //bench 参数数据
|
||||
TargetBuilder TargetBuilder
|
||||
}
|
||||
|
||||
//构建基准目标
|
||||
type TargetBuilder struct {
|
||||
Name string
|
||||
Make func(bench Benchmark) (Target, error)
|
||||
}
|
||||
|
||||
func compose(parallelisms, dataSize []int, numKeys int, builders []TargetBuilder) []Benchmark {
|
||||
benchmarks := make([]Benchmark, 0, len(parallelisms)*len(dataSize)*len(builders))
|
||||
|
||||
for _, p := range parallelisms {
|
||||
for _, _ = range dataSize {
|
||||
|
||||
for _, builder := range builders {
|
||||
benchmarks = append(benchmarks, Benchmark{
|
||||
Parallelism: p,
|
||||
// Data: d,
|
||||
TargetBuilder: builder,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return benchmarks
|
||||
}
|
||||
|
||||
func RunBenchmark(b *testing.B, benchmarks []Benchmark) {
|
||||
for _, bench := range benchmarks {
|
||||
bench := bench
|
||||
b.Run(fmt.Sprintf("%s-parallelism(%d)- ", bench.TargetBuilder.Name, bench.Parallelism), func(b *testing.B) {
|
||||
// target, err := bench.TargetBuilder.Make(bench)
|
||||
// if err != nil {
|
||||
// b.Fatalf("%s setup fail: %v", bench.TargetBuilder.Name, err)
|
||||
// }
|
||||
if bench.Parallelism == 0 {
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
//执行测试方法
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
b.SetParallelism(bench.Parallelism) //指定并行数目
|
||||
b.ResetTimer()
|
||||
b.RunParallel(func(pb *testing.PB) { //并行执行
|
||||
for pb.Next() {
|
||||
//执行测试方法
|
||||
}
|
||||
})
|
||||
}
|
||||
b.StopTimer()
|
||||
})
|
||||
}
|
||||
}
|
31
cmd/bench/main_test.go
Normal file
31
cmd/bench/main_test.go
Normal file
@ -0,0 +1,31 @@
|
||||
package bench
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func BenchmarkMarsh(b *testing.B) {
|
||||
var (
|
||||
// ncpu = runtime.NumCPU()
|
||||
parallelisms = []int{4, 16, 64}
|
||||
dataSizes = []int{100, 1000, 10000}
|
||||
numKeys = 1024
|
||||
builders = []TargetBuilder{
|
||||
{
|
||||
Name: "测试名1",
|
||||
Make: func(bench Benchmark) (Target, error) {
|
||||
|
||||
return Target{}, nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "测试名2",
|
||||
Make: func(bench Benchmark) (Target, error) {
|
||||
return Target{}, nil
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
RunBenchmark(b, compose(parallelisms, dataSizes, numKeys, builders))
|
||||
}
|
Loading…
Reference in New Issue
Block a user