2014-11-07 1 views
1

다른 구성 (예 : 브라우저, OS)을 사용하는 두 개의 다른 TestSuites (SUITE1.XML 및 SUITE2.xml)가 있습니다 ...testng.xml에서 두 개의 .xml 파일을 병렬로 실행할 수 있습니까?

나는 testong.xml 내에서 SUITES를 호출하여 saucelabs에서 실행합니다. 실행 잘 ... 만 나는 걱정이 ... 나는이 스위트 룸 대신 순차적으로 병렬을 실행하려면, 내가 얻을 출력은 내가 웹 주로 답변을 많이 검색 한

 
[TestNG] Running: 
    /Users/muzamilabbasi/Automation/BaublebarTest/Suite1.xml 

This is Browser String FIREFOX 
This is Platform String WIN8 
This is Version String 25 
This is Browser String FIREFOX 
This is Platform String WIN8 
This is Version String 25 
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). 
log4j:WARN Please initialize the log4j system properly. 
Page Title isGoogle 
Page Title isGoogle 

=============================================== 
mysuite1 
Total tests run: 2, Failures: 0, Skips: 0 
=============================================== 

[TestNG] Running: 
    /Users/muzamilabbasi/Automation/BaublebarTest/Suite2.xml 

This is Browser String FIREFOX 
This is Platform String XP 
This is Version String 7 
This is Browser String FIREFOX 
This is Platform String XP 
This is Version String 7 
Page Title isGoogle 
Page Title isGoogle 

입니다

입니다 누구인지 내가 얻을 수있는 ANT {PARALLEL} 작업을 사용하고 있는데 어떻게 할 수 있습니까? 예를 들어주세요. 제발 도와주세요.

내가 맥 OS & TestNG를 6.8.6

답변

2

을 사용하고 당신 대신 당신이 하나의 testng.xml 정장이 개 테스트를 작성할 수 있으며, 병렬로 실행할 수 있습니다 .... 병렬로 정장을 실행할 필요가 없습니다. 당신이 다른 테스트에 대한 두 개의 서로 다른 구성을 사용하려면

(브라우저 OS 등 /) testng.xml에서 매개 변수로 적절한 노드

각 스레드를 리디렉션하는 셀레늄 그리드를 사용하게 아래에서 살펴보고
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 

<suite name="Test Suit" verbose="2" parallel="tests"> 

<test name="Regression Test"> 
    <parameter name="browser" value="firefox" /> 
    <parameter name="os" value="win7" /> 
    <classes> 
     <class name="pakagename.classname" /> 
    </classes> 
</test> 

<test name="Smoke Test"> 
    <parameter name="browser" value="chrome" /> 
    <parameter name="os" value="mac" /> 
    <classes> 
     <class name="pakagename.classname" /> 
    </classes> 
</test> 

예를

또한 ANT 나 MAVEN을 사용하여 두 testng.xml 정장을 실행할 수 있습니다 될 수있다. 그러나 나는 1 등을 선호한다. 아래 섹션을 MAVEN 프로젝트의 pom.xml에 추가하십시오.

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.17</version> 
      <configuration> 
       <suiteXmlFiles> 
        <suiteXmlFile>testng1.xml</suiteXmlFile> 
        <suiteXmlFile>testng2.xml</suiteXmlFile> 
       </suiteXmlFiles> 
       <reportsDirectory>${basedir}/src/test/java/</reportsDirectory> 
      <testFailureIgnore>true</testFailureIgnore> 
      </configuration> 
     </plugin> 
     <plugins> 
<build> 
+0

Bharat 우리는 ANT가있는 것처럼 maven을 사용하지 않으므로 어딘가에 ANT에 들어갈 수 있는지 볼 것입니다. –

+0

@Muzamil : 나는 가지고 있습니다. 개미에서 일하지 않았다. ANT에서 호출하여 '팀 슬리퍼'솔루션을 사용해 볼 수 있습니다. master xml을 사용하여 병렬로 슬레이브 xml을 실행하려면 master xml에 '를 추가하십시오. 다시 한번 이것이 당신의 목적에 도움이 될지, 힌트에 불과할지 모르겠습니다. – Babulu

+0

감사합니다. Bharat, 확실하게 시험해 봅니다. –

5

또 다른 옵션은 스위트 룸을 사용하는 것입니다. 나는이 설정으로 작업 한 이후로 잠시 동안은 말하고 있지만, 시작하기에 충분한 세부 정보를 여기서 찾을 수 있기를 바랍니다. 당신이 스위트 룸의 스위트 XML을 정의하는 것,

<suite name="Suite2"> 
    <test name="test2"> 
     <classes> 
      <class name="fully.qualified.ClassName" /> 
     </classes> 
     <methods> 
      <include name="method2" /> 
     </methods> 
    </test> 
</suite> 

그런

<suite name="Suite1"> 
    <test name="test1"> 
     <classes> 
      <class name="fully.qualified.ClassName" /> 
     </classes> 
     <methods> 
      <include name="method1" /> 
     </methods> 
    </test> 
</suite> 

과 ... :

첫째, 당신은 두 개 (또는 그 이상)의 스위트 룸 XML 파일을 정의하는 것 파일 :

<suite name="suite of suites"> 
    <suite-files> 
     <suite-file path="Suite1.xml" /> 
     <suite-file path="Suite2.xml" /> 
    </suite-files> 
</suite> 

suite-file 경로 값은 XM 현재 스위트 룸의 스위트 XML 파일의 상대 경로입니다, 메모를 수행 L 파일에 저장합니다. 파일이 같은 디렉토리에 있으면 파일 이름 만 있으면됩니다.

또한 두 XML 유형 모두 <parameter> 태그를 지원합니다. 표준 스위트 XML은 <suite><test> 레벨에서 모두 읽을 수 있습니다. 스위트 룸 XML 파일의 <suite> 수준의 <parameter> 태그도 작동합니다.

마지막으로 실행시 스위트 파일 인수로 스위트 스위트 XML 파일 만 전달하면됩니다.

편집 : 다음은 어떻게 두 개의 스위트를 병렬로 실행할 수 있었는지 보여줍니다. 트릭은 내 main() 메소드를 올바르게 설정하고있었습니다.

public class TestRunner 
{ 
    public static void main(String[] args) 
    { 
     TestNG testng = new TestNG(); 
     TestListenerAdapter adapter = new TestListenerAdapter(); 
     List<String> suites = new ArrayList<String>(); 

     testng.addListener(adapter); 
     suites.add(args[0]); 
     testng.setTestSuites(suites); 
     testng.setParallel("parallel"); 
     testng.setSuiteThreadPoolSize(5); 
     testng.setOutputDirectory("path to output"); 
     testng.run(); 
    } 
} 

그런 다음 명령 줄에서 :

java -jar ParallelSuiteDemo.jar SuiteOfSuites.xml 

참고, 내 항아리와 모든 XML 파일이 구성과 같은 디렉토리에 있었다. 디렉터리 구조를 사용하려면 명령 줄 args 및 <suite-file> 항목을 올바르게 구성해야합니다.

이렇게하면 내 두 개의 suite.xml 파일이 Selenium Grid에서 병렬로 실행됩니다.

솔직히 말해서 더 좋은 방법이있을 수 있습니다. 이것은 내가 비슷한 것을하려고 할 때 나를 위해 일한 것입니다.

+0

안녕하세요, Tim은 마스터 및 종속 제품군과 함께이 구성을 실제로 시도했지만 문제는 소스 테스트를 사용하여 테스트를 실행하고 있으므로 SUITE1.xml을 20 개의 테스트 케이스와 20 개의 테스트 케이스를 가진 SUite2.xml)을 서로 다른 설정으로 사용한다면 MasterSUite.xml 내에서 호출했습니다. SUITE1.xml을 완료 한 후 SUITE2.xml을 실행하면 SUITE1.xml을 먼저 실행하지 않습니다. .... 내가 원하는 것은 (SUITE1.xml과 SUITE2.xml) 모두 동시에 실행하는 것입니다. –

+0

당신이 말하는 것을 봅니다. 특정 코드를 찾으려면 이전 코드를 살펴볼 필요가 있습니다.하지만 내가 원하는 것을 설명하는 것처럼이 코드를 사용했습니다. 유일한 차이점은 비록 소스 코드와는 대조적으로 내부 그리드에서 작동하고 있었기 때문입니다 ... 구성이 코드에 모두 포함되어 있기 때문에 Sauce가 이런 종류의 작업을한다고 생각하겠습니다. 며칠이 걸리 겠지만 제 일을 끝내고 이것을 다시 가져 와서 소스와 같은 것을 시도하고 원하는 결과를 얻을 수 있기를 바라는 나의 발견을 게시 할 것입니다. 나는 이것을 위해 어딘가에서 모호한 환경이 있음을 상기 한 것 같다. –

+0

팀, 정말 고마워 .. 고마워 .. –

0

예, 당신은

<suite-files suitethreadpoolsize="2"> 
    <suite-file path="suite1.xml" /> 
    <suite-file path="suite2.xml" /> 
</suite-files> 

자세한 내용 http://testng.org/doc/documentation-main.html#parallel-running

감사의 TestNG의 공식 웹 사이트를 참조하십시오 TestNG를

의 "suitethreadpoolsize"속성을 사용하여이 작업을 수행 할 수 있습니다!