23 个版本

0.1.22 2020年12月15日
0.1.21 2020年12月9日
0.1.16 2020年7月27日

#1294命令行工具

Download history 89/week @ 2024-04-01 23/week @ 2024-04-22 39/week @ 2024-05-06 7/week @ 2024-05-13 28/week @ 2024-05-20 91/week @ 2024-07-01

91 每月下载量

Apache-2.0

165KB
3.5K SLoC

JUnit XML 报告工具包

一个用于帮助管理 JUnit XML 格式报告的命令行工具。

Release Test Crates.io Crates.io Libraries.io dependency status for latest release GitHub code size in bytes GitHub issues GitHub pull requests Crates.io Libraries.io SourceRank GitHub release (latest SemVer) GitHub Release Date GitHub commits since latest release (by SemVer) GitHub last commit GitHub contributors

安装

要本地获取工具包,只需使用 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 镜像来运行工具包,尽管不推荐用于除 importexport 之外的其他子命令。

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 exportjuxr 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

  • 如果键的值是字符串数组,则第一个值用作程序名称,其余值将作为程序参数传递

  • 如果键的值是对象,则命令将从对象中的 cmdcommand 键获取(该键接受字符串或字符串数组)。

  • 对象形式还允许指定不同测试状态的预期退出代码

    • success 接受单个值或值数组,表示程序退出代码,将其解释为成功的测试结果。如果没有指定,则假定其值为 0
    • failure 接受单个值或值数组,表示程序退出代码,将其解释为失败的测试结果。如果没有指定,则假定其值为 1
    • skipped 接受单个值或值数组,表示程序退出代码,将其解释为跳过的测试结果。如果没有指定,则测试将永远不会被跳过。

    注意:如果您想将退出代码 10 用于除 failuresuccess 之外的目的,则需要覆盖默认值

    注意:除 successfailureskipped 定义的退出代码之外的退出代码将使测试结果标记为错误。

依赖关系

~9–19MB
~231K SLoC