Я хочу создать Dynamic TestNG XML для сценариев огурца и выполнить в параллельном режиме.
Я внес необходимые изменения в API огурца для параллельного запуска сценариев огурца с помощью ссылки ниже.
Визит https://github.com/cucumber/cucumber-jvm/pull/1118/commits/ab8a0d38ace369a756f201d240c906fdd8111c74
Я изменил метод, который извлекает сценарии из файла объектов, но я не знаю, какой класс я должен упомянуть в строке ниже
List myClasses = new ArrayList ();
myClasses.add(new XmlClass("src.test.java.cucumber.api.testng.TestNGCucumberRunner.java"));
Ниже приведен метод чтения всех файлов и сценариев объектов и их преобразования в TestNG XML.
public Object[][] provideScenariosForXML(boolean blnRunOnGrid, boolean blnPreserveFeatureOrder, boolean blnPreserveScenarioOrder) {
TestNG myTestNG=new TestNG();
try {
int i=0;
XmlSuite mySuite = new XmlSuite();
System.out.println("Feature:");
mySuite.setName("Features");
mySuite.setParallel(XmlSuite.ParallelMode.TESTS);
if(blnRunOnGrid){
if(blnPreserveFeatureOrder){
mySuite.setPreserveOrder("Yes");
}
}else{
mySuite.setPreserveOrder("");
mySuite.setThreadCount(1);
mySuite.setDataProviderThreadCount(1); //To Control Iteration Parallel Threads
}
List features = getFeatures();
List scenarioList = new ArrayList(features.size());
for (CucumberFeature feature: features) {
System.out.println(feature.getPath());
List lsTests = new ArrayList();
List scenarios = feature.getFeatureElements();
for (CucumberTagStatement scenario: scenarios) {
XmlTest eachTest = new XmlTest(mySuite);
List myClasses = new ArrayList ();
myClasses.add(new XmlClass("src.test.java.cucumber.api.testng.TestNGCucumberRunner.java"));
if (scenario instanceof CucumberScenarioOutline) {
List cucumberExamplesList = ((CucumberScenarioOutline) scenario).getCucumberExamplesList();
for (CucumberExamples cucumberExamples : cucumberExamplesList) {
List exampleScenarios = cucumberExamples.createExampleScenarios();
for (CucumberScenario exampleScenario : exampleScenarios) {
eachTest.setName(scenario.getVisualName()+" : "+exampleScenario.getVisualName());
eachTest.setClasses(myClasses);
System.out.println("\t"+scenario.getVisualName()+" : "+exampleScenario.getVisualName());
scenarioList.add(new Object[]{new CucumberTagStatementWrapperImpl(exampleScenario)});
i++;
}
}
}else{
System.out.println("\t"+scenario.getVisualName());
i++;
scenarioList.add(new Object[]{new CucumberTagStatementWrapperImpl(scenario)});
}
}
mySuite.setTests(lsTests);
}
System.out.println("Total Number of Scenarios :"+i);
List mySuites = new ArrayList();
mySuites.add(mySuite);
myTestNG.setXmlSuites(mySuites);
return scenarioList.toArray(new Object[][]{});
} catch (CucumberException e) {
return new Object[][]{new Object[]{new CucumberExceptionWrapper(e)}};
}
}
Я пытаюсь это
1. Контролировать общее количество потоков (не количество потоков провайдера данных)
2. Сохранять порядок исполнения там, где это необходимо (@Suite Level или @Test Level)
Пожалуйста, помогите мне, если у кого-то есть решение для этого.