자동화테스트/Selenium2018. 12. 26. 08:00



TestNG는 단위 테스트, 기능 테스트, 엔드 투 엔드 테스트, UI 테스트 및 통합 테스트와 같은 여러 유형의 테스트 디자인을 다루는 테스트 프레임 워크입니다.

Testng 코드 에서 하나 또는 여러 개의 테스트 케이스를 실행할 수 있습니다 .

여러 테스트 사례를 실행하는 동안 테스트 우선 순위가 정의되지 않은 경우 TestNG는 모든 @Test에 우선 순위를 0으로 할당합니다.

지금, 달리는 동안; 낮은 우선 순위가 먼저 스케줄됩니다.

우선 순위없이 TestNG 코드 데모

모든 테스트 케이스를 통과하기 위해 시퀀싱이 필요한 시나리오를 생각해 보겠습니다.

시나리오 : "Facebook"이라고하는 특정 키워드로 Google 검색을 수행해야하는 코드를 생성하십시오. 이제 브라우저 제목이 "Facebook - Google 검색"으로 변경되었는지 확인하십시오.

참고 : 코드를 작성하는 각 단계는 별도의 메소드에 있어야 합니다.

방법 1 : 브라우저 열기 Firefox (openBrowser ())

방법 2 : Google.com 시작 (Google 시작 ())

방법 3 : "Facebook"(performSearchAndClick1stLink ())을 사용하여 검색 수행

방법 4 : Google 검색 페이지 제목 확인 (FaceBookPageTitleVerification ())

시나리오에 대한 코드 :

import org.openqa.selenium.By;			
import org.openqa.selenium.WebDriver;			
import org.openqa.selenium.firefox.FirefoxDriver;			
import org.testng.Assert;			
import org.testng.annotations.Test;			

public class Priority_In_testNG {		
    WebDriver driver;			

	    // Method 1: Open Brower say Firefox			
	    @Test		
	    public void openBrowser() {				
	        driver = new FirefoxDriver();				
	    }		

	    // Method 2: Launch Google.com			
	    @Test		
	    public void launchGoogle() {				
	        driver.get("http://www.google.co.in");						
	    }		
        
	    // Method 3: Perform a search using "Facebook"			
	    @Test		
	    public void peformSeachAndClick1stLink() {				
	        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
	    }		

	    // Method 4: Verify Google search page title.			
	    @Test		
	    public void FaceBookPageTitleVerification() throws Exception {				
	        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
	        Thread.sleep(3000);		
	        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
	    }		
	}	

코드 설명

앞서 언급했듯이 우리는 독립적 인 방법으로 각 작업을 수행하기위한 4 가지 테스트 케이스를 만들었습니다.

  • 첫 번째 방법 (openBrowser) 은 Firefox 브라우저를 초기화합니다.
  • 두 번째 방법 (launchGoogle) 은 Google.com을 실행하면 초기화 된 브라우저에 있다고 말합니다.
  • 세 번째 방법 (peformSeachAndClick1stLink) 은 검색 상자에서 xpath ( ".//*[t*le='Search ']")를 사용하여 검색어를 Facebook 으로 검색 하고
  • 네 번째이자 마지막 방법 (FaceBookPageTitleVerification) 은 Google의 검색 아이콘을 클릭하고 브라우저 제목이 Facebook - Google 검색 으로 변경되었는지 확인합니다 .

이제 비디오에 표시된대로 testNG를 사용하여이 코드를 실행하면 모든 테스트 케이스 에 오류가 있음을 알 수 있습니다. 실패 이유 : 이전 테스트 사례가 통과해야하므로 현재 실행중인 테스트 사례 만 통과합니다.

이 경우,

  • 실행되는 첫 번째 메소드는 openBrowser ()입니다. 그것은 의존성이 없기 때문에 통과되었습니다.
  • 실행 된 두 번째 메소드는 FaceBookPageTitleVerification ()입니다. 검색 버튼을 클릭하고 브라우저 제목을 확인하려고하기 때문에 오류가 발생했습니다.
  • 검색 활동이 프로세스가 아니면 다른 단계가 어떻게 통과 될 수 있는지를 알 수 있습니다. 따라서 이것이 내 테스트 케이스가 실패한 이유입니다.

PASSED: openBrowser

FAILED: FaceBookPageTitleVerification

FAILED: launchGoogle

FAILED: peformSeachAndClick1stLink

우선 순위에 대해 언급하지 않으면 testng은 코드에서의 구현 위치와 관계없이 메서드 이름의 사전 순으로 @Test 메서드를 실행합니다.

package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}

}

출력

I'm in method A 
I'm in method B 
I'm in method C 
I'm in method D 
I'm in method E 

랜덤 방식 (c, b, a, e, d)으로 메소드를 정의했지만, testng은 알파벳 순서를 고려하여 메소드 이름을 기반으로 메소드를 실행했으며 결과도 출력에 반영되었습니다.

testNG 메소드 실행시 우선 순위의 중요성

이전 예제에서이 시나리오를 통과하기 위해 필요한 시퀀싱을 보았으므로 Priority Parameter를 사용하여 이전 코드 부분을 수정하여 각 테스트가 우선 순위에 따라 실행되도록해야합니다.

이제 우리가 볼 수 있듯이 각 테스트 케이스에 우선 순위를 지정하면 우선 순위가 낮은 값이 먼저 실행됩니다.

실행중인 testNG의 우선 순위

import org.openqa.selenium.By;			
import org.openqa.selenium.WebDriver;			
import org.openqa.selenium.firefox.FirefoxDriver;			
import org.testng.Assert;			
import org.testng.annotations.Test;			

public class Priority_In_testNG {		
    WebDriver driver;			

    // Method 1: Open Browser say Firefox			
    @Test (priority=1)		
    public void openBrowser() {				
        driver = new FirefoxDriver();				
    }		

    // Method 2: Launch Google.com			
    @Test (priority=2)		
    public void launchGoogle() {				
        driver.get("http://www.google.co.in");						
    }		

    // Method 3: Perform a search using "Facebook"			
    @Test (priority=3)		
    public void peformSeachAndClick1stLink() {				
        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
    }		

    // Method 4: Verify Google search page title.			
    @Test (priority=4)		
    public void FaceBookPageTitleVerification() throws Exception {				
        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
        Thread.sleep(3000);		
        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
    }		
}	

코드 설명

각 테스트 케이스에 우선 순위를 지정한 후에 아래에 언급 된 Video-2와 같이 testNG를 사용하여 위의 코드를 실행합니다.

여기에서 테스트 사례의 우선 순위를 확인할 수 있습니다. 우선 순위가 낮은 테스트 케이스가 먼저 실행됩니다. 즉, 테스트 케이스에서 우선 순위에 따라 순차적으로 실행됩니다. 따라서 모든 테스트 케이스가 이제 전달됩니다.

이클립스의 콘솔을 주목하자.

출력 :

PASSED: openBrowser

PASSED: launchGoogle

PASSED: peformSearchAndClick1stLink

PASSED: FaceBookPageTitleVerification

0 번이 가장 높은 우선 순위를 가지며 (우선 실행될 것입니다) 주어진 우선 순위에 따라 우선 순위가 올라갑니다. 즉 0은 1보다 높은 우선 순위를 갖습니다. 1은 2보다 높은 우선 순위를 갖는 식입니다.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=1)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

출력

I'm in method E 
I'm in method A 
I'm in method D 
I'm in method C 
I'm in method B 

여기서는 우선 순위를 0,1,3,6,9로 제공했습니다. 따라서 우선 순위가 0 인 메소드가 먼저 실행 된 후 우선 순위가 1 인 메소드가 실행됩니다. 알파벳 순서 메쏘드 이름은 우리가 우선 순위를 제공함에 따라 고려되지 않을 것입니다.

우선 순위가 동일한 메소드 :

메소드에 동일한 우선 순위가 포함될 가능성이 있습니다. 이 경우, testng은 우선 순위가 동일한 메소드 이름의 사전 순을 고려합니다.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=6)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

출력

I'm in method E 
I'm in method D 
I'm in method A 
I'm in method C 
I'm in method B 

여기서 'e'와 'd'는 우선 순위 값에 따라 실행됩니다. 그러나 메소드 'a'와 'c'는 동일한 우선 순위 값 (6)을 포함합니다. 그래서, 여기 testng는 'a'와 'c'의 알파벳 순서를 고려하여 그에 따라 실행합니다.

우선 순위가 지정된 (우선 순위가 동일한) 방법과 우선 순위가없는 방법을 결합합니다.

이 경우 하나의 testng 클래스에서 두 가지 사례를 다룰 것입니다.

  1. 동일한 우선 순위 값을 갖는 메소드.
  2. 둘 이상의 비 우선 순위 방법.
package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

	@Test()
	public void c_method(){
		System.out.println("I'm in method C");
	}
	@Test()
	public void b_method(){
		System.out.println("I'm in method B");
	}
	@Test(priority=6)
	public void a_method(){
		System.out.println("I'm in method A");
	}
	@Test(priority=0)
	public void e_method(){
		System.out.println("I'm in method E");
	}
	@Test(priority=6)
	public void d_method(){
		System.out.println("I'm in method D");
	}
}

출력:

I'm in method B 
I'm in method C 
I'm in method E 
I'm in method A 
I'm in method D 
PASSED: b_method 
PASSED: c_method 
PASSED: e_method 
PASSED: a_method 
PASSED: d_method 

설명:

우선 순위 : 비 우선 순위 방식 : 'c'및 'b': 알파벳 순서에 따라 'b'가 먼저 실행 된 다음 'c'가 실행됩니다.

두 번째 우선 순위 : 우선 순위가 지정된 방법 : 'a', 'e'및 'd': 'e'가 우선 순위가 가장 높았으므로 먼저 실행되었습니다 (0). 'a'와 'd'메소드의 우선 순위가 같기 때문에 testng은 메소드 이름의 알파벳 순서를 고려했습니다. 그래서 그들 사이에 'a'가 먼저 실행 된 다음 'd'가 실행됩니다.

TestNG의 대소 문자 구분

귀하의 정보를 위해서 testNG에서 우선 순위를 정의하는 표준 구문이 있습니다. @Test (priority = 4) , @Test (PRIORITY = 1) 와 같은 다른 구문으로 정의한다고 가정하면 IDE에서 컴파일 오류로 표시합니다 . 아래 이미지 참조 :

테스트 사례의 TestNG 우선 순위

결론:

특정 순서로 일련의 테스트 케이스를 실행해야한다는 요구 사항이 있으면 testNG를 실행 도구로 사용하여 Priority를 사용하여 쉽게 수행 할 수 있음을 알았다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터