运行 项目根目录中子文件夹的基准测试

Running benchmarks of subfolders from the project root

我有一个带有二进制文件的项目,其入口点位于 ./cmd/<my-project>/main.go。 我在 ./cmd/<my-project>/main_test.go.

中添加了一个基准

现在我想从存储库根目录执行这个基准测试。 我尝试以各种交替方式执行类似 go test -bench=./cmd/<my-project>/main 的操作(例如 go test -bench=./cmd/<my-project>/main_test.gogo test -bench=./cmd/<my-project>),但我无法让它工作。

我总是得到的错误是:

can't load package: package github.com/<username>/<my-project>: no Go files in /home/<user>/go/src/github.com/<username>/<my-project>

确实如此,我的项目根目录中没有 *.go 个文件。

我想到的只是先进入目录,然后 运行 使用 `go test -bench=.

进行基准测试

但是,由于我的程序依赖于当前工作目录,而且结果在很大程度上取决于能够在 cmd/<my-project> 目录之外的另一个目录中执行它会很棒。 (好不好不是问题的一部分:))

第一条评论后更新:

我使用 go test -bench=. /cmd/<my-project> 将其设置为 运行,但基准测试的执行就像在 ./cmd/<my-project> 目录中的 运行 一样。 我在 'normal tests' 中注意到了类似的行为 - 但这对我来说在任何时候都不是问题。

因此,我的程序会根据当前工作目录扫描当前目录中的文件目录,这会导致只找到两个文件(main.gomain_test.go),而基准测试不在其中真的很有帮助。

因此 运行 基准:

go test -bench=. ./cmd/<my-project>

但是,您想要控制工作目录,所以您真的想从其他地方 运行 它。您正在寻找的是 -c 标志。它将创建一个二进制文件而不是 运行ning 测试。然后你可以 运行 你想要的二进制文件(以及你的测试和基准)。

go test -c ./cmd/my_proj
my_proj.test -test.bench=.

注意:编译测试时,标志带有前缀 test.