richgo
Rich-Go 将通过文本装饰来丰富 go test
的输出
注意(关于 richgo
的看法)
几年来,我一直没有使用 richgo
。
现在我觉得对测试输出的外观稍作调整并没有太大效果。
而且 richgo
解析和调整 go test
标准输出的方法也不太好。
所以现在我建议你不要使用 richgo
,而是习惯使用原生的 go test
,培养从输出中发现错误的能力,如果需要的话,为改进官方的 go test
做出贡献。
有些人可能认为我对原生 Go 太过迷信,但这是我真实的感受。
如果你想寻找这个工具的替代品,可以在 issue #57 中找到一些好的建议。
安装
(go get):
go get -u github.com/kyoh86/richgo
(homebrew):
brew install kyoh86/tap/richgo
(asdf):
asdf plugin add richgo
asdf install richgo 0.3.6
使用方法
基本用法
richgo test ./...
在现有的管道中使用
如果你的构建脚本需要与 go test
的标准输出格式交互(例如,如果你正在使用 go-junit-report),你需要使用 richgo
的 testfilter
子命令。
例如:
go test ./... | tee >(richgo testfilter) | go-junit-report
这将把标准 go test
运行的输出通过 "tee" 命令同时传送给 richgo testfilter
进程和 go-junit-report
。
注意,这个建议可能会在将来发生变化,因为 "go test" 工具可能会学会生成一种标准输出格式 golang/go#2981,这种格式可以被本工具和其他工具共同使用。
别名
你可以定义别名,使 go test
输出富文本:
- bash:
~/.bashrc
- zsh:
~/.zshrc
alias go=richgo
配置
配置文件路径
可以通过偏好文件更改样式。 Rich-Go 按以下顺序加载偏好设置:
${CWD}/.richstyle
${CWD}/.richstyle.yaml
${CWD}/.richstyle.yml
${GOPATH}/.richstyle
${GOPATH}/.richstyle.yaml
${GOPATH}/.richstyle.yml
${GOROOT}/.richstyle
${GOROOT}/.richstyle.yaml
${GOROOT}/.richstyle.yml
${HOME}/.richstyle
${HOME}/.richstyle.yaml
${HOME}/.richstyle.yml
将环境变量 RICHGO_LOCAL
设置为 1,Rich-Go 将只加载 ${CWD}/.richstyle*
。
配置文件格式
目前 Rich-Go 仅支持 YAML 格式。
# 标注每行类型的标签类型
labelType: (long | short | none)
# "Build" 行的样式
buildStyle:
# 隐藏行
hide: (true | false)
# 粗体或增加强度
bold: (true | false)
faint: (true | false)
italic: (true | false)
underline: (true | false)
blinkSlow: (true | false)
blinkRapid: (true | false)
# 交换前景色和背景色
inverse: (true | false)
conceal: (true | false)
crossOut: (true | false)
frame: (true | false)
encircle: (true | false)
overline: (true | false)
# 文本前景色
foreground: ("#xxxxxx" | rgb(0-256,0-256,0-256) | rgb(0x00-0xFF,0x00-0xFF,0x00-0xFF) | (颜色名称))
# 文本背景色
background: # 格式同 `foreground`
# "Start" 行的样式
startStyle:
# 格式同 `buildStyle`
# "Pass" 行的样式
passStyle:
# 格式同 `buildStyle`
# "Fail" 行的样式
failStyle:
# 格式同 `buildStyle`
# "Skip" 行的样式
skipStyle:
# 格式同 `buildStyle`
# "File" 行的样式
fileStyle:
# 格式同 `buildStyle`
# "Line" 行的样式
lineStyle:
# 格式同 `buildStyle`
# "Pass" 包行的样式
passPackageStyle:
# 格式同 `buildStyle`
# "Fail" 包行的样式
failPackageStyle:
# 格式同 `buildStyle`
# 覆盖率阈值
coverThreshold: (0-100)
# 覆盖率高于阈值的 "Cover" 行样式
coveredStyle:
# 格式同 `buildStyle`
# 覆盖率低于阈值的 "Cover" 行样式
uncoveredStyle:
# 格式同 `buildStyle`
# 如果想删除行,请写入正则表达式
removals:
- (regexp)
# 如果想保留 `Test` 前缀,请设置为 "true"
leaveTestPrefix: (true | false)
行分类
Rich-Go 将输出行分为以下几类:
-
Build:
当 Go 构建失败时,它会打印如下错误:# github.com/kyoh86/richgo/sample/buildfail sample/buildfail/buildfail_test.go:6: t.Foo undefined (type testing.T has no field or method Foo)
-
Start:
在测试开始时,Go 会打印如下名称:
=== RUN TestSampleOK/SubtestOK
-
通过: 当测试成功时,Go会这样打印名称:
---PASS: TestSampleOK/SubtestOK
-
失败: 当测试失败时,Go会这样打印名称:
--- FAIL: TestSampleNG (0.00s) sample_ng_test.go:9: It's not OK... :(
-
跳过: 如果目录中没有测试文件或测试被跳过,Go会这样打印路径或名称:
--- SKIP: TestSampleSkip (0.00s) sample_skip_test.go:6:
? github.com/kyoh86/richgo/sample/notest [no test files]
-
包通过: 当包中的测试全部成功时,Go只会打印:
PASS
-
失败: 当包中有测试失败时,Go只会打印:
FAIL
-
覆盖率: 如果启用了覆盖率分析,Go会这样打印覆盖率:
=== RUN TestCover05
--- PASS: TestCover05 (0.00s)
PASS
coverage: 50.0% of statements
ok github.com/kyoh86/richgo/sample/cover05 0.012s coverage: 50.0% of statements
每个类别可以单独设置样式。
标签类型
-
长:
- 构建:"BUILD"
- 开始:"START"
- 通过:"PASS"
- 失败:"FAIL"
- 跳过:"SKIP"
- 覆盖率:"COVER"
-
短:
- 构建:"!!"
- 开始:">"
- 通过:"o"
- 失败:"x"
- 跳过:"-"
- 覆盖率:"%"
-
无: Rich-Go 不会输出任何标签。
默认配置
labelType: long
buildStyle:
bold: true
foreground: yellow
startStyle:
foreground: lightBlack
passStyle:
foreground: green
failStyle:
bold: true
foreground: red
skipStyle:
foreground: lightBlack
passPackageStyle:
foreground: green
hide: true
failPackageStyle:
bold: true
foreground: red
hide: true
coverThreshold: 50
coveredStyle:
foreground: green
uncoveredStyle:
bold: true
foreground: yellow
fileStyle:
foreground: cyan
lineStyle:
foreground: magenta
覆盖颜色检测
默认情况下,richgo
根据是否连接到 TTY 来决定是否对输出进行着色。这适用于大多数情况,但如果在命令管道中使用 richgo
,其中 STDOUT 被传递给另一个命令时,可能会出现意外行为。
要强制着色,请在运行环境中添加 RICHGO_FORCE_COLOR=1
。例如:
RICHGO_FORCE_COLOR=1 richgo test ./... | tee test.log
配置以解决与"Solarized dark"主题的冲突
亮黑色在 Solarized dark 主题中用作背景色。Richgo 使用该颜色作为 "startStyle" 和 "skipStyle",因此在 Solarized dark 主题下,"START" 和 "SKIP" 行可能无法在屏幕上看到。
要解决这个冲突,你可以在 .richstyle 中为 "startStyle" 和 "skipStyle" 设置另一种颜色,如下所示:
startStyle:
foreground: yellow
skipStyle:
foreground: lightYellow
获取 richgo 的版本
如果你想获取 richgo
的版本,这些信息已嵌入二进制文件中(自 Go 1.18 起)。
你可以使用 go version -m 查看,例如 richgo 0.3.10:
$ go version -m $(command -v richgo)
./richgo: go1.18
path github.com/kyoh86/richgo
mod github.com/kyoh86/richgo v0.3.10 h1:iSGvcjhtQN2IVrBDhPk0if0R/RMQnCN1E/9OyAW4UUs=
[...]
还有一种更高级的方法(使用 POSIX awk
):
$ go version -m $(command -v richgo) | awk '$1 == "mod" && $2 == "github.com/kyoh86/richgo" {print $3;}'
v0.3.10
许可证
本项目在 MIT 许可证 下分发。