Теги Cucumber в качестве тестовой группы в среде QAF и Spring boot

#testng #spring-test #cucumber-java #qaf #testng-annotation-test

#testng #spring-тест #cucumber-java #qaf #testng-аннотация-тест

Вопрос:

У меня есть 4 теста в файле функций с 2 разными тегами @first и @then. Я бы хотел, чтобы @first тесты запускались сначала с параллелизмом, а @then тесты запускались после завершения всех @first тестов, также с параллелизмом.

Проект здесь: https://github.com/marcesso/qafTesting

 @CucumberOptions(plugin = {"com.qmetry.qaf.automation.cucumber.QAFCucumberPlugin", "pretty", "html:target"},
        /*tags = {"@Ignore"},*/
        features = {"src/test/resources/my/custom/packagename/testing"})
public class RunnerTest extends AbstractTestNGCucumberTests {

    @Autowired
    private ObjectMapper objectMapper;


    @Test(description = "Runs Cucumber Scenarios", dataProvider = "scenarios", groups = {"first"})
    public void runScenarioFirst(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
        super.runScenario(pickleWrapper,featureWrapper);

    }
    @Test(description = "Runs Cucumber Scenarios", dataProvider = "scenarios", groups = {"then"}, dependsOnMethods =
            "runScenarioFirst")
    public void runScenarioThen(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
        super.runScenario(pickleWrapper,featureWrapper);
    }

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

    @PostConstruct
    public void setUp() {
        objectMapper.registerModule(new JavaTimeModule());
    }

}

  

Проблема в том, что все тесты выполняются дважды (один раз для каждого метода тестирования), а атрибут «groups» аннотации @Test не фильтрует тесты, как я ожидал (в самом низу https://qmetry.github.io/qaf/latest/gherkin_client.html )

Параллелизма тоже нет.

Я попытался отфильтровать соленые огурцы в методах тестирования, но тесты, которые не соответствовали условию, отображались как пройденные, даже если не выполнялись

 if(pickleWrapper.getPickle().getTags().contains("@first")) {
            super.runScenario(pickleWrapper,featureWrapper);
}
  

Ответ №1:

В приведенном выше примере RunnerTest GherkinClient из qaf не отображается на картинке, потому что вы используете cucumber runner. GherkinScenarioFactory и BDDTestFactory2 (с qaf 2.1.15 ) являются неотъемлемой реализацией QAF. Когда вы используете любой из них, вам не нужен RunnerTest класс выше. BDDTestFactory2 предпочтительнее GherkinScenarioFactory и поддерживает дополнительные синтаксические функции поверх стандартного синтаксиса gherkin.

Когда вы используете cucumber runner ( RunnerTest класс в вашем случае), теги не рассматриваются как группы TestNG. Если вы хотите использовать cucumber runner для запуска файла компонентов, вам необходимо обработать его с помощью параметров cucumber. AFAIK, то, что вы ищете, не может быть достигнуто с помощью одного класса при использовании cucumber runner.

Когда вы используете qaf, вы можете использовать BDD2Factory вместо тестового класса cucumber. Вы можете предоставить конфигурацию xml с учетом сценария в качестве тестового примера TestNG. Вы можете смешивать и сопоставлять различные параметры конфигурации, поддерживаемые TestNG, так же, как выполнение теста, написанного на Java. В вашем случае это может выглядеть следующим образом:

 <suite name="QAF Demo" verbose="0" parallel="false" data-provider-thread-count="10">

<test name="First"  parallel="methods"  thread-count="5">
   <groups>
      <run>
        <include name="first" />
      </run>
   </groups>
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2" />
   </classes>
</test>

<test name="second"  parallel="methods"  thread-count="5">
   <groups>
      <run>
        <include name="then" />
      </run>
   </groups>
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2" />
   </classes>
</test>
</suite>
  

Вы также можете использовать фильтр метаданных. Группы / теги также рассматриваются qaf как метаданные testcase.
Поэтому вместо :

 <groups>
  <run>
    <include name="first" />
  </run>
</groups>
  

вы можете просто указать include параметр, как показано ниже:

    <parameter name="include" value="{'groups': ['first']}" />
  

Я хочу повторить здесь, что вышеуказанные функции доступны только при запуске с использованием BDDTestFactory2 , но недоступны при использовании cucumber runner. Обратитесь к использованию qaf-bdd-runner

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

1. Спасибо за вашу помощь, но, к сожалению, боюсь, я не могу использовать чистый TestNG, поскольку мне нужны некоторые функции SpringBoot в остальной части моего проекта тестирования. Я попытался расширить некоторые классы cucumber, чтобы добавить фильтр тегов во время построения Object[][], но все классы, которые я пытался расширить, являются окончательными, а поля часто не являются общедоступными. Даже с отражением сложность слишком высока, слишком много кода должно быть переписано, чтобы иметь что-то простое в обслуживании. Я немного разочарован тем, что не могу расширять классы, поскольку я думаю, что это не должно быть ни очень сложным, ни опасным

2. Не волнуйтесь, функция springboot должна работать так же, как и при работе с cucumber runner. Попробуйте. Вы можете продолжать использовать шаг cucumber.

3. Я попробовал да, но у меня не может быть параллелизма в проекте github, и когда я сообщал о реальном проекте, у меня были ошибки

4. функция springboot должна работать как есть в чистом TestNG. Что касается параллелизма, вам необходимо установить количество потоков и параллельный режим в файле конфигурации testng. также установите global.datadriven.parallel=true ссылку qmetry.github.io/qaf/latest/properties_list.html

5. да, это работает отлично, проблема заключалась в неправильной версии testng в pom моего реального проекта. И я мог бы исправить параллелизм благодаря вашим советам. Большое спасибо