2017-09-14 7 views
-1
I have a query regarding testng module. My requirement is to invoke different classes based on the parameter provided in the testng.xml 

Testng.XML 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite"> 
<parameter name="selenium.test" value="Web" /> 
    <parameter name="selenium.testtype" value="Sanity" /> 
    <parameter name="selenium.env" value="UAT" /> 
    <parameter name="selenium.browser" value="IE" /> 
    <parameter name="selenium.pbrowser" value="Mozilla" /> 

    <test name => 
    <classes> 
     <class name="test.DriverTest"/> 
    </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 

1) 위의 코드 조각에서 테스트 유형이 정상이면 Sanity.java 파일을 호출하려고합니다. 다른 테스트 유형이 회귀 인 것처럼, 나는 우리가 testng.xml 예에서 다른 XML 태그에 입력으로 매개 변수 값을 전달할 수 있습니다) testng.XML에서 제공된 매개 변수를 기반으로 다른 클래스로 호출

2 Regression.java

를 호출 할 : 다음 내가이 값이 매개 변수 값에 따라 dyanamically을 feeded하려면

3) 또한이 매개 변수에서 병렬 브라우저 테스트를 호출하는 방법을 입력 하시겠습니까? 내 테스트 유형이 정신 경우

+0

페이지에서 모든 @Test 방법을 실행 : [어떻게 X를해야합니까?] (https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current- Do-Do-Do-Do-Do-Do-Do-Do-Do-Do-X)에 대한 기대는 질문을하는 사용자가 자신의 질문에 답하는 연구뿐만 아니라 연구, 코드 시도 및 결과를 공유한다는 것입니다. 이것은 시간을내어 자신을 도우려는 것을 보여 주며, 명백한 답을 되풀이하지 않아도되며, 무엇보다도보다 구체적이고 관련성있는 답변을 얻는 데 도움이됩니다! 또한보십시오 : [ask] – JeffC

답변

0

1) 위의 코드에서, 나는 다른 테스트 유형이 회귀 경우, 내가

Regression.java를 호출 원하는 곳 Sanity.java 파일을 호출 할

TestNG는 그룹이라는 개념을 제공하므로 해결 될 것입니다. @Test 메서드마다 groups 특성을 추가 한 다음 suite xml 파일에서 실행할 그룹을 선택하고 선택할 수 있습니다. 자세한 내용은 공식 문서 here을 참조하십시오.

2) 우리는 testng.xml 예에서 다른 XML 태그를 입력으로 매개 변수 값을 전달할 수 있습니다 :이 값이 dyanamically 매개 변수 값을 기준으로 feeded하려면 다음 경우

확실하지가 후에 무엇 하지만 testng suite xml 파일의 매개 변수는 본질적으로 항상 정적입니다. 그들은 suite XML 파일을 변경하거나 (또는) org.testng.IAlterSuiteListener과 같은 TestNG 수신기를 사용하여 다른 것을 기반으로 매개 변수를 변경하지 않는 한 변경할 수 없습니다. 다음은 샘플을 보여줍니다이다 나는

매개 변수는이 리스너는 jvm_로 시작 JVM 인수를 찾습니다

package com.rationaleemotions.stackoverflow.qn46216357; 

import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class SampleTestClass { 

    @Test 
    @Parameters("name") 
    public void testMethod(String name) { 
     System.err.println("Hello " + name); 
    } 
} 

를 주입 할 것으로 예상 테스트 클래스에 대해 이야기하고 그 이름의 매개 변수와 일치하고있는 무슨 suite xml을 찾고 발견 된 경우 JVM 인수에서 보낸 값으로 매개 변수 값을 업데이트합니다. 그래서이 방법을 사용하면 문자 그대로 당신이 얻은 것을 얻을 수 있습니다. 당신이 볼 수 있듯이 스위트 XML, 나는

그래서 바로 경우, 매개 변수 이름 알 수없는의 값을 정의

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="46216357_Suite" verbose="2"> 
    <listeners> 
     <listener class-name="com.rationaleemotions.stackoverflow.qn46216357.ParameterChangerListener"/> 
    </listeners> 
    <parameter name="name" value="Unknown"/> 
    <test name="46216357_test"> 
     <classes> 
      <class name="com.rationaleemotions.stackoverflow.qn46216357.SampleTestClass"/> 
     </classes> 
    </test> 
</suite> 

처럼 보이는 방법은 다음과

package com.rationaleemotions.stackoverflow.qn46216357; 

import org.testng.IAlterSuiteListener; 
import org.testng.xml.XmlSuite; 

import java.util.List; 
import java.util.Map; 

public class ParameterChangerListener implements IAlterSuiteListener { 
    @Override 
    public void alter(List<XmlSuite> suites) { 
     XmlSuite suite = suites.get(0); 

     for (Map.Entry<String, String> each : suite.getParameters().entrySet()) { 
      //Check to see if we were given any JVM arguments with the prefix as "jvm_" followed 
      //by the text of the parameter name. 
      String sysValue = System.getProperty("jvm_" + each.getKey()); 
      if (sysValue != null && !sysValue.trim().isEmpty()) { 
       each.setValue(sysValue); 
      } 
     } 
    } 
} 

입니다 suite xml을 클릭하고 원하는 IDE에서 실행하면 출력은 아래와 같이 보입니다.

... 
... TestNG 6.12 by Cédric Beust ([email protected]) 
... 
Hello Unknown 
PASSED: testMethod("Unknown") 

=============================================== 
    46216357_test 
    Tests run: 1, Failures: 0, Skips: 0 
=============================================== 

=============================================== 
46216357_Suite 
Total tests run: 1, Failures: 0, Skips: 0 
=============================================== 

그러나 동일한 제품군을 실행하는 경우 JVM 인수 -Djvm_name을 전달하면 출력이 달라집니다.-Djvm_name=Rambo

... 
... TestNG 6.12 by Cédric Beust ([email protected]) 
... 
Hello Rambo 
PASSED: testMethod("Rambo") 

=============================================== 
    46216357_test 
    Tests run: 1, Failures: 0, Skips: 0 
=============================================== 

=============================================== 
46216357_Suite 
Total tests run: 1, Failures: 0, Skips: 0 
=============================================== 

3) 또한,이 파라미터의 입력에서 병렬 브라우저 테스트를 호출하는 방법 : 여기 람보로 값을 전달하고, 상기 런 출력입니까?

나는 이것을 조금 바꿔서 병렬 모드를 JVM 인수로 읽고이를 바탕으로 병렬 실행 전략을 변경하는 것이 좋습니다. 내가 위에서 공유로 당신은 기본적으로 IAlterSuiteListener 구현의 동일한 종류를 사용하고 아래와 같이 볼 수 있었다 :

import org.testng.IAlterSuiteListener; 
import org.testng.xml.XmlSuite; 

import java.util.List; 

public class ParallelExecutorSetter implements IAlterSuiteListener { 
    @Override 
    public void alter(List<XmlSuite> suites) { 
     XmlSuite suite = suites.get(0); 
     String parallelMode = System.getProperty("parallelMode"); 
     XmlSuite.ParallelMode mode = XmlSuite.ParallelMode.getValidParallel(parallelMode); 
     if (mode != null) { 
      suite.setParallel(mode); 
     } 
    } 
} 

그래서 당신은 이제 JVM 인수를 통해 전달하여 병렬 모드를 변경할 수 있습니다. 예를 들어, -DparallelMode=methodsparallel

+0

당신의 제안에 대해 Krishnan에게 감사드립니다. 나는 그것을 통합 할 것이다. – Priya

+0

질문이 해결 된 경우 제 답변을 수락하십시오. –