2017-01-31 5 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}을 (를) 제공했습니다. testng.xml을 실행할 때 JVM 인수에서 다음을 지정합니다. -Dtestng.groups = group2 group2 테스트 만 실행합니다. 그러나 group1, group2 및 group3에서 모든 테스트를 실행합니다.

문제가 올바르게 발생합니까? 특정 그룹 실행 집합 만 확인하려면 어떻게합니까? 도움을 주셔서 감사합니다.

답변

2

TestNG가 제공해야하는 Beanshell 기능을 활용 해보십시오.

그 방법에 관계없이 당신이 당신의 테스트 스위트를 실행하는 방법 다음 TestNG를의 당신의 치어 파일과 관련이 없으며, 상기 플러그 (또는)를 사용하여 IDE를 통해

  • 중 하나를 받는다는 통해
  • , 상기 받는다는 관련성
  • 있다

스위트 파일의 메서드 선택기는 항상 사용됩니다. 이 같은 제품군 XML 파일이 있으면

<?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 --> 

아래와 같이 간단히 말해서

, 당신은 당신이 JVM 인수 -DwhatGroup를 통해 그룹 이름을 지정할 수 있습니다으로 Beanshell를 사용하는 방법 선택기를 정의해야합니다.

또한 JVM 인수를 통해 그룹을 찾지 못하면 모든 것을 실행하도록 선택하여 beanshell 스크립트를 양보 할 수 있습니다.

자세한 내용은 my blog post을 참조하여 beanshell을 사용하는 방법을 완전히 이해하십시오.

+0

@javaXengine 효과가 있다면 제 대답을 수락 하시겠습니까? –

+0

여러 그룹에서 같은 것을 사용할 수 있는지 궁금합니다. 나는 이것을 시도했다. -DgroupToRun = group1, group2; 그러나 이것은 오류를 던집니다. 나는 그 일을 할 수있는 방법이 있어야한다고 확신합니다. – javaXengine

+0

그런 경우 먼저 groupToRun 값을 구문 분석 (예 : 쉼표를 기준으로 분할)하고 분할 값을 목록으로 가져 와서 해당 목록을 반복 한 다음 검사를 실행해야합니다. 그것은 아주 많이해야합니다. –