Go 在执行并行表测试用例时,如何延迟测试服务器关闭?

Go 在执行并行表测试用例时,如何延迟测试服务器关闭?,go,testing,synchronization,Go,Testing,Synchronization,在执行并行表测试函数时,延迟关闭测试http服务器遇到问题。我正在尝试使用一个sync.WaitGroup等待,但是wg.Done()要么关闭得太早,要么从未发生过 ts:=httptest.NewServer(http.HandlerFunc(func)(w http.ResponseWriter,r*http.Request){ w、 WriteHeader(http.StatusOK) _,uw=w.Write([]字节(`hello`)) })) 延迟ts关闭() var wg sync

在执行并行表测试函数时,延迟关闭测试http服务器遇到问题。我正在尝试使用一个
sync.WaitGroup
等待,但是
wg.Done()
要么关闭得太早,要么从未发生过

ts:=httptest.NewServer(http.HandlerFunc(func)(w http.ResponseWriter,r*http.Request){
w、 WriteHeader(http.StatusOK)
_,uw=w.Write([]字节(`hello`))
}))
延迟ts关闭()
var wg sync.WaitGroup
对于u,tc:=范围测试用例{
工作组.添加(1)
func(tc测试用例){
//这里的'Done'不会等待测试运行,因此会提前关闭测试服务器
//推迟工作组完成()
t、 运行(tc.name,func(t*testing.t){
//此处从未调用'Done',因此会导致超时
//推迟工作组完成()
t、 平行()
_,err:=http.Get(ts.URL)
如果错误!=零{
t、 致命错误(err.Error())
}
})
}(tc)
}
wg.Wait()

有关可运行示例,请参见这很可能是因为
t.Run()
在其主体内使用
t.Parallel()
时不会阻塞。将
t.Parallel()
测试用例包装到非并行组中应该可以解决这个问题:

。。。
var wg sync.WaitGroup
对于Utc:=范围测试用例{
工作组.添加(1)
func(tc测试用例){
推迟工作组完成()
t、 运行(“mygroup”,func(t*testing.t){
t、 运行(tc.name,func(t*testing.t){
t、 平行()
_,err:=http.Get(ts.URL)
如果错误!=nil{
t、 致命错误(err.Error())
}                                                                                                                                                                                                             
})                                                                                                                                                                                                            
})                                                                                                                                                                                                            
}(tc)
}
wg.Wait()
...

编辑:我在Golang repo发行版中发现了这一参考,它提出了相同的建议:

这很可能是因为
t.Run()
不会阻止在其主体内部使用
t.Parallel()
。将
t.Parallel()
测试用例包装到非并行组中应该可以解决这个问题:

。。。
var wg sync.WaitGroup
对于Utc:=范围测试用例{
工作组.添加(1)
func(tc测试用例){
推迟工作组完成()
t、 运行(“mygroup”,func(t*testing.t){
t、 运行(tc.name,func(t*testing.t){
t、 平行()
_,err:=http.Get(ts.URL)
如果错误!=零{