【问题标题】:How to execute bash script using karate and fail if script fails如何使用空手道执行 bash 脚本并在脚本失败时失败
【发布时间】:2020-11-04 16:58:05
【问题描述】:

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

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

脚本

#!/bin/bash

#possible solution
#echo 3

exit 3;

karate-config.js

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

特征文件

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

【问题讨论】:

    标签: java bash karate intuit


    【解决方案1】:

    时机很好。我们最近为 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
    

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

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

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

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

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

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

    另一个可以作为有用参考的答案:Conditional match based on OS

    【讨论】:

    • 当通过 karate.fork() 执行脚本时,有什么方法可以抑制 stdout 在控制台上打印
    • @AmitChouksey 目前不直接。您可以尝试调整 logback-test.xml 文件:github.com/intuit/karate#logging - 更具体的内容可能需要更改代码
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2021-05-18
    • 2021-09-19
    • 2020-11-24
    • 2020-08-19
    相关资源
    最近更新 更多