2017-12-05 7 views
0

여러 suiteXmlFiles가있는 매우 간단한 테스트 프로젝트 설정이 있습니다. 다음과 같이 치어 보인다 :maven surefire 플러그인을 통해 선택한 suiteXmlFile을 실행할 수 없습니다.

<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>testautomation</groupId> 
<artifactId>testautomation</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

<properties> 
    <log4j.version>2.8.2</log4j.version> 
    <selenium.version>2.53.0</selenium.version> 
    <testng.version>6.10</testng.version>  
    <relevantcodes.version>2.41.1</relevantcodes.version> 
    <aws-lambda-java-core.version>1.1.0</aws-lambda-java-core.version> 
    <aws-java-sdk-dynamodb.version>1.11.139</aws-java-sdk-dynamodb.version> 
    <rest-assured.verison>2.9.1-SNAPSHOT</rest-assured.verison> 
    <json-path.version>2.9.0</json-path.version> 
    <json.version>20160810</json.version> 
    <xml-path.version>2.9.0</xml-path.version> 
    <json-schema-validator.verison>2.9.0</json-schema-validator.verison> 
    <poi.verison>3.15</poi.verison> 
    <poi-ooxml.verison>3.15</poi-ooxml.verison> 
    <poi-ooxml-schemas.version>3.15</poi-ooxml-schemas.version> 
    <poi-scratchpad.version>3.2-FINAL</poi-scratchpad.version> 
    <jackson-databind.version>2.8.5</jackson-databind.version> 
    <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version> 
    <opencsv>3.10</opencsv> 
    <java.version>1.8</java.version> 
    <!-- <maven.jar.plugin.version>3.0.2</maven.jar.plugin.version> --> 
    <maven.jar.plugin.version>2.6</maven.jar.plugin.version> 
    <maven-install-plugin.version>2.5.2</maven-install-plugin.version> 

    <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version> 
    <!--<maven-surefire-plugin.version>2.12</maven-surefire-plugin.version> --> 
    <skipTests>false</skipTests> 
    <sometest>src/test/resources/testngxmls/sometest/test1.xml</sometest> 
    <smoketest>src/test/resources/testngxmls/smoketest/test2.xml</smoketest> 


</properties> 


<build> 
    <!-- <sourceDirectory>src</sourceDirectory> --> 
    <plugins> 

    <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven.compiler.plugin.version}</version> 
      <inherited>true</inherited> 
      <configuration> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
      </configuration> 
     </plugin>    

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>${maven.jar.plugin.version}</version> 
      <inherited>true</inherited> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>${maven-install-plugin.version}</version> 
      <executions> 
       <execution> 
        <id>default-install</id> 
        <phase>install</phase> 
        <goals> 
         <goal>install</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>${maven-surefire-plugin.version}</version> 
      <configuration> 
       <skipTests>${skipTests}</skipTests> 
       <suiteXmlFiles> 
        <xmlFile>${sometest}</xmlFile> 
        <xmlFile>${smoketest}</xmlFile> 
       </suiteXmlFiles> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 

    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>${selenium.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.testng</groupId> 
     <artifactId>testng</artifactId> 
     <version>${testng.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.relevantcodes</groupId> 
     <artifactId>extentreports</artifactId> 
     <version>${relevantcodes.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
     <version>${poi.verison}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-ooxml</artifactId> 
     <version>${poi-ooxml.verison}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-ooxml-schemas</artifactId> 
     <version>${poi-ooxml-schemas.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-scratchpad</artifactId> 
     <version>${poi-scratchpad.version}</version> 
    </dependency> 

    <!--adding only required jars of AWS --> 

    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-lambda-java-core</artifactId> 
     <version>${aws-lambda-java-core.version}</version> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk-dynamodb</artifactId> 
     <version>${aws-java-sdk-dynamodb.version}</version> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.jayway.restassured</groupId> 
     <artifactId>rest-assured</artifactId> 
     <version>${rest-assured.verison}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.jayway.restassured</groupId> 
     <artifactId>json-path</artifactId> 
     <version>${json-path.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.jayway.restassured</groupId> 
     <artifactId>xml-path</artifactId> 
     <version>${xml-path.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.jayway.restassured</groupId> 
     <artifactId>json-schema-validator</artifactId> 
     <version>${json-schema-validator.verison}</version> 
     <!-- <scope>test</scope> --> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.opencsv</groupId> 
     <artifactId>opencsv</artifactId> 
     <version>${opencsv}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson-databind.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>${json.version}</version> 
    </dependency> 

    <dependency> 

     <groupId>com.google.inject</groupId> 
     <artifactId>guice</artifactId> 
     <version>3.0</version> 
    </dependency> 

    <!-- <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-text</artifactId> 
     <version>1.1</version> 
    </dependency> --> 
</dependencies> 

<repositories> 
    <repository> 
     <id>sonatype</id> 
     <url>https://oss.sonatype.org/content/repositories/snapshots/</url> 
     <snapshots /> 
    </repository> 
</repositories> 

을이 pom.xml 파일과 함께. mvn 명령 줄을 사용하여 선택된 제품군을 독립적으로 실행하려고 시도했지만 모든 suiteXmlFiles를 계속 실행합니다. 내가 사용한 명령은 다음과 같습니다.

이 명령을 실행하면 $ mvn -e clean test -Dsurefire.xmlFile=sometest이 실행되고 가장 가까운 스위트를 실행 한 다음 smoketest에서 모든 테스트를 실행합니다. 아래에 나열된 모든 명령에 대한 유사한 관찰.

$ mvn -e clean test -Dsurefire.suiteXmlFile=sometest $ mvn -e clean test -Dsurefire.suiteXmlFiles=sometest

$ mvn -e clean test -Dsurefire.suiteXmlFile=sometest $ mvn -e clean test -Dsurefire.suiteXmlFiles=sometest

이 테스트를 실행할 수있는 방법이 있나요 :

$ mvn -e clean test -Dsurefire.xmlFiles=sometest

나는 심지어 각각의 명령을 suiteXmlFile 및 파일 태그에 XMLFILE를 변경하고 실행 시도 독립적으로 suiteXmlFiles에 집착합니다. 이것은 직설적 인 기능처럼 보입니다.이 기능을 구현하는 것이 왜 그렇게 어려운 것인지 궁금해합니다.

+0

다른 프로필을 만들 수 있습니다. – nayakam

+0

@nayakam 나는 이것이 가능하다는 것을 알지만, 이것은 매우 간단한 기능처럼 보입니다. 왜 이것이 작동하지 않는지 궁금합니다. 내가 잘못하고있는 근본적인 것이 있습니까? –

+0

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#suiteXmlFiles 2.2 이상 버전으로 사용해보십시오. HTH – nayakam

답변

1

testng-6.13.1 및 maven-surefire-plugin 2.20에서 문제가없는 것 같습니다. 아티팩트 버전을 확인하거나 Dsurefire.suiteXmlFile 옵션에 올바른 파일 경로를 전달해야합니다.

MVN 명령 :

[INFO] Running TestSuite 
This is TestNG-Test-Suite-First Example 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.345 s - in TestSuite 
[INFO] 
[INFO] Results: 
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 

MVN 명령 :

mvn test -Dsurefire.suiteXmlFiles=src/test/resources/testXml2.xml 

출력이 테스트 스위트 :

[INFO] ------------------------------------------------------- 
[INFO] T E S T S 
[INFO] ------------------------------------------------------- 
[INFO] Running TestSuite 
@BeforeTest 
This is TestNG-Test-Suite-Second Example 
@AfterTest 

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.399 s - in TestSuite 
[INFO] 
테스트 스위트 1

mvn test -Dsurefire.suiteXmlFiles=src/test/resources/testXml1.xml 

출력

프로젝트 설정

의 pom.xml

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

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
        <configuration> 
         <source>1.8</source> 
         <target>1.8</target> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.20</version> 
        <configuration> 
         <suiteXmlFiles> 
          <suiteXmlFile>src/test/resources/testXmlAll.xml</suiteXmlFile> 
          <suiteXmlFile>src/test/resources/testXml1.xml</suiteXmlFile> 
          <suiteXmlFile>src/test/resources/testXml2.xml</suiteXmlFile> 
         </suiteXmlFiles> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 

testXml1.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="test1"> 
    <test name="test1"> 
     <classes> 
      <class name="TestNgSuiteFirstTest"/> 
     </classes> 
    </test> 
</suite> 

testXml2.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="test2"> 
    <test name="test2"> 
     <classes> 
      <class name="TestNgSuiteSecondTest"/> 
     </classes> 
    </test> 
</suite> 

XML이 각 스위트 파일을 가리 키도록 매개 변수로

구성 속성 변수를 벌 파일을 전달하는 단지 해결 방법입니다 매개 변수

로 스위트 파일을 전달합니다.

<properties> 
    <test1SuiteFile>${project.basedir}/src/test/resources/testXml1.xml</test1SuiteFile> 
     <test2SuiteFile>${project.basedir}/src/test/resources/testXml2.xml</test2SuiteFile> 
     <!-- Default suites --> 
     <testAllSuiteFile>${project.basedir}/src/test/resources/testXmlAll.xml</testAllSuiteFile> 
     <suiteFile>${testAllSuiteFile}</suiteFile> 
    </properties> 

업데이트 플러그인 :

<configuration> 
    <suiteXmlFiles> 
      <suiteXmlFile>${suiteFile}</suiteXmlFile> 
     </suiteXmlFiles> 
    </configuration> 

mvn clean test 
mvn test -DsuiteFile=${test2SuiteFile} 
mvn test -DsuiteFile=${test1SuiteFile},${test2SuiteFile} 

그렇지 않으면 다음과 같이 구성을 정의하고 단일 파일을 전달할 명령 줄에서 매개 변수로 파일 이름을 전달합니다

mvn test -DsuiteFile=testXml1.xml 

    <configuration> 
      <suiteXmlFile>${project.basedir}/src/test/resources/${suiteFile} 
          </suiteXmlFile> 
    </suiteXmlFiles> 
</configuration> 
+0

이상하게도 전체 xml 파일 경로를 하드 코딩하면 완벽하게 작동하는 것 같습니다. 그러나 을 매개 변수로 사용하면 작동하지 않는 것 같습니다. 예를 들어 pom.xml을 사용하면 suiteXmlFiles 값에 매개 변수화 된 속성 값을 사용하고 suitname을 사용하여 mvn 명령을 실행하면 동일한 문제가 발생합니다. –

+0

스위트 파일을 매개 변수로 전달하기위한 대답이 업데이트되었습니다. – nayakam

+0

에는 매개 변수화 된 모든 값이 포함되어 있거나 $ {suiteFile} 만 포함되어 있다고 가정합니다. testXmlAll 및 기타 XML의 내용은 어떻게됩니까? 나는 당신이 말한 것을 따라했지만 아직 작동하지 않습니다. xml 파일의 내용을 포함하여 코드의 정확한 상태를 반영하도록 주석을 업데이트 할 수 있습니까? –

관련 문제