有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从bash脚本中逐个执行javacumber特性文件,并在第一个特性文件完成后继续执行

我需要在MacOS High Sierra上使用bash脚本,一个接一个地运行一堆Java cucumber特性文件。我遇到的问题是,一旦第一个功能文件执行完毕(成功或失败),Cucumber框架就会报告该功能文件,而我的脚本不会执行其余的功能文件。它“返回”到命令行

下面是逐个运行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在每个已执行的功能文件完成报告后不停止执行


共 (1) 个答案

  1. # 1 楼答案

    该错误似乎与build.gradle文件中的步骤或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
    

    运行gradle循环。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
    

    gradle

    #!/bin/bash
    
    echo
    echo "running gradle dummy"
    echo "passed parameters : $@"
    
    # exit with an error code
    exit 1
    

    file1_步骤。功能文件2_步骤。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文件

    edit在出现第一个错误后,它可能会停止的一种方式是run-gradle-loop.sh脚本中有一个set -e语句

    man bash

    -e Exit immediately if a pipeline (which may consist of a single simple command), a list, or a compound command

    也就是说。当脚本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=