2017-11-10 2 views
-3

Java/Selenium/TestNG를 사용하여 회사의 내부 애플리케이션의 각 페이지에 약간의 기능을 실행하는 탐색 테스트 스위트를 구성했습니다.TestNG를 사용하여 Test 클래스의 첫 번째 테스트 만 실행하는 방법

내 NavigationTests 디렉토리에 ApplicationsIT라는 테스트 클래스가 있다고 가정 해보십시오. 이 클래스에는 10 개의 @Tests 주석이 있으므로 NavigationTests 전체를 실행할 때마다 10 개의 테스트가 모두 실행됩니다.

그러나 시간을 위해서 각 테스트 클래스에서 첫 번째 테스트 만 실행하는 방법이 있습니까?

"(alwaysRun = false)"태그를 망칠려고했지만 예상했던대로 작동하지 않는 것 같습니다.

저는 이것이 잘못 구성된 질문/게시물이라는 것을 알고 있습니다. 그래서 제가 할 수있는 모든 것을 분명히 밝혀 드리겠습니다.

+1

이것은 실제로 TestNG 질문이며 Selenium과 관련이 없습니다. 나는 다른 사람들을 혼란스럽게하지 않도록 태그를 제거 할 것이다. TestNG 문서를 보셨습니까? 최소한 이렇게하는 것이 하나의 방법 일 것이라고 확신합니다. – JeffC

답변

1

이 작업을 동적으로 수행하는 데는 최소한 두 가지 방법이 있습니다.

  1. 구현을 사용하여 org.testng.IAnnotationTransformer. 여기서 당신은 기본적으로 인터페이스 org.testng.IAnnotationTransformer을 구현하고 transform() 메서드 내에서 들어오는 testMethodjava.lang.reflect.Method 개체를 검사하여 해당 이름이 실행하거나 실행하지 않을 항목과 일치하는지 확인합니다. JVM 인수를 통해 여러 메소드를 실행/실행하지 않을 의도를 지정할 수 있습니다. 일치하는 것이 있으면 기본적으로 annotation.setEnabled(false)을 통해 테스트 방법을 사용 중지합니다. annotationorg.testng.annotations.ITestAnnotation입니다. suite xml 파일의 <listeners> 태그를 사용하여 서비스 로더 (또는)를 통해이 수신기에서 연결해야합니다. 청취자에 대한 자세한 내용은 내 블로그 게시물을 참조하십시오. here
  2. 또 다른 옵션은 beanshell을 사용하는 것입니다. 아래 샘플은 beanshell을 사용하는 방법을 보여줍니다. 내 블로그 게시물 here에서 beanshells로 작업하는 방법에 대한 자세한 내용을 볼 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="47230879_Suite" parallel="false" verbose="2"> 
    <test name="47230879_test" verbose="2"> 
     <method-selectors> 
      <method-selector> 
       <script language="beanshell"> 
        <![CDATA[ 
         try { 
          input = System.getProperty("methods",""); 
          if (input.trim().isEmpty()) { 
           return true; 
          } 
          methods= input.split(","); 
          for (int i =0; i< methods.length; i++) { 
           if (method.getName().equals(methods[i])) { 
            return true; 
           } 
          } 
          return false; 
         } catch(e) { 
          print(e); 
         } 
        ]]> 
       </script> 
      </method-selector> 
     </method-selectors> 
     <classes> 
      <class name="com.rationaleemotions.stackoverflow.qn47230879.TestclassSample"/> 
     </classes> 
    </test> 
</suite> 

테스트 클래스는

package com.rationaleemotions.stackoverflow.qn47230879; 

import org.testng.annotations.Test; 

public class TestclassSample { 
    @Test 
    public void a() { 
     System.err.println("a()"); 
    } 

    @Test 
    public void b() { 
     System.err.println("b()"); 
    } 

    @Test 
    public void c() { 
     System.err.println("c()"); 
    } 

    @Test 
    public void d() { 
     System.err.println("d()"); 
    } 

    @Test 
    public void e() { 
     System.err.println("e()"); 
    } 
} 

당신은 JVM 인수를 통해 어떤 방법을 지정하지 않고 제품군을 실행하는 경우는, 모든 메소드가 실행 얻을 아래처럼 보이지만 경우를 통해 메소드 이름의 무리를 지정 JVM 인수 -Dmethods=a,b,c (예를 들어)의 경우 해당 메소드 만 실행됩니다.

관련 문제