Параллельное выполнение сценария уровня огурца с помощью Dynamic TestNG Xml - PullRequest
0 голосов
/ 20 мая 2019

Я хочу создать 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)

Пожалуйста, помогите мне, если у кого-то есть решение для этого.

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