如果go test是跑它运行在您的文件结尾_test.go通过运行启动格式的功能TestXxx和使用(* T testing.T)模块。我想知道_test.go文件中的每个功能是同时运行还是确定地分别运行每个功能?是否为每个人创建一个执行例程?如果确实为每个例程创建了一个go例程,是否可以某种方式监视go例程?是否有可能做类似的事情golibrary.GoRoutines()并为每个实例获取一个实例并对其进行监控,诸如此类?
go test
_test.go
TestXxx
golibrary.GoRoutines()
注意:这个问题假设您使用go(测试)随附的测试框架。
是的 ,测试作为goroutines执行,因此可以 同时 执行。
但是, 默认情况下 ,@ jacobsa指出,测试 不会并行运行 。要启用并行执行,您必须调用t.Parallel()测试用例并进行GOMAXPROCS适当设置或提供-parallel N。
t.Parallel()
GOMAXPROCS
-parallel N
并行运行测试时,最简单的解决方案是为端口号提供一个全局切片,并为该切片中的测试和端口之间的关联提供一个全局的原子增量索引。这样,您可以控制端口号,并且每个测试都有一个端口。例:
import "sync/atomic" var ports [...]uint64 = {10, 5, 55} var portIndex uint32 func nextPort() uint32 { return atomic.AddUint32(&portIndex, 1) }