为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨__羊羊 2023-06-12 15:29:17
我用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.
查看完整描述

4 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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\""


查看完整回答
反对 回复 2023-06-12
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我发现安装gotestsum并在最后得到简洁的摘要是很轻松的。

go install gotest.tools/gotestsum@latest
gotestsum --format testname # Or dots

如果您只关心计数,另一种方法

go test |grep FAIL |wc -l


查看完整回答
反对 回复 2023-06-12
?
达令说

TA贡献1821条经验 获得超6个赞

-json带有标志的更结构化的方法jq可以列出所有失败的测试,如下所示:

go test | jq -r 'select(.Action == "fail") | select(.Test | . != null) | .Test'
  • 选择操作失败的地方

  • 仅为单个测试选择输出并过滤那些没有测试密钥的输出

  • 选择测试名称


查看完整回答
反对 回复 2023-06-12
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

这对我有用:

go test | grep -B 1 -A 11 "Error Trace"


查看完整回答
反对 回复 2023-06-12
  • 4 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信