Как реализовать ITestListener в Cucumber Selenium Java

#selenium #cucumber #testng #cucumber-java

#селен #огурец #testng #cucumber-java

Вопрос:

Я создал проект, в котором пытаюсь запустить тесты Cucumber Selenium Java с помощью плагина TestNG. Мой класс Runner :

 import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;

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

@CucumberOptions(features = "src/test/resources", monochrome = true, glue = "com.ipkgs.stepdefinitions", plugin = {
        "html:target/cucumber-html-report", "json:target/cucumber-json-report.json" }, dryRun = false)
public class CucumberTests extends AbstractTestNGCucumberTests {

    
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

}
  

Я создаю класс listener, в котором я хочу получить сведения о результате, а также детали сценария, например, при каком сценарии произошел сбой на каком шаге.

Я расширяю ITestListener, но он дает мне только результат прохождения / сбоя без деталей сценария.

Есть ли какой-нибудь способ добиться этого?

Ответ №1:

Для этого не следует использовать прослушиватели TestNG.В то время как Cucumber «знает» о TestNG, TestNG, в свою очередь, ничего не знает о Cucumber. Вам необходимо использовать механизм hooks для просмотра статуса выполнения вашего сценария.

Пример из документации:

 @After
public void doSomethingAfter(Scenario scenario){
    // Do something after after scenario
}

@AfterStep
public void doSomethingAfterStep(Scenario scenario){
    // Do something after after step
}
  

Комментарии:

1. Да, я пробовал это раньше, но проблема в том, что мне нужно реализовать эти перехваты в каждом файле step def

2. Что вы имеете в виду? Согласно документам, в которых определен хук, не влияет на то, для каких сценариев или шагов он выполняется . Чего вы пытаетесь достичь? Можете ли вы поделиться примером использования?

3. Перехваты могут быть определены только в файлах определения шага. не так ли? Итак, я должен поместить хуки в каждый из файлов stepdef?

4. Нет, это не так. Не существует такого термина, как «файл определения шага» (по крайней мере, если вы говорите о классическом синтаксисе, где вы определяете свои шаги с помощью аннотаций). Определение шага — это не класс, а метод. Таким образом, ничто не мешает вам хранить ваши хуки в отдельном классе. Это должны быть места в пакете или подпакетах того, что вы указываете в glue опции.