【问题标题】:colorizing golang test run output着色 golang 测试运行输出
【发布时间】:2015-01-30 07:12:13
【问题描述】:

当终端/控制台测试运行实际以红色或绿色文本显示其输出时,我喜欢它。似乎很多可用于 Go 的测试库都有这个。但是,我只想使用 Go 附带的默认测试包。有没有办法用红色和绿色对其输出进行着色?

【问题讨论】:

    标签: testing go


    【解决方案1】:

    您可以使用通用着色器grc 为任何东西着色

    在 Debian/Ubuntu 上,使用 apt-get install grc 安装。在带有 brew install grc 的 Mac 上。

    在你的主目录中创建一个配置目录:

    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 ./..
    

    【讨论】:

    • 很好的答案。像魅力一样工作。
    • 配置中的上述颜色说明符导致grcat 抛出ValueError: Invalid keywordgrcat 需要密钥 colours 代替(请参阅 here
    • 谢谢。看起来像回归。 colour 适用于 grc 1.11.1。
    • mac os上~/.grc/conf.gotest末尾需要一个空行,zsh和grc 1.11.1,否则它正在修剪“青色”的最后一个字符,正在寻找颜色“cya” "
    • 在 mac os 上,使用 zsh 和 grc 1.11.1,我不得不将 grc.conf 移动到 /usr/local/etc/grc.conf (conf.gotest 保持原样)并将其添加到.zshrc[[ -s "/usr/local/etc/grc.zsh" ]] && source /usr/local/etc/grc.zsh
    【解决方案2】:

    您可以为此创建一个包装外壳脚本并使用颜色转义序列对其进行着色。这是 Linux 上的一个简单示例(我不确定这在 Windows 上会是什么样子,但我想有办法.. :))

    go test -v . | sed ''/PASS/s//$(printf "\033[32mPASS\033[0m")/'' | sed ''/FAIL/s//$(printf "\033[31mFAIL\033[0m")/''
    

    【讨论】:

    • 这是一个很好的轻量级解决方案。我没想到只是将输出通过管道传输到 sed。有用。谢谢。
    • 谢谢!我添加了 -cover 参数并将其添加为别名。所以每次我想运行所有测试时我只运行got
    • 请注意,此解决方案会丢失 go test 的退出代码,这反过来意味着如果在某些 CI 环境中使用该命令,那么即使测试失败,构建也不会失败!使用 bash 的一种解决方案是使用 pipefail
    • 如果有人在他们的 Makefile 中使用此命令,请将 $ 替换为 $$ 以使其正常工作。
    【解决方案3】:

    还有一个名为 richgo 的工具以用户友好的方式完成此任务。

    【讨论】:

      【解决方案4】:

      您仍然需要一个库来添加颜色转义代码,例如:

      从那里,您可以指定要着色的内容(StdOut 或 StdErr,例如 in this example

      【讨论】:

      • 目前kortschak/ct不支持Windows。
      • 还有github.com/logrusorgru/aurora 用于Unix 和Win10+,支持Printf/Sprintf 格式。例如fmt.Printf("value %d", Red(3))
      • @IvanBlack 谢谢。我已将您的链接添加到答案以获得更多可见性。
      【解决方案5】:

      rakyll/gotest (screenshot) 是执行此操作的二进制文件。

      例子:

      $ gotest -v github.com/rakyll/hey
      

      【讨论】:

        【解决方案6】:

        BoltDB 有一些如下所示的测试方法:

        func assert(tb testing.TB, condition bool, msg string, v ...interface{}) {
            if !condition {
                _, file, line, _ := runtime.Caller(1)
                fmt.Printf("\033[31m%s:%d: "+msg+"\033[39m\n\n", append([]interface{}{filepath.Base(file), line}, v...)...)
                tb.FailNow()
            }
        }
        

        Here are the rest。我添加了绿点here

        【讨论】:

          【解决方案7】:

          表情符号

          您可以像其他人在他们的答案中提到的那样为文本使用颜色,以获得带有颜色代码或使用第三方库的彩色文本。

          但您可以改用表情符号!例如,您可以将⚠️ 用于警告消息,将? 用于错误消息。

          或者简单地将这些笔记本用作颜色:

          ?: error message
          ?: warning message
          ?: ok status message
          ?: action message
          ?: canceled status message
          ?: Or anything you like and want to recognize immediately by color
          
          

          ? 奖励:

          此方法还可以帮助您直接在源代码中快速扫描和查找日志。

          但是一些 Linux 默认 emoji 字体的发行版默认不是彩色的,你可能想先让它们彩色。

          【讨论】:

          • 如何应用表情符号?我猜是通过配置文件直接输入为表情符号
          猜你喜欢
          • 2019-07-11
          • 2017-07-02
          • 1970-01-01
          • 2018-05-31
          • 1970-01-01
          • 2019-03-17
          • 1970-01-01
          • 1970-01-01
          • 2022-11-03
          相关资源
          最近更新 更多