2012-07-09 2 views
10

TestNG에 많은 테스트 스위트가 있습니다. 이들은 XML 파일입니다. 필자는 Maven에서 통합 테스트를 실행할 때 여러 XML Suite를 선택할 수 있기를 원합니다.Maven surefire 플러그인을 매개 변수화하여 실행할 TestNG 스위트를 선택할 수 있습니다.

현재 내가 같이 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 개의 스위트 룸 또는 1 개의 스위트 룸을 가질 수 있습니다.

어떻게 pom.xml에서 "suiteXmlFiles"섹션 전체를 매개 변수화 할 수 있습니까? 내가있어 모든 스위트 룸을 넣은 다음 TestNG의 제품군에서 그룹을 사용하여 바로 선택한 테스트를 실행하지 않으 : 검사 그룹을 주어진 일치

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

실행 모든 것이 나를 위해 옵션을 선택하지 않습니다. 그 이유는 그룹 필터를 사용하여 모든 테스트 스위트를 실행 한 후에 생성되는 보고서가 선택한 테스트 스위트가 실행되었을 때의 보고서와 다르기 때문입니다.

답변

0

당신은 groups 매개 변수를 사용하거나 명령 줄에서 -Dgroups = ...을 지정할 수 있습니다

(JUnit4.8과 TestNG를/JUnit47 제공자가 + 만) 그룹이 테스트. 여기에 지정된 그룹 중 하나와 함께 장식 된 클래스/메소드/etc만이 테스트 실행에 포함됩니다 (지정된 경우). JUnit의 경우이 매개 변수는 4.7 제공자의 사용을 강제합니다. suiteXmlFiles 매개 변수가 지정된 경우이 매개 변수는 으로 무시됩니다. .

+0

을 나는 시험 결과 보고서를 나누기 어쨌든 – maestr0

+0

유연한 여부 충분하지 유연 나는이 그룹을 사용하지 않는 것이 그것을 언급하지만, 그건 너의 유일한 선택. 그룹 단위의 유연성을 제공합니다. 물론 개별 테스트를 실행하는 것 이외에. –

5

우리의 테스트에서도이 문제가 발생했습니다. 지금 사용하는 현재 해결 방법은 속성 섹션에 속성 변수를 정의하고이를 sure-fire suiteXmlFiles 블록에 삽입하는 것입니다. 아무것도 명령 줄에서 지정하지 않으면 플러그인 섹션에서 다음

<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 개의 스위트 룸에 떨어질 것이다. 이 제품군 파일의 지정된 세트 킥오프하려면 그럼 당신은 할 수 있습니다 : 당신이, 인수 suiteXmlFiles 그냥 명령 줄에서 이것을 오버라이드 (override) 할 필요가 단지 쉼표를 받아 들여야한다는 기대 받는다는 문서에서 놀랍게도

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

을 testng xmls로 구분 된 목록 http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#suiteXmlFiles

누구든지 다른 더 좋은 방법이 있다면 공유하십시오.

+1

@ maestr0 도움을 주시면 답변을 수락으로 표시해주세요. – mekdev

+0

다른 방법은 다른 mvn -D 테스트 $ {path}/test1 테스트, mvn -D 테스트 $ {경로}/test2 테스트 및 종속성 다음에 하나씩 명령 집합을 실행하는 것입니다. org.apache.maven.plugins 받는다는 - 확실한 - 플러그인 2.12 <구성> $ {테스트} .XML Badrinath

+0

'-Dsurefire.suiteXmlFiles'을 대신 사용하십시오. 아래 내 대답을 참조하십시오. – norbertpy

12

suiteXmlFilesUser Property에 따르면, 당신은 사용할 수 있습니다

mvn test -Dsurefire.suiteXmlFiles=test1.xml,test2.xml 
+0

이 솔루션을 사용하면 pom.xml 파일에 태그를 지정할 필요가 없습니다. 가장 좋은 대답입니다. –