gpt4 book ai didi

testing - Golang Benchmark 表测试,我可以从b.Run()中提取func吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:33 25 4
gpt4 key购买 nike

在 golang 中进行基准示例测试后,我可以进行以下测试:

// An example benchmark to benchmark a query based on different inputs
func Benchmark_GetProcessingCountForRegions(b *testing.B) {

benchmarks := []struct {
region string
}{
{"EU"},
{"US"},
}

for _, bm := range benchmarks {
b.Run(bm.region, func(bbb *testing.B) {
for i := 0; i < bbb.N; i++ {
taskDb.GetProcessingCountForRegion(bm.region)
}
})

}
}

这是网络上的默认示例,适用于我;测试 taskDb 包在 GetProcessingCountForRegion 查询上的性能。

然而,为了这个测试的可读性,我试图提取内部函数,即位于 b.Run() 内部的函数,像这样,首先提取函数并将其放在一边:

func GetProcessingCountForRegion(testingB *testing.B, region string) {
for i := 0; i < testingB.N; i++ {
taskDb.GetProcessingCountForRegion(region)
}
}

然后像这样在实际的 testfunc 中使用这个函数:

for _, bm := range benchmarks {
b.Run(bm.region, GetProcessingCountForRegion(*b, bm.region))
}

然而,这会产生一个编译错误:不能在 GetProcessingCountForRegion 的参数中使用 *b(类型 testing.B)作为类型 *testing.B

从 *b 中删除 *,会出现以下编译错误:GetProcessingCountForRegion(b, bm.region) 用作值

所以我想要的是从 B.Run(..) 语句中删除 func 参数。

我错过了什么?

最佳答案

例如,

bench_test.go:

package main

import "testing"

func GetProcessingCountForRegion(region string) int {
return 42
}

func benchmarkGetProcessingCountForRegion(b *testing.B, region string) {
for i := 0; i < b.N; i++ {
GetProcessingCountForRegion(region)
}
}

func BenchmarkGetProcessingCountForRegions(b *testing.B) {
benchmarks := []struct {
region string
}{
{"EU"},
{"US"},
}

for _, bm := range benchmarks {
b.Run(bm.region,
func(b *testing.B) {
benchmarkGetProcessingCountForRegion(b, bm.region)
},
)
}
}

输出:

$ go test -bench=.
BenchmarkGetProcessingCountForRegions/EU-4 2000000000 1.17 ns/op
BenchmarkGetProcessingCountForRegions/US-4 2000000000 1.17 ns/op

关于testing - Golang Benchmark 表测试,我可以从b.Run()中提取func吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47475905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com