go 测试:测试一组软件包会阻塞实时输出

5lwkijsr  于 8个月前  发布在  Go
关注(0)|答案(3)|浏览(218)

你正在使用哪个版本的Go( go version )?

go version go1.11 darwin/amd64

这个问题在最新版本中是否重现?

是的,在提示- go version devel +ce58a39fca Thu Sep 20 22:52:44 2018 +0000 darwin/amd64 上重现。

你正在使用什么操作系统和处理器架构( go env )?

  1. GOARCH="amd64"
  2. GOBIN=""
  3. GOCACHE="/Users/ikorolev/Library/Caches/go-build"
  4. GOEXE=""
  5. GOFLAGS=""
  6. GOHOSTARCH="amd64"
  7. GOHOSTOS="darwin"
  8. GOOS="darwin"
  9. GOPATH="/Users/ikorolev/.gvm/pkgsets/go1.11/global:/Users/ikorolev/dev/go"
  10. GOPROXY=""
  11. GORACE=""
  12. GOROOT="/Users/ikorolev/.gvm/gos/go1.11"
  13. GOTMPDIR=""
  14. GOTOOLDIR="/Users/ikorolev/.gvm/gos/go1.11/pkg/tool/darwin_amd64"
  15. GCCGO="gccgo"
  16. CC="clang"
  17. CXX="clang++"
  18. CGO_ENABLED="1"
  19. GOMOD=""
  20. CGO_CFLAGS="-g -O2"
  21. CGO_CPPFLAGS=""
  22. CGO_CXXFLAGS="-g -O2"
  23. CGO_FFLAGS="-g -O2"
  24. CGO_LDFLAGS="-g -O2"
  25. PKG_CONFIG="pkg-config"
  26. GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/_b/d1934m9s587_8t_6ngv3hnc00000gp/T/go-build880489854=/tmp/go-build -gno-record-gcc-switches -fno-common"

你做了什么?

go test -v -count=1 ./... ,如果你有子包,它不会实时打印测试输出。

  1. cd `mktemp -d`
  2. go mod init example.com/test
  3. cat <<EOD > main_test.go
  4. package main
  5. import (
  6. "fmt"
  7. "testing"
  8. "time"
  9. )
  10. func TestLong(t *testing.T) {
  11. fmt.Println("running")
  12. time.Sleep(2 * time.Second)
  13. fmt.Println("2 second later")
  14. }
  15. EOD
  16. mkdir subpkg
  17. cat <<EOD > subpkg/main_test.go
  18. package subpkg
  19. EOD
  20. go test -v -count=1 ./...

你期望看到什么?

我期望看到测试运行时逐步输出结果。
如果运行 go test -v -count=1 . ,我会看到它。

你看到了什么?

使用 ./... 并不会产生实时输出。
只有在所有测试完成后才会产生输出。
当你在CI上运行测试时,如果只看到 "go test -v ./..." 这一行几分钟,这并不方便。
你完全不知道测试是否卡在了某个地方,或者它们只是太慢了。
我知道这种行为可能与并行运行测试有关,但我们能做些什么吗?

tv6aics1

tv6aics11#

@gopherbot please, add label Testing.

myss37ts

myss37ts2#

#24929 相关。

6g8kf2rb

6g8kf2rb3#

一个禁用stdout缓冲区的标志可能会有所帮助。或者,至少要记录-p(和-count ?)标志对输出缓冲的影响。

需要注意的是,这个bug与#24929并不完全相同,因为它影响了所有的stdout,而不仅仅是t.Log的使用(也许底层机制是相同的,我不知道)。

我们也关心stdout,因为在TestMain中进行了大量的初始化,而t.Log不可用,我们希望看到进度消息的发生。

相关问题