23 个版本
0.1.22 | 2020年12月15日 |
---|---|
0.1.21 | 2020年12月9日 |
0.1.16 | 2020年7月27日 |
#1294 在 命令行工具 中
91 每月下载量
165KB
3.5K SLoC
JUnit XML 报告工具包
一个用于帮助管理 JUnit XML 格式报告的命令行工具。
安装
要本地获取工具包,只需使用 Cargo
cargo install juxr
注意:GitHub Actions 构建的未签名二进制文件提供方便,可在 发布 中找到。建议的安装路径是使用源代码构建,使用 cargo install juxr
。
要获取用于 Docker 容器的工具包,只需从 Docker 镜像中复制它
FROM cloudbees-oss/juxr:latest AS juxr
# Just to grab the juxr binary, then build your image as normal
FROM your-base-image
# ...
# Copy in the binary
COPY --from=juxr /usr/local/bin/juxr /usr/local/bin/juxr
# ...
您还可以使用 Docker 镜像来运行工具包,尽管不推荐用于除 import
和 export
之外的其他子命令。
Docker 镜像版本
- 每个版本都获得一个特定的标签,由 GitHub Actions 构建
latest
标签始终指向由 GitHub Actions 构建的最新版本pre-release
标签始终指向由 DockerHub 构建的 当前主线代码
通过标准 I/O 提取报告
作为开发者,我在一个临时 Kubernetes Pod 中运行一些测试,我需要提取测试结果和任何相关的 附件
该工具包提供了三个子命令来帮助完成此操作。
首先是有 export
子命令。您可以在 Pod 中运行此命令,它将报告(以及任何附件)通过标准输出传输。
然后是 import
子命令。您在接收端运行此命令,并将 Kubernetes 日志通过它传输。
最后,在 exec
子命令中有一个特殊的 export
变体。您再次在 Pod 中运行此命令,但可以使用它来包装测试启动命令。
您需要将工具包包含在测试镜像中,例如。
如果您正在使用 export
,则将更改入口点以运行类似 juxr export -r **/TEST-*.xml
或您需要的任何测试报告模式的命令。
由于您可能希望Pod以成功/失败退出代码终止,因此一个更简单的选项是将运行测试的命令从 some_command arg arg
更改为 juxr exec -r **/TEST-*.xml -- some_command arg arg
,这样在导出测试报告后,它将负责启动命令并传播错误代码。
请查看 juxr help export
和 juxr help exec
以了解其他导出选项的详细信息,例如秘密编辑和测试/套件重命名。
如果您不希望在测试容器内部使用 juxr
工具包,则可以使用 base64 编码达到相同的结果,但这不会提供自动导出 JUnit 附件或前缀/后缀测试名称或套件的能力。
needle="[[juxr::stream::$RANDOM::junit-test-report::TEST-custom.xml]]"
# NOTE: there must be a new line before the needle
echo ""
echo $needle
base64 < TEST-custom.xml
echo $needle
然后在接收端,只需将日志通过 juxr import
管道传递,例如,如果使用 helm test
运行测试容器。
helm test --logs | juxr import -o helm-test-results/
导入命令将输出所有非目标书签内容到标准输出,并将文件写入指定的输出目录。
将 TAP 格式的报告转换为 JUnit XML 格式
作为开发者,我有一个输出 TAP 格式测试报告的测试工具,但需要消费 JUnit XML 格式的报告。
tap
子命令将 TAP 版本 12 或 13 的输出转换为 JUnit XML 格式。
您可以通过管道传递输出或由工具包运行测试命令,例如。
some_command arg arg | juxr tap --name "some_command.tests" -o test-results/
或
juxr tap --name "some_command.tests" -o test-results/ -- some_command arg arg
后一种形式将尝试推断测试持续时间并传播退出代码。
从执行单个命令生成 JUnit XML 报告
作为开发者,我有一个单个命令,我希望将其转换为 JUnit XML 报告。
test
子命令将运行单个命令并生成包含命令输出的 JUnit XML 报告,例如。
juxr test --name "some.command" --test "arg1 arg2" -o test-results/ -- some_command arg1 arg2
这将产生一个 TEST-some.command.xml
文件在 test-results
中。
请查看 juxr help test
以了解如何控制退出代码映射以区分测试状态。
从运行一系列简单命令生成 JUnit XML 报告
作为开发者,我有一系列不同的命令,它们代表我想要运行和记录的独立测试。
对于此用例,我们建议您使用像 bats 测试框架这样的优秀框架。您可以使用此框架生成 JUnit XML 格式的报告,并且您可以对测试的顺序进行控制。
但是,有时您只需要快速而脏的东西...进入 run
子命令。
它接受一系列测试的灵活 YAML 格式描述,并以字母顺序运行它们。一个测试套件的示例可能如下所示。
"001 echo greeting using the current shell": >
if [[ $(($(($RANDOM%10))%2)) -eq 1 ]] ;
then
echo hello world ;
else
echo hi world ;
fi
"002 echo a greeting using the echo binary":
- echo
- "hello world"
"003 the false command when executed by the current shell should exit with non-zero":
cmd: "false" # need to quote values that YAML might perform type conversions on
success: 1
failure: 0
"004 skip this test":
cmd:
- "false"
skipped: 1
failure: 2 # need to move it off it's default of 1
"005 exit code 1 or 2 is success 3 or 4 means skip and 5 or 6 is failure otherwise an error":
cmd:
- sh
- "-c"
- "exit 2"
success:
- 1
- 2
skipped:
- 3
- 4
failure:
- 5
- 6
顶层键是测试名称。
-
如果键的值是字符串,则将使用
sh -c
执行(或在 Windows 上使用cmd /C
) -
如果键的值是字符串数组,则第一个值用作程序名称,其余值将作为程序参数传递
-
如果键的值是对象,则命令将从对象中的
cmd
或command
键获取(该键接受字符串或字符串数组)。 -
对象形式还允许指定不同测试状态的预期退出代码
success
接受单个值或值数组,表示程序退出代码,将其解释为成功的测试结果。如果没有指定,则假定其值为0
。failure
接受单个值或值数组,表示程序退出代码,将其解释为失败的测试结果。如果没有指定,则假定其值为1
。skipped
接受单个值或值数组,表示程序退出代码,将其解释为跳过的测试结果。如果没有指定,则测试将永远不会被跳过。
注意:如果您想将退出代码
1
或0
用于除failure
或success
之外的目的,则需要覆盖默认值注意:除
success
、failure
或skipped
定义的退出代码之外的退出代码将使测试结果标记为错误。
依赖关系
~9–19MB
~231K SLoC