从 bash 脚本逐个执行 Java Cucumber 功能文件,并在第一个功能文件完成后继续执行功能文件



我需要在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.featurefile2_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=

最新更新