我需要在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 在每个已执行的功能文件后完成报告,我的脚本是否有办法不停止执行?
该错误似乎与build.gradle
文件中的步骤或您在 Bash 脚本中调用函数的方式有关。
小型测试设置。假设以下结构#!/bin/bash。
run-gradle-loop.sh # executable script
gradle # executable script, as simple replacement
src/test/subdir/file2_Steps.feature # a dummy file
src/test/file1_Steps.feature # a dummy file
run-gradle-loop.sh
#!/bin/bash
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";
echo "return code = $?"
done
}
# to run the gradle script in the current directory
export PATH=$(pwd):${PATH}
run_cucumber_features
格拉德尔
#!/bin/bash
echo
echo "running gradle dummy"
echo "passed parameters : $@"
# exit with an error code
exit 1
file1_Steps.feature和file2_Steps.feature是两个空文件,只是为了满足循环条件。
测试的目的是检查gradle
退出并显示错误代码的行为。
运行主 Bash 脚本
./run-gradle-loop.sh
输出
running gradle dummy
passed parameters : cucumberTest -Dcucumber.options=./src/test/subdir/file2_Steps.feature DmutationTesting=false -DmutationParameter=
return code = 1
running gradle dummy
passed parameters : cucumberTest -Dcucumber.options=./src/test/file1_Steps.feature DmutationTesting=false -DmutationParameter=
return code = 1
这表明,即使gradle
也会返回错误代码,循环会处理所有.*Steps.feature
文件。
编辑第一个错误后可能会停止的一种方式可能是在run-gradle-loop.sh
脚本中有一个set -e
语句。
man bash
-e 如果管道(可能包含单个简单命令(、列表或复合命令,则立即退出
这意味着。当脚本gradle
失败并显示错误时,控件不会返回到run-gradle-loop.sh
。上述设置的输出将是
$ ./run-gradle-loop.sh
running gradle dummy
passed parameters : cucumberTest -Dcucumber.options=./src/test/subdir/file2_Steps.feature DmutationTesting=false -DmutationParameter=