英文:
colorizing golang test run output
问题
我喜欢在终端/控制台测试运行时,实际上以红色或绿色文本显示输出。似乎很多可用于Go的测试库都有这个功能。然而,我想只使用Go自带的默认测试包。有没有办法将其输出着色为红色和绿色?
英文:
I like it when terminal/console test runs actually show their output in either red or green text. It seems like a lot of the testing libraries available for Go have this. However, I'd like to just use the default testing package that comes with Go. Is there a way to colorize it's output with red and green?
答案1
得分: 94
你可以使用 grc,一个通用的着色工具,来给任何东西着色。
在 Debian/Ubuntu 上,使用 apt-get install grc
命令进行安装。在 Mac 上,使用 brew install grc
命令进行安装。
在你的主目录下创建一个配置目录:
mkdir ~/.grc
然后在 ~/.grc/grc.conf
中创建你的个人 grc 配置:
# Go
\bgo.* test\b
conf.gotest
然后在 ~/.grc/conf.gotest
中创建一个 Go 测试的着色配置,例如:
regexp==== RUN .*
colour=blue
-
regexp=--- PASS: .*
colour=green
-
regexp=^PASS$
colour=green
-
regexp=^(ok|\?) .*
colour=magenta
-
regexp=--- FAIL: .*
colour=red
-
regexp=[^\s]+\.go(:\d+)?
colour=cyan
现在你可以使用以下命令运行 Go 测试:
grc go test -v ./..
示例输出:
为了避免每次都输入 grc
,你可以在你的 shell 中添加一个别名(如果使用 Bash,可以在 ~/.bashrc
或 ~/.bash_profile
中添加,具体取决于你的操作系统):
alias go=grc go
现在你只需运行以下命令即可获得着色效果:
go test -v ./..
英文:
You can use grc, a generic colourizer, to colourize anything.
On Debian/Ubuntu, install with apt-get install grc
. On a Mac with , brew install grc
.
Create a config directory in your home directory:
mkdir ~/.grc
Then create your personal grc config in ~/.grc/grc.conf
:
# Go
\bgo.* test\b
conf.gotest
Then create a Go test colourization config in ~/.grc/conf.gotest
, such as:
regexp==== RUN .*
colour=blue
-
regexp=--- PASS: .*
colour=green
-
regexp=^PASS$
colour=green
-
regexp=^(ok|\?) .*
colour=magenta
-
regexp=--- FAIL: .*
colour=red
-
regexp=[^\s]+\.go(:\d+)?
colour=cyan
Now you can run Go tests with:
grc go test -v ./..
Sample output:
To avoid typing grc
all the time, add an alias to your shell (if using Bash, either ~/.bashrc
or ~/.bash_profile
or both, depending on your OS):
alias go=grc go
Now you get colourization simply by running:
go test -v ./..
答案2
得分: 75
你可以创建一个包装的shell脚本,并使用颜色转义序列进行着色。这里是一个在Linux上的简单示例(我不确定在Windows上会是什么样子,但我猜应该有一种方法.. :))
go test -v . | sed '/PASS/s/$(printf "3[32mPASS3[0m")/' | sed '/FAIL/s/$(printf "3[31mFAIL3[0m")/'
英文:
You can create a wrapper shell script for this and color it using color escape sequence. Here's a simple example on Linux (I'm not sure how this would look on windows, but I guess there is a way.. )
go test -v . | sed ''/PASS/s//$(printf "3[32mPASS3[0m")/'' | sed ''/FAIL/s//$(printf "3[31mFAIL3[0m")/''
答案3
得分: 24
这里还有一个名为richgo的工具,以用户友好的方式实现了这一功能。
答案4
得分: 4
你仍然需要一个库来添加颜色转义代码,例如:
- 对于Windows:
mattn/go-colorable
或shiena/ansicolor
- 对于Unix或Windows:
fatih/color
或kortschak/ct
- 对于Unix或Windows:
logrusorgru/aurora
(在评论中由Ivan Black提到)
从那里,你可以指定你想要着色的内容(如此示例中的StdOut或StdErr)
英文:
You would still need a library to add color escape code like:
- for Windows:
mattn/go-colorable
orshiena/ansicolor
- for Unix or Windows:
fatih/color
orkortschak/ct
- for Unix or Windows:
logrusorgru/aurora
(mentioned by Ivan Black in the comments)
From there, you specify what you want to color (StdOut or StdErr, like in this example)
答案5
得分: 4
rakyll/gotest(截图)是一个可以执行此操作的二进制文件。
示例:
$ gotest -v github.com/rakyll/hey
英文:
rakyll/gotest (screenshot) is a binary that does this.
Example:
$ gotest -v github.com/rakyll/hey
答案6
得分: 3
BoltDB有一些测试方法,看起来像这样:
func assert(tb testing.TB, condition bool, msg string, v ...interface{}) {
if !condition {
_, file, line, _ := runtime.Caller(1)
fmt.Printf("3[31m%s:%d: "+msg+"3[39m\n\n", append([]interface{}{filepath.Base(file), line}, v...)...)
tb.FailNow()
}
}
英文:
BoltDB has some test methods that look like this:
func assert(tb testing.TB, condition bool, msg string, v ...interface{}) {
if !condition {
_, file, line, _ := runtime.Caller(1)
fmt.Printf("3[31m%s:%d: "+msg+"3[39m\n\n", append([]interface{}{filepath.Base(file), line}, v...)...)
tb.FailNow()
}
}
Here are the rest. I added the green dots here.
答案7
得分: 3
表情符号
你可以像其他人在他们的答案中提到的那样使用颜色来为文本添加颜色,可以使用颜色代码或使用第三方库。
但是你也可以使用表情符号!例如,你可以使用⚠️
表示警告消息,使用🛑
表示错误消息。
或者简单地使用这些表情符号作为颜色的替代:
📕:错误消息
📙:警告消息
📗:正常状态消息
📘:操作消息
📓:取消状态消息
📔:或者任何你喜欢并希望通过颜色立即识别的内容
🎁 奖励:
这种方法还可以帮助你快速扫描并直接在源代码中找到日志。
<sub>但是,某些Linux发行版的默认表情符号字体默认情况下不是彩色的,你可能希望先将它们变成彩色。</sub>
英文:
Emoji
You can use colors for text as others mentioned in their answers to have colorful text with a color code or using a third-party library.
But you can use emojis instead! for example, you can use⚠️
for warning messages and 🛑
for error messages.
Or simply use these notebooks as a color:
📕: error message
📙: warning message
📗: ok status message
📘: action message
📓: canceled status message
📔: Or anything you like and want to recognize immediately by color
🎁 Bonus:
This method also helps you to quickly scan and find logs directly in the source code.
<sub>But some distributions of Linux default emoji font are not colorful by default and you may want to make them colorful, first.</sub>
答案8
得分: 0
根据Alexander Staubo的回答建议,可以使用grc来获取带有颜色的输出。
在Linux上,配置文件存储在**/etc/grc.conf**<br>
相反,我们可以使用标志-c:grc -c .grc/conf.gotest go test ….<br>
因此,我们只需要conf.gotest文件。
英文:
As suggested from Alexander Staubo's answer, one can use grc for getting colorized output.
On linux the config file is stored in /etc/grc.conf<br>
Instead we can use the flag -c: grc -c .grc/conf.gotest go test ….<br>
So we only need the conf.gotest file.
答案9
得分: 0
我喜欢使用awk脚本来实现这个功能。这样,你可以根据自己的喜好自定义颜色和模式。你有一个特定于项目的测试输出,想要用特定的颜色突出显示吗?可以试试这个方法。
只需将以下awk脚本保存到项目的./bin/colorize
文件中,然后运行chmod 755 ./bin/colorize
,并根据需要进行自定义:
#!/usr/bin/awk -f
# colorize - 为go test输出添加颜色
# 用法:
# go test ./... | ./bin/colorize
#
BEGIN {
RED="3[31m"
GREEN="3[32m"
CYAN="3[36m"
BRRED="3[91m"
BRGREEN="3[92m"
BRCYAN="3[96m"
NORMAL="3[0m"
}
{ color=NORMAL }
/^ok / { color=BRGREEN }
/^FAIL/ { color=BRRED }
/^SKIP/ { color=BRCYAN }
/PASS:/ { color=GREEN }
/FAIL:/ { color=RED }
/SKIP:/ { color=CYAN }
{ print color $0 NORMAL }
# vi: ft=awk
然后运行测试并将输出通过管道传递给colorize
:
go test ./... | ./bin/colorize
我发现这种方法比使用sed
命令更容易阅读和自定义,而且比使用grc
等外部工具更轻量简单。
英文:
I like piping to an awk script for this. That way, you can customize with whatever colors/patterns suit you. You have a particular test output unique to your project you want to highlight with a certain color? Go for it.
Simply save this awk script to ./bin/colorize
in your project, chmod 755 ./bin/colorize
, and customize to your needs:
#!/usr/bin/awk -f
# colorize - add color to go test output
# usage:
# go test ./... | ./bin/colorize
#
BEGIN {
RED="\033[31m"
GREEN="\033[32m"
CYAN="\033[36m"
BRRED="\033[91m"
BRGREEN="\033[92m"
BRCYAN="\033[96m"
NORMAL="\033[0m"
}
{ color=NORMAL }
/^ok / { color=BRGREEN }
/^FAIL/ { color=BRRED }
/^SKIP/ { color=BRCYAN }
/PASS:/ { color=GREEN }
/FAIL:/ { color=RED }
/SKIP:/ { color=CYAN }
{ print color $0 NORMAL }
# vi: ft=awk
And then call your tests and pipe to colorize
with:
go test ./... | ./bin/colorize
I find this method much easier to read and customize than the sed
answers, and much more lightweight and simple than some external tool like grc
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论