【发布时间】:2018-10-09 14:42:31
【问题描述】:
我需要在 MacOS High Sierra 上使用 bash 脚本一个一个地运行一堆 Java 黄瓜功能文件。我遇到的问题是,一旦第一个功能文件执行完毕(成功或失败),Cucumber 框架就会对该功能文件进行报告,而我的脚本不会执行剩余的功能文件。它“返回”到命令行。
这是一个一个运行黄瓜文件的脚本的一部分:
function run_cucumber_features {
for file in $(find ./src/test -name '*Steps.feature' -print0 | xargs -0);
do gradle cucumberTest -Dcucumber.options="$file" DmutationTesting="false" -DmutationParameter="$parameter";
done
}
例如,假设我执行我的脚本:
./mutation_testing.sh
脚本然后调用 Cucumber 并执行脚本找到的第一个功能,然后它以该特定功能的状态代码“退出”:
BUILD Success in 18s
7 actionable tasks: 5 executed, 5 succeeded
但是,它不会继续执行下一个功能文件,而是返回到命令行:
username$
我的问题是,一旦 Cucumber 在每个已执行的功能文件完成报告后,是否有办法让我的脚本不停止执行?
【问题讨论】:
-
作为第一个快速检查,将脚本从
... do gradle ...修改为... do echo gradle ...以检查 loo 是否找到所有预期的文件。当这返回您期望的内容时,您可能会在脚本开头添加set -x以查看 Bash 脚本执行哪些步骤,这可能已经揭示了它在第一次迭代后退出的原因。 -
谢谢,我添加了“do echo gradle”,并返回了所有预期的文件。
-
添加“set -x”,表明它一直执行到:do gradle cucumberTest -Dcucumber.options="$file" DmutationTesting="false" -DmutationParameter="$parameter",之后它调用 Cucumber,然后它永远不会返回到脚本。
-
请看我的回答,因为它是一个评论。您可能会调查自己的 Bash 脚本/Gradle 构建文件或将其发布在此处。最好是发布MCVE 所需的尽可能多的代码。
-
SubOptimal 建议从脚本中删除“set -e”,从而解决了该问题。现在不返回控制,所有功能文件都按预期执行。