Куда делись крючки до и после в огурце - PullRequest
0 голосов
/ 20 октября 2019

У меня есть довольно простая тестовая среда Cucumber с файлом объектов, файлом определений шагов и классом бегунов, который выглядит следующим образом:

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/java/com/tests/cucumber/features/ui/ExampleTest.feature", 
                 glue = { "com.tests.cucumber.stepdefinitions" },
                 )
public class ExampleTestRunner {

}

Это прекрасно запускает сценарий в файле объектов,Теперь я хочу добавить хук «До» и «После», чтобы выполнить настройку и демонтаж, но я не могу заставить хуки работать. Я попытался добавить хуки в ExampleTestRunner и в класс StepDefinition, но они никогда не запускаются. Где я должен положить эти крючки? На данный момент хуки просто выглядят так, но я добавлю к ним контент, как только разберусь с этим!

package com.tests.cucumber.stepdefinitions;

import cucumber.api.java.After;
import cucumber.api.java.Before;

public class StepDefinitions {

    @Before
    public void before() {
        System.out.println("starting before()");
    }
}

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я использую вот так;

Класс бегуна:

@RunWith(Cucumber.class)
@CucumberOptions(

    features = {"src\\test\\features\\ui_features"},
    glue = {"com\\base\\tm\\auto_reg\\tests\\ui_tests\\price_features"},
    plugin = {"com.cucumber.listener.ExtentCucumberFormatter:"}
)

public class PriceFeatureRunner {
@BeforeClass
public static void setup() {
    RunnerUtil.setup(PriceFeatureRunner.class);
}

@AfterClass
public static void teardown() {
    RunnerUtil.teardown();
}

}

RunnerUtil.java:

public class RunnerUtil {
public static void setup(Class<?> clazz) {
    String reportPath = "target/cucumber-reports/" + clazz.getSimpleName().split("_")[0] + "_report.html";

    ExtentProperties extentProperties = ExtentProperties.INSTANCE;
    extentProperties.setReportPath(reportPath);

}


public static void teardown() {
    UiHooks uiHooks = new UiHooks();
    uiHooks.afterScenario();
    ExtentReportConfiguration.configureExtentReportTeardown();
}
}

UiHooks.java

public class UiHooks implements HookHelper {


public static final String BASE_URL = "https://www.stackoverfow.com/";

private Scenario scenario;

@Override
@Before
public void beforeScenario(Scenario scenario) {
    this.scenario = scenario;

    Reporter.assignAuthor(System.getProperty("user.name"));
}

@Override
@After
public void afterScenario() {

   if (HookUtil.driver != null) {
        HookUtil.driver.quit();
    }
    if (HookUtil.seleniumBase != null) {
        HookUtil.seleniumBase.stopService();
    }

}

@Override
@After
public void afterTest() {
   if (HookUtil.driver != null) {
        HookUtil.driver.quit();
    }
    if (HookUtil.seleniumBase != null) {
        HookUtil.seleniumBase.stopService();
    }
}

}

HookHelper.Java

public interface HookHelper {

@Before
void beforeScenario(Scenario scenario);

@After
void afterScenario();

void afterTest();
}
0 голосов
/ 21 октября 2019

Я немного не решаюсь ответить на этот вопрос, хотя мне удалось заставить его работать. Насколько я могу судить, проблема была в том, что я добавил методы До и После в классы, которые были расширены другими классами. В этой ситуации тесты не будут выполняться. Мне пришлось добавить методы До и После к классу, который не был расширен.

Такое ощущение, что это похоже на ситуацию, в которой, если вы укажете определение шага в классе, который расширен другим классом,тогда определение шага считается дублирующим. У меня здесь правильный диагноз?

...