Cucumber Hooks - Где использовать @Before @Before, в его наиболее простом использовании, позволяет запускать блок кода перед каждым сценарием.Обычно в Cucumber мы склонны делать связанные с инициализацией вещи - такие как инициализация объекта, настройка данных и т. Д. В заданном операторе.Из-за этого многие люди не видят необходимости использовать @Before от Cucumber.Но вы можете использовать @Before для записи в отчете о том, что выполняется новый сценарий.Поскольку @Before всегда выполняется перед каждым сценарием, вы можете использовать это в своих отчетах, чтобы четко представить, когда сценарий начинает выполняться.
Нет необходимости добавлять @Before в каждый файл объектов.Просто добавьте его в любой файл функций и позвольте Cucumber выполнять свою работу.Cucumber выяснит, где вы сохранили @Before, а затем будет использовать его перед всеми сценариями.Чтобы сделать ваши отчеты более полезными и легкими для понимания, вы можете также написать имя сценария в отчете.Код Java для этого приведен ниже -
@Before
public void before(Scenario scenario) {
System.out.println("------------------------------");
System.out.println("Starting - " + scenario.getName());
System.out.println("------------------------------");
}
Cucumber API предоставляет интерфейс, называемый сценарием, с помощью которого вы можете получить экземпляр этого класса.В приведенном выше коде мы только что использовали метод getName () этого интерфейса, чтобы напечатать имя сценария в нашем журнале.
Тестовые зацепки с одним сценарием (пример):
Файл функций
Feature: Test Hooks
Scenario: This scenario is to test hooks functionality
Given this is the first step
When this is the second step
Then this is the third step
Определения шагов:
package stepDefinition;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class Hooks_Steps {
@Given("^this is the first step$")
public void This_Is_The_First_Step(){
System.out.println("This is the first step");
}
@When("^this is the second step$")
public void This_Is_The_Second_Step(){
System.out.println("This is the second step");
}
@Then("^this is the third step$")
public void This_Is_The_Third_Step(){
System.out.println("This is the third step");
}
}
Крючки
package utilities;
import cucumber.api.java.After;
import cucumber.api.java.Before;
public class Hooks {
@Before
public void beforeScenario(){
System.out.println("This will run before the Scenario");
}
@After
public void afterScenario(){
System.out.println("This will run after the Scenario");
}
}
РЕДАКТИРОВАНИЕ:
Обходной путь, упомянутый в Проблема №515 и в других местах заключается в использовании аннотаций @BeforeClass
и @AfterClass
JUnit в классе бегуна, например:
@RunWith(Cucumber.class)
@Cucumber.Options(format = {
"html:target/cucumber-html-report",
"json-pretty:target/cucumber-json-report.json"})
public class HooksTest {
@BeforeClass
public static void setup() {
System.out.println("Ran the before");
}
@AfterClass
public static void teardown() {
System.out.println("Ran the after");
}
}
Примечание. Хотя @BeforeClass
и @AfterClass
могут выглядеть следующим образомсамое чистое решение на первый взгляд, они не очень практичны в использовании.Они работают только тогда, когда Cucumber-JVM настроен на использование JUnit runner .Другие бегуны, такие как TestNG, бегун командной строки и специальные бегуны IDE, не поймут эти хуки.Их методы также должны быть статическими и, в любом случае, для обмена данными потребуются статические переменные или одиночные символы.
для запуска тестовых случаев JUnit из командной строки