#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.html5. да, это работает отлично, проблема заключалась в неправильной версии testng в pom моего реального проекта. И я мог бы исправить параллелизм благодаря вашим советам. Большое спасибо