Как параметризовать плагин Maven surefire, чтобы я мог выбирать, какие тестовые пакеты для запуска

У меня есть множество тестовых наборов в TestNG. Это файлы XML. Я хочу иметь возможность выбирать несколько наборов XML при запуске теста интеграции из maven.

В настоящее время я могу добавить файлы пакета в pom.xml следующим образом:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <suiteXmlFiles>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
      <suiteXmlFile>${pathToMySuiteFile_1}</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
</plugin>

Это решение имеет некоторые ограничения. Я могу только изменить путь к набору тестов, который я определил в pom.xml. Поэтому в моем примере всегда должно быть два файла. Я не могу запустить, скажем, 5 наборов или только один.

Есть ли способ каким-либо образом параметризовать весь раздел "suiteXmlFiles" в pom.xml?

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <suiteXmlFiles>
      ${multiple_paths_ToMySuiteFiles}
    </suiteXmlFiles>
  </configuration>
</plugin>

Запуск всего, что соответствует данной тестовой группе, для меня не вариант: Я не хочу загружать все имеющиеся у меня комплекты, а затем запускать только выбранные тесты, используя группы в наборе TestNG. Причина заключается в том, что отчет, который генерируется после запуска всех наборов тестов с групповыми фильтрами, отличается от отчета, когда запускались только выбранные тестовые пакеты.

Ответ 2

Мы также затронули эту проблему нашими испытаниями. Нынешний обходной путь, который мы используем сейчас, - это определить переменную свойства в разделе свойств и вставить ее в блок safeXXMLFiles с гарантированным огнем.

<properties>
    <!-- Default suites -->
    <batsSuiteFile>${project.build.testOutputDirectory}/BatsTests.xml</batsSuiteFile>
    <smokeSuiteFile>${project.build.testOutputDirectory}/SmokeTests.xml</smokeSuiteFile>

    <!-- Default suite files if not being specified from mvn command line -->
    <defaultSuiteFiles>${batsSuiteFile},${smokeSuiteFile}</defaultSuiteFiles>
    <suiteFile>${defaultSuiteFiles}</suiteFile>
</properties>

Затем в разделе плагина...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12</version>
    <configuration>
       <suiteXmlFiles>
          <!-- Suite file injection parameter from command line -->
          <suiteXmlFile>${suiteFile}</suiteXmlFile>
       </suiteXmlFiles>
    </configuration>
</plugin>

Если в командной строке ничего не указано, оно отпадет и по умолчанию будет указано 2 набора, указанных выше в разделе свойств. Затем, если вы хотите начать заданный набор файлов пакетов, вы можете сделать:

mvn test -DsuiteFile=test1.xml,test2.xml

Удивительно, что из maven docs вы ожидаете, что arg suiteXmlFiles должен просто переопределить это из командной строки и должен просто принять список с разделителями-запятыми testng xmls http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#suiteXmlFiles

Если у кого-то есть другой лучший способ, пожалуйста, поделитесь.

Ответ 3

Вы можете использовать groups параметр или указать -Dgroups =... в командной строке:

(поставщик TestNG/JUnit47 только с JUnit4.8 +) Группы для этого теста. Только классы/методы/etc, украшенные одной из указанных групп здесь будут включены в тестовый прогон, если он указан. Для JUnit это параметр принудительно использует поставщика 4.7. Этот параметр игнорируется если указан параметр suiteXmlFiles..