如何轻松找出哪些测试失败

我用go test ./... -v -short.

不幸的是,-v它只打印出每个测试,但不会像 Java 那样在底部留下结果摘要。这意味着如果顶部某处有任何测试失败,我必须向上滚动并查找该词FAIL或在文本编辑器中搜索它。

-failfast标志也无济于事,因为出于某种原因,我的一些测试在第一次测试失败后仍会打印出来。

我真的不在乎测试是否在初始测试失败后运行。我只想能够轻松判断是否有任何测试失败,最好只在一个地方(例如,有多少测试通过或失败的摘要,或者通过查看所有测试是否通过的标志)。

有没有一种方法可以轻松判断是否存在测试失败,因为如果我仍然有测试失败,我不想不小心继续编码。

我在 Windows 10 64 位上。

后来我意识到我还想看到错误描述以及测试失败,但不想运行go test两次。这是我为 CMD 想出的(不适用于 Powershell):

go test ./... -v -short > test-results.txt & findstr "FAIL _test" test-results.txt

现在findstr应该报告测试失败以及错误描述。如果您想查看完整的测试结果,只需打开test-results.txt.


杨__羊羊
浏览 187回答 4
4回答

慕尼黑5688855

FAIL失败的测试在输出中用指示。所以你所要做的就是过滤那个词的输出。在 Unix 系统上:go test ./... |grep FAIL在 Windows 上:go test ./... |findstr FAIL请注意,这是纯文本处理,它对 go 测试及其结果一无所知。FAIL这意味着即使测试成功,如果测试输出该词,您也可能会得到“误报” 。但实际上,这几乎可以完成您想要的工作。实现此目的的一种更复杂、更准确的方法是将-json标志传递给go test,因此它会生成 JSON 输出,您可以使用程序(例如,用 Go 本身编写)对其进行处理。失败的测试用具有字段的 JSON 对象指示"Action":"fail",例如{"Time":"2019-03-01T12:06:21.108544405+01:00","Action":"fail", "Package":"some/package","Test":"TestSomething","Elapsed":0.01}即使您不想为此编写程序,过滤 JSON 输出也会减少误报的可能性(过滤"Action":"fail"):Unix:go test ./... -json |grep '"Action":"fail"'视窗:go test ./... -json |findstr /C:"\"Action\":\"fail\""

尚方宝剑之说

我发现安装gotestsum并在最后得到简洁的摘要是很轻松的。go install gotest.tools/gotestsum@latest gotestsum --format testname # Or dots如果您只关心计数,另一种方法是:go test |grep FAIL |wc -l

达令说

-json带有标志的更结构化的方法jq可以列出所有失败的测试,如下所示:go test | jq -r 'select(.Action == "fail") | select(.Test | . != null) | .Test'选择操作失败的地方仅为单个测试选择输出并过滤那些没有测试密钥的输出选择测试名称

慕婉清6462132

这对我有用:go test | grep -B 1 -A 11 "Error Trace"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go