2017-01-31 16 views
1

Вот как выглядит мой POM.xml.Использование Maven, TestNG - Как запустить определенные группы в TestNG. Удивление, если то, что я делаю, возможно?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>com.github.akiraly.reusable-poms</groupId> 
     <artifactId>pom-parent-with-spring-context</artifactId> 
     <version>4</version> 
    </parent> 
    <groupId>MvnTestFramework</groupId> 
    <artifactId>MvnTestFrameworkProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.9.6</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.19.1</version> 
       <configuration> 
        <forkMode>always</forkMode> 
        <systemProperties> 
         <property> 
          <name>reporter.debug</name> 
          <value>false</value> 
         </property> 
        </systemProperties> 
        <suiteXmlFiles> 
         <suiteXmlFile>testng.xml</suiteXmlFile> 
        </suiteXmlFiles> 
        <reportsDirectory>reports</reportsDirectory> 
        <parallel>methods</parallel> 
        <threadCount>5</threadCount> 
        <skipTests>false</skipTests> 
        <suitename>${testng.suitename}</suitename> 
        <groups>${testng.groups}</groups> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <encoding>utf8</encoding> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration>        
      </plugin> 
     </plugins> 
    </build> 
</project> 

Это как мой testng.xml выглядит следующим образом:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="testgroups" verbose="1" parallel="tests" group-by-instances="true" preserve-order="false" thread-count="5"> 
<test name="testgroups" preserve-order="true" group-by-instances="true"> 
      <groups> 
       <run> 
        <include name="group1" /> 
        <include name="group2" /> 
        <include name="group3" /> 
       </run> 
      </groups> 
      <packages> 
       <package name="testpackage.*" /> 
      </packages> 
     </test> 
    </suite> 

Что я хочу: запускать только определенные группы тестов. Значение - либо group1, либо group2 или group3, но не все из них должны запускаться одновременно. По той же причине я предоставил {testng.groups} для запуска определенной группы. В аргументах JVM при запуске testng.xml я указываю: -Dtestng.groups = group2 для запуска только тестов group2. Тем не менее, он просто запускает все тесты в группах1, group2 и group3.

Я правильно подошел к проблеме? Как я могу убедиться, что работает только определенный набор групп. Спасибо, что помогли парням.

ответ

2

Вы можете попробовать использовать возможности Beanshell, которые может предложить TestNG, чтобы это сделать.

Таким образом, независимо от того, как вы запустите набор тестов:

  • либо через ваш IDE, используя плагин TestNG, в котором файл ПОМ не имеет никакого отношения (или)
  • через Maven, где Maven имеет отношение

Селектор методов вашего пакета файлов всегда будет выполняться.

В двух словах, вам необходимо определить селектор метода, который использует Beanshell, как показано ниже

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite" parallel="false"> 
    <test name="Test"> 
     <method-selectors> 
      <method-selector> 
       <script language="beanshell"> 
       <![CDATA[whatGroup = System.getProperty("groupToRun"); 
       groups.containsKey(whatGroup); 
       ]]> 
       </script> 
      </method-selector> 
     </method-selectors> 
     <classes> 
      <class name="organized.chaos.GroupsPlayGround" /> 
     </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 

После того, как вы есть набор XML-файл, как это, вы можете указать имена групп с помощью аргумента JVM -DwhatGroup.

Вы также можете оживить скрипт beanshell, выбрав для запуска все, если никакие группы не были найдены с помощью аргумента JVM.

Для получения дополнительной информации вы можете обратиться к my blog post, чтобы получить полное представление о том, как работать с beanshell.

+0

@ javaXengine Если это сработало, можете ли вы, пожалуйста, принять мой ответ? –

+0

Мне было интересно, могу ли я использовать одно и то же для нескольких групп? Я попробовал это --DgroupToRun = group1, group2; но это вызывает ошибку. Я уверен, что должен быть способ сделать это. – javaXengine

+0

В этом случае вам сначала нужно проанализировать значение groupToRun (т. Е. Разбить его на основе запятых), получить значения split в списке, перебрать этот список и затем выполнить проверки. Это должно быть очень удобно. –

 Смежные вопросы

  • Нет связанных вопросов^_^