jstemmer/go-junit-report
GitHub: jstemmer/go-junit-report
将 Go 测试输出转换为 JUnit 兼容 XML 报告的命令行工具,方便与 Jenkins 等 CI/CD 系统集成。
Stars: 823 | Forks: 235
# go-junit-report
go-junit-report 是一个将 [`go test`] 输出转换为 JUnit 兼容的
XML 报告的工具,适合与 [Jenkins] 等应用程序一起使用。
[](https://github.com/jstemmer/go-junit-report/actions)
[](https://pkg.go.dev/github.com/jstemmer/go-junit-report/v2)
[](https://goreportcard.com/report/github.com/jstemmer/go-junit-report/v2)
## 从安装包安装(推荐)
适用于 Windows、macOS 和 Linux 的预编译安装包可以在 [Releases]
页面找到。
## 从源码安装
运行以下命令从源码下载并安装最新的稳定版本:
```
go install github.com/jstemmer/go-junit-report/v2@latest
```
## 使用说明
默认情况下,go-junit-report 会从 `stdin` 读取由标准
库 [testing] 包生成的 `go test -v` 输出,并将 JUnit XML 报告写入到
`stdout`。
同时也支持 Go 构建和运行时错误,但这需要将 `stderr`
也重定向到 go-junit-report。
典型的用法如下:
```
go test -v 2>&1 ./... | go-junit-report -set-exit-code > report.xml
```
### 更多示例
`gojson` 解析器支持由 `go test -json` 生成的 JSON。请注意,
为了检测到构建错误,`stderr` 仍然需要被重定向到 go-junit-report。例如:
```
go test -json 2>&1 | go-junit-report -parser gojson > report.xml
```
同时也支持 Go benchmark 输出。以下示例对
当前目录中的包运行 benchmark,并使用 `-out` 标志将
输出写入到名为 `report.xml` 的文件中。
```
go test -v -bench . -count 5 2>&1 | go-junit-report -out report.xml
```
`-iocopy` 标志会将 `stdin` 直接复制到 `stdout`,如果你
想查看发送给 go-junit-report 的内容,这会很有用。以下示例从
名为 `tests.txt` 的文件中读取测试输入,将输入复制到 `stdout` 并将
输出写入到名为 `report.xml` 的文件中。
```
go-junit-report -in tests.txt -iocopy -out report.xml
```
### 标志
运行 `go-junit-report -help` 以获取所有支持的标志列表。
| 标志 | 描述 |
| -------------------- | ----------- |
| `-in file` | 从 `file` 读取 go test 日志 |
| `-iocopy` | 将输入复制到 stdout;只能与 -out 结合使用 |
| `-no-xml-header` | 不打印 xml 头部 |
| `-out file` | 将 XML 报告写入到 `file` |
| `-package-name name` | 如果输出中不包含包名,则指定一个默认的包名 |
| `-parser parser` | 指定要使用的解析器,可用的解析器有:`gotest` (默认), `gojson` |
| `-p key=value` | 向生成的报告中添加属性;属性应指定为 `key=value` 的形式 |
| `-set-exit-code` | 如果测试失败,则将退出码设置为 1 |
| `-subtest-mode` | 设置子测试 `mode`(模式),可选模式有:`ignore-parent-results`, `exclude-parents` |
| `-version` | 打印版本号并退出 |
## Go 包
测试输出解析器和 JUnit XML 报告生成器也可以作为 Go
包使用。例如,如果你想使用 `go test` 输出解析器或
创建自己的自定义 JUnit 报告,这会很有用。请参阅 pkg.go.dev 上的包文档以获取更多信息:
- [github.com/jstemmer/go-junit-report/v2/parser/gotest]
- [github.com/jstemmer/go-junit-report/v2/junit]
## 更新日志
### v2.1.0
- 修复 #147:使生成的报告中的时间戳更准确。
- 修复 #140:转义 junit 输出中非法的 XML 字符。
- 修复 #145:处理带有 `_test` 后缀的测试包中的构建错误。
- 修复 #145:不要忽略不属于任何包的构建错误。
- 修复 #134:在 `go test` 中使用 `-race` 标志时,JSON 测试输出未被正确解析。
- 添加对 Go1.20 中引入的 `=== NAME` 行的支持。
- junit:向 `testsuite` 添加 File 属性。
- junit:允许存在多个同名的属性。
- junit:添加 `Testsuites.WriteXML` 便捷方法。
### v2.0.0
- 支持解析 `go test -json` 输出。
- 区分构建/运行时错误与测试失败。
- JUnit 报告现在包含所有测试和 benchmark 的输出,以及不属于任何测试的全局输出。
- 在生成的报告中使用完整的 Go 包名,而不仅仅是最后的路径部分。
- 添加对读取跳过/失败的 benchmark 的支持。
- 添加 `-subtest-mode` 标志,以排除或忽略子测试父测试的结果。
- 添加 `-in` 和 `-out` 标志,分别用于指定输入和输出文件。
- 添加 `-iocopy` 标志以将 stdin 直接复制到 stdout。
- 添加 `-prop` 标志以在生成的报告中设置键/值属性。
- 添加 `-parser` 标志,用于在常规 `go test`(默认)和 `go test -json` 解析之间切换。
- JUnit XML 中的输出被写入 `` 标签中,以提高可读性。
- 向 JUnit XML 添加 `hostname`、`timestamp` 和 `id` 属性。
- 提高 benchmark 时间计算的准确性,并更新报告中的格式。
- 不再去除测试输出的前导空格。
- `formatter` 和 `parser` 包已分别被 `junit` 和 `parser/gotest` 包替换。
- 添加对解析超过 64KiB 长度行的支持。
- JUnit 的 errors/failures 属性现在是必填字段。
- 放弃对解析 Go1.13 之前的测试输出的支持。
- 弃用 `-go-version` 标志。
## 贡献
请参阅 [CONTRIBUTING.md]。
标签:EVTX分析, Go, JUnit, Ruby工具, 开发辅助, 日志审计, 测试工具