diff --git a/cmd/bench/base.go b/cmd/bench/base.go new file mode 100644 index 000000000..37bd83a3c --- /dev/null +++ b/cmd/bench/base.go @@ -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() + }) + } +} diff --git a/cmd/bench/main_test.go b/cmd/bench/main_test.go new file mode 100644 index 000000000..076576295 --- /dev/null +++ b/cmd/bench/main_test.go @@ -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)) +}