我有一个项目,该项目的二进制文件的入口点位于./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>
一起运行,但是基准测试get的执行就像在./cmd/<my-project>
目录中运行一样。
我注意到在“正常测试”中有类似的行为-但这对我来说在任何时候都不是问题。
因此,我的程序确实根据当前工作目录扫描当前目录中的文件目录,这只会导致找到两个文件(main.go
和main_test.go
),其中基准测试并没有真正帮助
答案 0 :(得分:3)
因此要运行基准测试
go test -bench=. ./cmd/<my-project>
但是,您希望控制工作目录,因此实际上您想从其他地方运行它。您正在寻找的是-c
标志。它将创建一个二进制文件而不是运行测试。然后,您可以在所需的位置运行二进制文件(并因此运行测试和基准)。
go test -c ./cmd/my_proj
my_proj.test -test.bench=.
注意:编译测试时,标志的前缀为test.
。