如何使用空手道执行 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 /c
或 sh -c
并且由于 karate.fork()
是异步的,如果需要,您需要调用 waitSync()
,如上例所示。
请提供反馈,我们可以根据需要进一步调整。
编辑:这是一个非常高级的示例,展示了如何监听进程输出/日志、收集日志并有条件地退出:fork-listener.feature
另一个有用的参考答案:
我正在尝试使用空手道执行 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 /c
或sh -c
并且由于 karate.fork()
是异步的,如果需要,您需要调用 waitSync()
,如上例所示。
请提供反馈,我们可以根据需要进一步调整。
编辑:这是一个非常高级的示例,展示了如何监听进程输出/日志、收集日志并有条件地退出:fork-listener.feature
另一个有用的参考答案: