Сценарии с метками огурца функционируют - PullRequest
1 голос
/ 16 октября 2019

Я пережил нечто действительно странное. Может быть, кто-то может объяснить мне, где я делаю ошибку. У меня есть следующий сценарий в файле объектов

@DeleteUserAfterTest
Scenario: Testing a functionality
Given admin exists
When a user is created
Then the user is verified

Мой метод @After в классе Hooks выглядит следующим образом:

@After
public void tearDown(Scenario scenario) {
    if (scenario.isFailed()) {
        final byte[] screenshot = ((TakesScreenshot) driver)
                .getScreenshotAs(OutputType.BYTES);
        scenario.embed(screenshot, "image/png"); //stick it in the report
    }
    driver.quit();
}

В своем определении шага я использую следующий метод для удалениясозданный пользователь на основе тега, переданного в сценарии тестирования следующим образом:

@After("@DeleteUserAfterTest")
public void deleteUser(){
//Do fucntionalities to delete user
}

Мой тестовый исполнитель выглядит примерно так:

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;

@CucumberOptions(
    plugin = {"pretty","com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:", "json:target/cucumber-report/TestResult.json"},
    monochrome = false,
    features = "src/test/resources/features/IntegrationScenarios.feature",
    tags="@DeleteUserAfterTest",
    glue="Steps")
public class IntegrationTest extends AbstractTestNGCucumberTests {
}

Однако, когда я запускаю тестовый пример, иногда мойПользователь удаляется в After ("@ DeleteUserAfterTest"), но иногда мой тест вообще не распознает помеченный тег After. Он напрямую переходит к методу After в моем классе Hooks и выходит из драйвера. Возможно, кто-то сталкивался с этой проблемой или знает обходной путь!

1 Ответ

1 голос
/ 16 октября 2019

Порядок методов не определен в Java. Таким образом, вы должны указать Cucumber, в каком порядке должны выполняться ваши хуки. Сначала запускаются более высокие числа (до того, как крючки будут наоборот).

@After(order = 500)
public void tearDown(Scenario scenario) {

}

@After(value = "@DeleteUserAfterTest", order = 1000)
public void deleteUser(){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...