运行 项目根目录中子文件夹的基准测试
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.go
或 go 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.go
和 main_test.go
),而基准测试不在其中真的很有帮助。
因此 运行 基准:
go test -bench=. ./cmd/<my-project>
但是,您想要控制工作目录,所以您真的想从其他地方 运行 它。您正在寻找的是 -c
标志。它将创建一个二进制文件而不是 运行ning 测试。然后你可以 运行 你想要的二进制文件(以及你的测试和基准)。
go test -c ./cmd/my_proj
my_proj.test -test.bench=.
注意:编译测试时,标志带有前缀 test.
。
我有一个带有二进制文件的项目,其入口点位于 ./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.go
或 go 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.go
和 main_test.go
),而基准测试不在其中真的很有帮助。
因此 运行 基准:
go test -bench=. ./cmd/<my-project>
但是,您想要控制工作目录,所以您真的想从其他地方 运行 它。您正在寻找的是 -c
标志。它将创建一个二进制文件而不是 运行ning 测试。然后你可以 运行 你想要的二进制文件(以及你的测试和基准)。
go test -c ./cmd/my_proj
my_proj.test -test.bench=.
注意:编译测试时,标志带有前缀 test.
。