Selenium WebDriver로 회귀 테스트를 수행하는 방법은 무엇입니까?

프로그래밍

웹 애플리케이션을 테스트하는 동안 항상 테스트를 위한 올바른 도구를 선택하는 것이 중요합니다. 이는 재작업을 줄이고 테스트 실행 속도를 높이는 데 도움이 됩니다. 선택한 도구는 자동화 프레임워크와 함께 회귀 테스트를 효과적으로 수행하는 데 항상 도움이 되어야 합니다.

회귀 테스트 일반적으로 기존 모듈의 변경 또는 수정, 기능의 향상, 구성의 변경 또는 기능과 관련된 기타 사소한 또는 중요한 업그레이드로 인해 이전에 테스트된 모듈에서 수행됩니다. 또한 제기된 버그에 대한 수정 사항이 제공될 때마다 수행될 수도 있습니다.

재테스트 및 회귀 테스트는 언제 수행합니까?

기존 결함에 대한 개발자의 수정 사항이 예상대로 작동하는지 확인하기 위해 재테스트가 수행됩니다.

회귀 테스트는 코드 향상, 기존 결함에 대한 결함 수정 또는 구성 업그레이드로 인한 수정의 결과로 새로운 결함이 발생하지 않도록 이전에 테스트한 모듈에서 수행됩니다.

회귀를 수행하는 것이 정말로 필요합니까?

위의 점을 정당화하기 위해 예를 보자. 의류 브랜드가 온라인 쇼핑을 위한 웹사이트를 시작하고 신용 카드를 결제 수단으로 구현한 시나리오를 고려해 보겠습니다. 이것은 테스트를 위해 성공적으로 개발 및 배포되었습니다. 테스터는 이 빌드에서 기능 및 비기능 테스트를 수행하고 동작에 불일치가 있는 경우 결함을 제기했습니다. 결함이 수정되었고 빌드가 재배포되었으며 테스트가 성공적으로 수행되었으며 이 기능이 활성화되었습니다. 몇 주 후에 사용자가 직불 카드를 통해 지불할 수 있는 또 다른 새로운 기능이 설계되었습니다. 이 새로운 모듈은 테스트를 위해 개발 및 배포되었습니다. 새 모듈이 성공적으로 테스트되었습니다. 이제 이전 모듈에서 회귀가 수행되지 않고 코드가 프로덕션에 배포되면 어떻게 될까요? 개발자가 결함 수정 사항이 없는 다른 버전의 코드를 배포했거나 개발자가 일부 다른 기능을 손상시켜 기존 작업 기능이 중단되는 하나 이상의 결함을 수정했을 가능성이 있습니다.

이는 회사에 막대한 손실을 초래할 것입니다. 따라서 새로운 기능을 추가하거나 결함에 대해 수행한 수정이 이전 작업 모듈을 손상시키지 않도록 항상 회귀 테스트를 수행하는 것이 좋습니다.

따라서 회귀는 테스트에서 중요한 역할을 하며 테스트 수명 주기 전반에 걸쳐 수행됩니다.

회귀 테스트의 이점은 무엇입니까?

1. 회귀 테스트를 통해 코드 수정으로 인해 발생하는 오류가 없음을 확인합니다.

2. 기능의 정확성을 보장합니다.

3. 코드 변경으로 인해 수정된 결함이 다시 발생하지 않도록 합니다.

4. 개발 초기에 버그를 식별하는데 도움이 됩니다.

셀레늄은 무엇인가?

Selenium은 웹 애플리케이션 테스트에 널리 사용되었습니다. 오픈 소스 자동화 도구이기 때문에 테스트 커뮤니티에서 널리 사용되었습니다. Selenium은 서로 다른 목적을 위해 설계된 XNUMX가지 주요 구성 요소로 구성되며 이러한 구성 요소의 선택은 테스트 요구 사항에 따라 다릅니다. 네 가지 구성 요소는 다음과 같습니다.

  • 셀레늄 IDE
  • 셀레늄 RC
  • 셀레늄 웹 드라이버
  • 셀레늄 그리드

Selenium WebDriver는 다양한 웹 애플리케이션을 테스트하기 위한 브라우저 자동화 스크립트를 작성하고 실행할 수 있는 인터페이스를 제공하는 브라우저 전용 드라이버입니다. Java, Python, Ruby 등과 같은 모든 인기 있는 언어에 대한 바인딩을 제공합니다. 다음과 같은 모든 주요 브라우저를 지원합니다. 크롬, 파이어 폭스, Opera, 즉, Edge 등. 소스 코드를 컴파일하기 위해 Maven 또는 ANT와 같은 다양한 프레임워크와 통합될 수 있습니다. 애플리케이션 테스트 및 보고를 위해 TestNG와 같은 테스트 프레임워크와 통합하여 자동화 테스트를 용이하게 할 수도 있습니다. 지속적 통합 또는 지속적 전달 자동화 빌드 및 배포를 위해 Jenkins와 통합할 수 있습니다.

Selenium WebDriver를 사용하여 회귀 테스트를 효과적으로 수행하는 방법을 살펴보겠습니다.

Selenium WebDriver를 사용하여 회귀 테스트를 수행하는 방법은 무엇입니까?

좋은 자동화 프레임워크는 애플리케이션의 주요 기능을 다루는 재사용 가능한 코드나 모듈을 많이 포함하는 방식으로 설계 및 개발되어야 합니다. 회귀 테스트 전용 자동화 도구는 없습니다. 자동화 프레임워크는 회귀 테스트를 효과적으로 지원하는 방식으로 구현되어야 합니다. Selenium은 다양한 브라우저에서 웹 애플리케이션을 테스트하는 데 사용할 수 있는 자동화 도구입니다. Selenium으로 프레임워크를 설계할 때 재사용할 수 있는 여러 메서드가 포함되어야 하며 프레임워크의 모든 부분에 새 코드를 추가하는 것도 쉽게 수행되어야 합니다.

회귀 테스트를 수행하기 위한 Selenium 프레임워크를 어떻게 설계합니까?

Selenium WebDriver를 사용하여 회귀 테스트를 실행하는 데 정말 도움이 될 몇 가지 접근 방식을 생각해 냈습니다.

 

 

1. 매개변수화

회사에서 Chrome 브라우저에서만 지원되는 핵심 기능이 있는 웹 사이트를 시작하는 시나리오를 고려하십시오. 웹 사이트가 구축, 배포 및 테스트되면 웹 사이트가 활성화됩니다. 며칠 후 회사는 Firefox에서 브라우저 지원을 확장할 계획입니다. 브라우저 지원이 확장되면 테스트를 위해 새 빌드가 배포됩니다. 기존 프레임워크가 회귀 테스트를 지원하도록 변경하도록 설계되지 않은 경우 시간이 많이 소요되는 작업입니다. 이를 처리하기 위해 매개변수화를 사용하여 Selenium 프레임워크에서 최소한의 노력과 최소한의 코드 변경으로 다른 값을 추가하고 회귀 테스트를 실행할 수 있습니다. 이 매개변수화는 두 가지 쉬운 방법으로 수행할 수 있습니다.

1. TestNG에서 Parameter 주석 사용하기

2. 매개변수 정의 및 속성 파일에서 읽기

회귀를 수행하는 데 매우 도움이 될 위의 두 가지 방법을 사용하여 코드를 구현해 보겠습니다.

회귀 테스트를 수행하기 위해 매개변수 주석을 사용하는 방법은 무엇입니까?

이 주석은 testing.xml 파일에서 매개변수의 이름과 값을 정의하여 메소드 내부의 값을 전달하는 데 사용됩니다.

이것이 Selenium Webdriver를 사용하여 회귀를 수행하는 데 어떻게 도움이 될지 궁금하십니까?

아래에서 구현을 보자.

소개 부분에서 설명했듯이 회사에서 브라우저 지원을 다른 브라우저로 확장하려는 경우 testing.xml 파일의 매개 변수 필드에 값을 정의하는 것이 쉽습니다.

패키지 com.LoginPage;

가져오기 java.util.concurrent.TimeUnit;

수입 org.openqa.selenium.By;

org.openqa.selenium.WebDriver 가져오기;

org.openqa.selenium.chrome.ChromeDriver 가져오기;

org.openqa.selenium.firefox.FirefoxDriver 가져오기;

수입 org.openqa.selenium.opera.OperaDriver;

org.testng.annotations.AfterClass 가져오기;

org.testng.annotations.AfterTest 가져오기;

org.testng.annotations.BeforeTest 가져오기;

org.testng.annotations.Parameters 가져오기;

org.testng.annotations.Test 가져오기;

공개 클래스 LoginTest {

공개 WebDriver 드라이버;

@BeforeTest

@Parameters("브라우저")

공개 무효 설정(문자열 브라우저) {

if(browser.equalsIgnoreCase("파이어폭스")) {

System.setProperty("WebDriver.gecko.driver", "C:\\Users\\shalini\\Downloads\\geckodriver-v0.26.0-win64\\geckodriver.exe");

드라이버 = 새로운 FirefoxDriver();

}

else if (browser.equalsIgnoreCase("GoogleChrome")) {

System.setProperty("WebDriver.chrome.driver", "C:\\Users\\shalini\\Downloads\\chromedriver\\chromedriver.exe");

드라이버 = 새로운 ChromeDriver();

}

}

@테스트

공개 무효 로그인() {

드라이버.get("https://opensource-demo.orangehrmlive.com/");

드라이버.관리().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

문자열 pageTitle = driver.getTitle();

System.out.println("이 페이지의 제목은 ===> 입니다. " +pageTitle);

driver.findElement(By.id("txtUsername")).clear();

driver.findElement(By.id("txtUsername")).sendKeys("관리자");

driver.findElement(By.id("txtPassword")).clear();

driver.findElement(By.id("txtPassword")).sendKeys("admin123");

driver.findElement(By.id("btnLogin")).click();

}

@애프터테스트

공개 무효 tearDown() {

드라이버 종료();

}

}

TestNG.xml 파일

위 코드에서 애플리케이션이 Firefox 및 Chrome 브라우저만 지원할 때 testNG.xml 파일의 매개변수 이름과 값을 사용하여 이 두 브라우저로 테스트를 매개변수화했습니다. 이제 애플리케이션이 성공적으로 테스트되었으며 코드가 프로덕션 환경에 배포됩니다.

다음 릴리스에서 회사가 Opera에서 브라우저 지원을 확장할 계획이라면?

대답은 매우 간단합니다. 아래와 같이 TestNG.xml의 매개변수 태그에 다른 브라우저 값을 추가하기만 하면 됩니다.

Testng.xml 파일을 수정한 후 아래와 같이 메인 코드의 기능을 확장합니다.

if(browser.equalsIgnoreCase("Opera")) { System.setProperty("WebDriver.opera.driver","C:\\Users\\shalini\\Downloads\\operadriver\\operadriver_win64\\operadriver.exe");

드라이버 = 새로운 OperaDriver();

}

이렇게 하면 이미 존재하는 구현의 사소한 변경으로 새 빌드를 테스트할 수 있으며 이전 릴리스에 대한 회귀 테스트를 수행할 수도 있습니다. 데모 목적으로 응용 프로그램에서 로그인 기능만 사용했습니다. 테스트할 모듈이 여러 개 있을 때 이 접근 방식은 회귀 테스트를 수행하기가 매우 쉽습니다. 브라우저 유형뿐만 아니라 매개변수 섹션에서 다른 매개변수도 정의하여 요구사항에 따라 회귀를 수행할 수 있습니다.

회귀 테스트를 수행하기 위해 속성 파일에서 매개변수를 정의하는 방법은 무엇입니까?

속성 파일은 회귀 테스트를 효과적으로 수행하는 데 도움이 되는 자동화 프레임워크의 주요 기능 중 하나입니다.

기본 자동화 스크립트에서 사용할 수 있는 속성 파일에서 다른 키와 값을 정의할 수 있습니다. 웹 애플리케이션의 모든 모듈을 함께 통합할 수 있고 다양한 모듈에 대한 키와 값을 정의할 수 있습니다. 릴리스에 변경 사항이 있을 때 변경 사항을 수용하도록 속성 파일을 수정할 수 있습니다. 이 접근 방식은 매우 간단하고 구현 및 구성이 쉽습니다.

다음은 속성 파일에서 속성을 정의하고 메인 코드에서 필요한 속성을 읽는 간단한 코드입니다.

꾸러미 페이지;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IO 예외;

import java.util.속성;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterTest;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.Test;

공개 수업 데모 {

Web드라이버 드라이버;

@BeforeTest

공개 무효화 설정() {

시스템.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

드라이버 =  크롬드라이버();

}

@테스트

공개 무효화 로그인() 발생 IO 예외 {

속성 소품 =  속성();

FileInputStream 입력 =  FileInputStream("D:\\eclipse-workspace\\SeleniumRegression\\src\\Properties\\webpage.properties");

prop.load(입력);

//속성 파일에서 로그인 URL 값 읽기

문자열 login_url =prop.getProperty("loginURL");

드라이버.get(login_url);

//속성 파일에서 사용자 이름 값 읽기

문자열 사용자 이름 = prop.getProperty("사용자 이름");

//속성 파일에서 비밀번호 값 읽기

문자열 비밀번호 = prop.getProperty("비밀번호");

드라이버.findElement(By.id("txt사용자 이름")).sendKeys(사용자 이름);

드라이버.findElement(By.id("txtPassword")).sendKeys(비밀번호);

시스템.아웃.println(드라이버.getTitle());

}

@애프터테스트

공개 무효화 티어다운() {

드라이버 종료();

}

}

웹페이지.속성

########이 속성에는 웹 응용 프로그램의 URL이 포함되어 있습니다.#############

로그인URL = https://opensource-demo.orangehrmlive.com/

사용자 이름 = 관리자

비밀번호 = admin123

테스트NG.xml

<?xml 버전="1.0" 인코딩="UTF-8"?>

<도구 이름="테스트 스위트">

<테스트 이름="로그인 테스트">

<수업 이름="페이지.데모">

2. 그룹을 사용하여 회귀 테스트 실행

그룹을 사용하여 회귀 테스트를 실행하는 것은 가장 널리 사용되는 접근 방식 중 하나입니다. TestNG는 테스터가 특정 그룹의 테스트를 고유한 이름으로 묶은 다음 특정 그룹만 함께 실행할 수 있는 "그룹"이라는 기능을 제공합니다. 이 기능을 통해 회귀 테스트를 위한 그룹을 만들고 필요할 때 실행할 수 있습니다.

아래는 "RegressionTest" 그룹 아래에 그룹화된 테스트를 포함하는 웹 애플리케이션 테스트를 위한 다양한 테스트를 포함하는 간단한 코드로, 특히 회귀 테스트를 위한 테스트를 실행합니다.

꾸러미 페이지;

import 정적 인 org.testng.Assert.주장Equals;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.testng.annotations.AfterTest;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.Test;

공개 수업 로그인 페이지 {

Web드라이버 드라이버;

@BeforeTest

공개 무효화 설정() {

시스템.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

드라이버 =  크롬드라이버();

}

@Test(그룹 = "회귀 테스트")

공개 무효화 로그인() {

문자열 login_url = "https://opensource-demo.orangehrmlive.com/";

드라이버.get(login_url);

드라이버.관리().창().최대화();

드라이버.관리().timeouts().pageLoadTimeout(10, TimeUnit.);

드라이버.findElement(By.id("txt사용자 이름")).sendKeys("관리자");

드라이버.findElement(By.id("txtPassword")).sendKeys("admin123");

시스템.아웃.println(드라이버.getTitle());

}

@테스트

공개 무효화 대시보드() {

드라이버.findElement(By.id(“menu_dashboard_index”)).click();

문자열 textPresent = driver.findElement(By.xpath("//*[@id=\"콘텐츠\"]/div/div[1]/h1″)).getText();

문자열 textToBePresent = "대시보드";

주장Equals(textPresent, textToBePresent);

}

@테스트

공개 무효화 테스트3() {

시스템.아웃.println("테스트 3입니다.");

}

@Test(그룹 = "회귀 테스트")

공개 무효화 테스트4() {

시스템.아웃.println("테스트 4입니다.");

}

@테스트

공개 무효화 테스트5() {

시스템.아웃.println("테스트 5입니다.");

}

@Test(그룹 = "회귀 테스트")

공개 무효화 테스트6() {

시스템.아웃.println("테스트 6입니다.");

}

@테스트

공개 무효화 테스트7() {

시스템.아웃.println("테스트 7입니다.");

}

@애프터테스트

공개 무효화 티어다운() {

드라이버 종료();

}

}

<?xml 버전="1.0" 인코딩="UTF-8"?>

<도구 이름="테스트 스위트">

<테스트 이름="로그인 테스트">

<포함 이름="회귀 테스트"/>

<수업 이름="페이지.로그인페이지">

프레임워크에서 이 접근 방식을 구현하면 스모크 테스트를 실행하기 위한 그룹, 온전성 테스트를 실행하기 위한 그룹 등과 같은 다양한 방식으로 테스트를 그룹화할 수도 있습니다. TestNG.xml 파일에서 그룹 이름을 언급해야 합니다(이 경우에는 RegressionTest ) 해당 그룹과 관련된 테스트를 실행합니다.

3. 회귀 테스트 수행을 위한 태그 사용

Cucumber 프레임워크는 특정 기준에 따라 테스트를 그룹화하고 필요할 때마다 실행하는 특수 기능을 제공합니다. "tags"라고 하는 이 고유한 기능은 Cucumber 프레임워크의 TestRunner 파일에 정의되어 있습니다. 특정 태그로 정의된 모든 테스트는 Selenium Webdriver를 사용하여 웹 애플리케이션에서 테스트 케이스에 대한 회귀 테스트를 수행하는 가장 쉽고 간단한 접근 방식이 되는 한 번에 실행할 수 있습니다.

기능 파일

특색: 웹 응용 프로그램의 로그인 기능을 테스트하려면

@회귀 테스트

시나리오 : 사용자가 자신의 계정에 성공적으로 로그인할 수 있는지 확인

주어진 사용자가 웹페이지로 이동

인셀덤 공식 판매점인 사용자는 "관리자" 및 "admin123"

그때 사용자가 성공적으로 로그인해야 합니다.

시나리오 : 사용자가 장바구니에 제품을 추가할 수 있는지 확인

주어진 사용자는 홈페이지로 연결됩니다.

인셀덤 공식 판매점인 사용자가 제품을 선택하고 추가합니다.

그때 선택한 제품은 장바구니에서 찾아야 합니다.

@회귀 테스트

시나리오 : 사용자가 내 계정에서 세부 정보를 업데이트할 수 있는지 확인합니다.

주어진 사용자가 내 계정 버튼을 클릭합니다.

인셀덤 공식 판매점인 사용자가 주소 세부정보를 업데이트합니다.

그때 새로운 세부 정보는 사용자 정보 페이지에 저장되고 업데이트되어야 합니다.

테스트 러너 파일

꾸러미 시험;

import org.junit.runner.RunWith;

import 오이.api.CucumberOptions;

import 오이.api.junit.오이;

@RunWith(오이.수업)

@CucumberOptions(기능 = "D:\\eclipse-workspace\\CucumberDemo\\src\\main\\resources\\Features\\Login.Feature",

접착제 = "단계",

플러그인 = {"예쁜", "html:target/cucumber"},

흑백 = 참된,

태그 = {“회귀 테스트”}

)

공개 수업 테스트 러너 {

}

위의 코드에 따라 "RegressionTest" 아래에 그룹화된 테스트 케이스가 실행됩니다. 따라서 태그를 사용하여 회귀 테스트를 수행하는 것은 Selenium 자동화 프레임워크에서 구현할 수 있는 효율적인 접근 방식 중 하나입니다.

마무리…!

자동화 프레임워크는 항상 프레임워크에서 쉽게 변경할 수 있는 방식으로 설계되어야 합니다. 프레임워크를 설계하는 동안 회귀 테스트를 염두에 두는 것은 관련된 재작업의 대부분을 없앨 것입니다. 지금까지 웹 애플리케이션을 테스트하는 동안 회귀 테스트를 수행하는 몇 가지 접근 방식을 보여 드렸습니다. 셀레늄 웹 드라이버. 아래 의견 섹션에서 Selenium Webdriver를 사용하여 회귀 테스트를 수행하는 동안 처리한 다른 효과적인 접근 방식을 알려주십시오. 이 기사를 동료 및 친구와 공유하고 지식을 공유하십시오. 즐거운 테스팅...!