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

Pal*_*sky 2 java bash intuit karate

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

我发现当脚本回显某些内容时,我可以通过脚本访问它,因此我可能会回显退出值并对其进行断言(在某些可重用功能中),但这似乎是一种解决方法而不是有效的清洁解决方案。有没有一些干净的方法来访问退出代码而不回显它?我错过了什么吗?

脚本

#!/bin/bash

#possible solution
#echo 3

exit 3;
Run Code Online (Sandbox Code Playgroud)

空手道-config.js

var result = karate.exec('script.sh arg1')
Run Code Online (Sandbox Code Playgroud)

特征文件

def result = karate.exec('script.sh arg1')
Run Code Online (Sandbox Code Playgroud)

Pet*_*mas 6

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

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

下面是一个例子:

* def proc = karate.fork('script.sh arg1')
* proc.waitSync()
* match proc.exitCode == 0
Run Code Online (Sandbox Code Playgroud)

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

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

  • 字符串 - 如上所示的完整命令行
  • 字符串数组 - 例如 ['script.sh', 'arg1']
  • 钥匙可以在的json
    • line - 字符串(或)
    • args - 字符串数组
    • env - 可选的环境属性(作为 JSON)
    • redirectErrorStream - 布尔值,默认为真,这意味着 Sys.err 出现在 Sys.out 中
    • useShell- 默认 false,自动添加cmd /csh -c取决于操作系统

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

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

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