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

Go 从项目根目录运行子文件夹的基准测试,go,benchmarking,Go,Benchmarking,我有一个带有二进制文件的项目,其入口点位于/cmd//main.go。 我在/cmd//main\u test.go中添加了一个基准测试 现在我想从存储库根目录执行这个基准测试。 我尝试过以各种方式执行类似于go test-bench=./cmd//main的操作(例如go test-bench=./cmd//main\u test.go或go test-bench=./cmd/),但我无法让它工作 我经常遇到的错误是: 无法在/home//Go/src/github.com///code> 这

我有一个带有二进制文件的项目,其入口点位于
/cmd//main.go
。 我在
/cmd//main\u test.go
中添加了一个基准测试

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

我经常遇到的错误是:

无法在/home//Go/src/github.com///code>

这是真的,我的项目根目录中没有
*.go
文件

我想到的只是先切换到目录中,然后用'go test-bench='运行基准测试

但是,由于我的程序依赖于当前的工作目录,并且结果很大程度上取决于是否能够在
cmd/
目录之外的另一个目录中执行它。(如果这不是问题的一部分:))

第一条评论后更新:

我让它运行
go test-bench=/cmd/
但是基准get的执行就像它将在
/cmd/
目录中运行一样。 我注意到在“正常测试”中也有类似的行为——但这在任何时候对我来说都不是问题


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

因此要运行基准测试:

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

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

它是可执行的,但它执行基准测试时就像我在该目录中一样。因此,我的程序扫描当前工作目录中的文件/目录,只在
/cmd/
中找到两个文件(
main.go
main\u test.go
),而不是项目根目录中的所有文件。谢谢,它正在工作,但只运行了一次,而不是
n
次。因此,这就像编译后运行二进制文件一样。对于n:=0,我的func如下所示:
;n
(当然,实际代码中没有一行)您可以发布更多代码吗?听起来有点搞笑,我很困惑,我做错了什么。就像你说的那样。啊,很高兴听到。
go test -c ./cmd/my_proj
my_proj.test -test.bench=.