Выполнение файлов объектов Java Cucumber по одному из скрипта bash и продолжение выполнения файлов объектов после завершения первого - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно запустить кучу файлов функций огурца Java, один за другим, используя скрипт bash на MacOS High Sierra.Проблема, с которой я столкнулся, заключается в том, что, как только первый файл компонентов будет выполнен (успешно или неудачно), среда 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 Ответ

0 голосов
/ 09 октября 2018

Ошибка, по-видимому, связана с шагами в вашем файле 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

gradle

#!/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

output

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 Выйти немедленно, если конвейер (который может состоять из одной простой команды), список или составная команда

Что значит.Когда сценарий 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=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...