14 个版本
0.2.7 | 2024 年 5 月 4 日 |
---|---|
0.2.6 | 2024 年 3 月 3 日 |
0.2.5 | 2024 年 2 月 3 日 |
0.2.4 | 2024 年 1 月 27 日 |
0.1.0 | 2023 年 8 月 20 日 |
#133 in 测试
27KB
274 行
junit2json-rs
junit2json-rs 是一个将 JUnit XML 格式转换为 JSON 的工具。从库的角度来看,它提供了一个将 Junit XML 序列化为 Struct 的函数。
junit2json-rs 是对我之前在 TypeScript 中工作的 ts-junit2json 的重写。
目的
junit2json-rs 设计用于将测试结果数据上传到 BigQuery 或任何支持 JSON 的数据库。
许多语言和测试框架支持以 JUnit XML 格式输出测试结果数据,这在今天实际上是标准格式。另一方面,大多数数据库不支持导入 XML,但支持 JSON。
为此,junit2json-rs 提供了一个简单的 JUnit XML 到 JSON 转换器。
安装
cargo install junit2json
用法
junit2json -p <junit_xml_file>
输出示例
{
"testsuites": {
"name": "gcf_junit_xml_to_bq_dummy",
"time": 8.018,
"tests": 12,
"failures": 2,
"testsuite": [
{
"name": "__tests__/gen_dummy_junit/dummy1.test.js",
"tests": 4,
"failures": 1,
"errors": 0,
"time": 4.772,
"skipped": 0,
"timestamp": "2020-01-12T16:33:13",
"testcase": [
{
"name": "dummy1 Always success tests should be wait 0-2sec",
"classname": "dummy1 Always success tests should be wait 0-2sec",
"time": 0.414
},
{
"name": "dummy1 Always success tests should be wait 1-3sec",
"classname": "dummy1 Always success tests should be wait 1-3sec",
"time": 1.344
},
{
"name": "dummy1 Randomly fail tests should be wait 0-1sec and fail 50%",
"classname": "dummy1 Randomly fail tests should be wait 0-1sec and fail 50%",
"time": 0.673,
"failure": {
"inner": "Error: expect(received).toBeGreaterThan(expected)\n\nExpected: > 50\nReceived: 4.897277513425746\n at Object.it (/Users/kesin/github/gcf_junit_xml_to_bq/__tests__/gen_dummy_junit/dummy1.test.js:22:17)"
}
},
{
"name": "dummy1 Randomly fail tests should be wait 1-2sec and fail 30%",
"classname": "dummy1 Randomly fail tests should be wait 1-2sec and fail 30%",
"time": 1.604
}
]
},
{
"name": "__tests__/gen_dummy_junit/dummy3.test.js",
"tests": 4,
"failures": 1,
"errors": 0,
"time": 6.372,
"skipped": 0,
"timestamp": "2020-01-12T16:33:13",
"testcase": [
{
"name": "dummy3 Always success tests should be wait 0-2sec",
"classname": "dummy3 Always success tests should be wait 0-2sec",
"time": 1.328
},
{
"name": "dummy3 Always success tests should be wait 1-3sec",
"classname": "dummy3 Always success tests should be wait 1-3sec",
"time": 2.598
},
{
"name": "dummy3 Randomly fail tests should be wait 0-1sec and fail 30%",
"classname": "dummy3 Randomly fail tests should be wait 0-1sec and fail 30%",
"time": 0.455,
"failure": {
"inner": "Error: expect(received).toBeGreaterThan(expected)\n\nExpected: > 30\nReceived: 12.15901879426653\n at Object.it (/Users/kesin/github/gcf_junit_xml_to_bq/__tests__/gen_dummy_junit/dummy3.test.js:22:17)"
}
},
{
"name": "dummy3 Randomly fail tests should be wait 1-2sec and fail 20%",
"classname": "dummy3 Randomly fail tests should be wait 1-2sec and fail 20%",
"time": 1.228
}
]
}
]
}
}
使用 jq
示例
显示测试套件测试计数
junit2json <junit_xml_file> | jq .testsuites.tests
显示测试套件名称
junit2json <junit_xml_file> | jq .testsuites.testsuite[].name
显示测试用例类名
junit2json <junit_xml_file> | jq .testsuites.testsuite[].testcase[].classname
注意
[!IMPORTANT] 与 ts-junit2json 相比,junit2json-rs 有一些重大变化。其中大部分变化是为了符合 JUnit XML Schema。
- JSON 的根中出现了
testsuites
或testsuite
键。 properties
有property
数组。ts-junit2json 直接有property
对象数组。skipped
、error
、failure
是对象,不是对象数组。- 如果 XML 有未定义的标签,它将被忽略。ts-junit2json 尽可能地转换为 JSON。
参考 JUnit XML Schema
命令行选项
A tool convert JUnit XML format to JSON with Rust
Usage: junit2json [OPTIONS] <PATH>
Arguments:
<PATH> JUnit XML path
Options:
-p, --pretty Output pretty JSON
-f, --filter-tags <FILTER_TAGS> Filter XML tag names [possible values: system-out, system-err]
-h, --help Print help
-V, --version Print version
WASI
junit2json-rs 也提供了 WASI 可执行文件。
如果您有 wasm 运行时(例如 wasmtime),您可以执行从 GitHub 发布 下载的 junit2json.wasm
,而不是本地二进制文件。
wasmtime junit2json.wasm --dir=. -- -p <junit_xml_file>
开发
设置
您可以使用 DevContainer 或 Codespaces。请参阅 devcontainer.json。
构建
构建本地二进制文件
cargo build
cargo build --release
构建WASI
cargo wasi build --release
测试
# Run test
cargo nextest run
# Update snapshot
## Need to install cargo-insta first.
## `cargo install cargo-insta`
cargo insta review
许可
MIT
依赖项
~4.5MB
~82K SLoC