После сценария Схема крючка в Огуре - PullRequest
0 голосов
/ 27 апреля 2018

Я использую Java и Cucumber. Мне нужно сделать некоторые действия после каждого плана сценария. Я знаю, что есть хуки @Before и @After, но они применимы к каждому сценарию в набросках сценария. Есть ли возможность запускать какие-либо действия точно после всех сценариев в общих чертах, а не после каждого сценария?

Пример:

   Scenario Outline: Some scenario
   Given given actions
   When when actions
   Then display <value>
Examples:
|value|
|a    |
|b    |

Я хочу сделать исполнение следующим образом:

@ Перед действиями

значение

значение b

@ После действий

@ До действий

// вывод другого сценария

@ После действий

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Один из способов сделать это - использовать методы BeforeClass and AfterClass для junit или testng для бегуна. Проблема в том, что в файле объектов может быть только один сценарий, и для него потребуется уникальный класс бегуна.


Иметь метод, запущенный только для первого сценария, запускаемого из схемы сценария, довольно легко. Создайте ловушку перед выполнением только один раз, используя статический флаг. Измените хук «До», чтобы он запускался для определенных тегов и т. Д.

private static boolean skipFlag = false;

@Before
public void beforeHook() {

    if(!skipFlag) {
        do stuff
        skipFlag=true;
    }
}

Хотя это хорошо работает с одной схемой сценария в файле объектов. В противном случае вам нужно будет повторить флаги для каждого сценария. При параллельном запуске это может стать грязным.


Лучшее, но немного сложное решение, которое требует разбить таблицу примеров на 3 и присвоить теги верхней и нижней части.

@AftBef
Scenario Outline:
When User Selects <Origin>, <Destination>

@StartIt
Examples:
    | Origin        | Destination        |
    | London        | New York           |

Examples:
    | Origin        | Destination        |
    | Munich        | Moscow             |
    | Rome          | Shanghai           |

@EndIt
Examples:
    | Origin        | Destination        |
    | Miami         | San Francisco      |

Добавьте нижеуказанные методы ловушек с тегами. Вы также можете добавить тег (ы) к средней части если есть какая-то нестандартная логика.

@Before(value={"@StartIt"})
public void startItAll() {

    System.out.println("-----START IT BIRTH BIRTH----");
}

@After(value={"@EndIt"})
public void endItAll() {

    System.out.println("-----END IT DIE DIE---------");
}

Если у вас есть только один пример, просто добавьте оба тега к примерам, как показано ниже.

 @StartIt @EndIt
    Examples:

Необходимо соблюдать осторожность при создании таблицы, чтобы обеспечить наличие только одной примерной строки для тегов @StartIt и @EndIt.

0 голосов
/ 01 мая 2018

Одна из причин, по которой это сложно и не поддерживается Cucumber, заключается в том, что это действительно плохая идея. Хорошая практика тестирования предполагает, что вы начинаете с чистого листа, прежде чем запускать каждый тест. Если вы связываете тесты вместе, как вы делаете, то, когда что-то идет не так, вы должны решить, провалился ли тест, или что-то в предыдущих тестах вызвало проблему. Это быстро становится потрясающим PITA.

TLDR не делай этого, ты будешь сожалеть об этом;)

0 голосов
/ 27 апреля 2018

Да, вы можете использовать теги.

   @tag1
   Scenario Outline: Some scenario
   Given given actions
   When when actions
   Then display <value>
Examples:
|value|
|a    |
|b    |

Здесь мы указали tag1 в качестве тега.

Теперь в определении шага вы можете использовать что-то вроде этого:

@Before("@tag1")
public void testSetup(){
    ...
} 

@After("@tag1")
public void testEnd(){
    ...
} 

Эти @before и @after характерны для tag1 сейчас. ' Надеюсь, это поможет.

...