从项目根目录运行子文件夹基准

时间:2018-11-27 05:34:45

标签: go benchmarking

我有一个项目,该项目的二进制文件的入口点位于./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>一起运行,但是基准测试get的执行就像在./cmd/<my-project>目录中运行一样。 我注意到在“正常测试”中有类似的行为-但这对我来说在任何时候都不是问题。

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

1 个答案:

答案 0 :(得分:3)

因此要运行基准测试

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

但是,您希望控制工作目录,因此实际上您想从其他地方运行它。您正在寻找的是-c标志。它将创建一个二进制文件而不是运行测试。然后,您可以在所需的位置运行二进制文件(并因此运行测试和基准)。

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

注意:编译测试时,标志的前缀为test.