如何使用空手道执行 bash 脚本并在脚本失败时失败

How to execute bash script using karate and fail if script fails

我正在尝试使用空手道执行 bash 脚本。我能够从 karate-config.js 以及 .feature 文件执行脚本。我还可以将参数传递给脚本。 问题是,如果脚本失败(以 0 以外的其他内容退出),测试执行将继续并成功完成。

我发现当脚本回显某些东西时,我可以作为脚本的结果访问它,所以我可以回显退出值并对其进行断言(在某些可重用的功能中),但是这似乎是一种解决方法,而不是有效的清洁解决方案。是否有一些干净的方法可以在不回显的情况下访问退出代码?我错过了什么吗?

脚本

#!/bin/bash

#possible solution
#echo 3

exit 3;

空手道-config.js

var result = karate.exec('script.sh arg1')

特征文件

def result = karate.exec('script.sh arg1')

好时机。我们最近做了一些 CLI 测试工作,我相信你可以有效地使用它。这是 Twitter 上的一个主题:https://twitter.com/maxandersen/status/1276431309276151814

我们刚刚发布了 0.9.6.RC4 版本,我们有一个新的 karate.fork() 选项,returns 一个 Command 的实例,您可以在上面调用 exitCode

这是一个例子:

* def proc = karate.fork('script.sh arg1')
* proc.waitSync()
* match proc.exitCode == 0

您可以在这里获得更多想法:https://github.com/intuit/karate/issues/1191#issuecomment-650087023

请注意 karate.fork() 的参数可以采用多种形式

  • string - 完整的命令行,如上所示
  • 字符串数组 - 例如['script.sh', 'arg1']
  • json 哪里有钥匙
    • line - 字符串 (OR)
    • args - 字符串数组
    • env - 可选环境属性(如 JSON)
    • redirectErrorStream - 布尔值,默认为真,这意味着 Sys.err 出现在 Sys.out
    • useShell - 默认 false,根据 OS
    • 自动添加 cmd /csh -c

并且由于 karate.fork() 是异步的,如果需要,您需要调用 waitSync(),如上例所示。

请提供反馈,我们可以根据需要进一步调整。

编辑:这是一个非常高级的示例,展示了如何监听进程输出/日志、收集日志并有条件地退出:fork-listener.feature

另一个有用的参考答案: