Проблема: Перед запуском A.story и B.story необходимо запустить и завершить Procondition.story, поскольку Precondition.story вставляет данные в базу данных, которые затем используются A.sotry и B.story.
Я знаю несколько подходов для установки этой зависимости, но они неприменимы в данном контексте.
Аннотация «Givenstory» не очень помогает, потому что в этом случае Precondition.story будет запускаться дважды, первый раз для A.story и второй раз для B.story, что приводит к сбою Precondition.story во второй раз, говоря данные, которые он пытается вставить в база данных уже существует.
Использование отказоустойчивого плагина Maven Это, безусловно, поместит Precondition.story на первое место в списке выполнения, но все эти истории выполняются в многопоточной среде, где есть 8 потоков, готовых захватывать истории для одновременного запуска. Поток 1 берет Precondition.story, но пока эта история еще не завершена, A.story и B.story начинаются потоками 2 и 3, что приводит к сбою A.story и B.story.
Укажите порядок историй, переопределяющий storyPath(): не работает из-за той же проблемы, что и в пункте 2 выше.
Возможное решение: Как насчет сохранения состояния Precondition.story, скажем, в логической переменной preconditionCompleted. Когда Precondition.story завершается, для preconditionCompleted устанавливается значение true. Затем добавьте шаг в A.story и B.story в начале, который выполняет опрос preconditionCompleted каждую секунду, пока он не станет истинным, а затем выполняет остальную часть истории.
Для этого мне нужно знать, где мы можем объявить такие глобальные переменные для использования в историях?
@AfterScenario
и storyParams в@AfterStory
, чтобы они не влияли на другие сценарии/истории. Вы можете сделать что-то подобное с globalParams, конечно, вам вообще не нужно их очищать. Хорошо, если синхронизированная карта сделает синхронизацию за вас. - person Kristof   schedule 06.05.2015