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] 等应用程序一起使用。 [![Build status](https://github.com/jstemmer/go-junit-report/actions/workflows/main.yml/badge.svg)](https://github.com/jstemmer/go-junit-report/actions) [![Go Reference](https://pkg.go.dev/badge/github.com/jstemmer/go-junit-report/v2.svg)](https://pkg.go.dev/github.com/jstemmer/go-junit-report/v2) [![Go Report Card](https://goreportcard.com/badge/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工具, 开发辅助, 日志审计, 测试工具