Selenium 프레임워크: 데이터, 키워드 및 하이브리드 기반

Selenium 뼈대?

The Selenium 자동화 프레임워크 코드 유지 관리를 쉽고 효율적으로 만드는 코드 구조입니다. 프레임워크가 없으면 사용자는 재사용 가능하지도 읽을 수 없는 동일한 위치에 "코드"와 "데이터"를 배치할 수 있습니다. 프레임워크는 코드 재사용성 증가, 더 높은 이식성, 스크립트 유지 관리 비용 감소, 더 나은 코드 가독성 등과 같은 유익한 결과를 낳습니다.

유형 Selenium 뼈대

크게 XNUMX가지가 있습니다 프레임워크 유형 에 의해 생성 Selenium 수동 테스트 케이스를 자동화하는 WebDriver

  • 데이터 기반 프레임워크
  • 키워드 기반 프레임워크
  • 하이브리드 기반 프레임워크

유형 Selenium 뼈대

데이터 기반 프레임워크 Selenium

데이터 기반 프레임워크 Selenium 테스트 케이스에서 데이터 세트를 분리하는 방법입니다. 데이터 세트가 테스트 케이스에서 분리되면 코드를 변경하지 않고도 특정 기능에 맞게 쉽게 수정할 수 있습니다. 다음과 같은 외부 파일에서 테스트 케이스 및 스위트를 가져오는 데 사용됩니다. 뛰어나다, .csv, .xml 또는 일부 데이터베이스 테이블.

데이터 기반 프레임워크 Selenium

Excel을 읽거나 쓰기 위해 Apache는 매우 유명한 라이브러리 POI를 제공합니다. 이 라이브러리는 두 가지 모두를 읽고 쓸 수 있을 만큼 충분합니다. XLS and XLSX 엑셀의 파일 형식.

읽다 XLS 파일, HSSF 구현은 POI 라이브러리에서 제공됩니다.

읽다 XLSX, XSSF 의 구현 POI 도서관 선택이 될 것입니다. 이러한 구현을 자세히 살펴보겠습니다.

우리는 이미 데이터 기반 테스트에 대해 배웠습니다. 이전 튜토리얼

키워드 기반 프레임워크 Selenium

키워드 기반 프레임워크 Selenium 는 공통적인 기능과 명령어 집합에 대한 키워드를 분리하여 자동화된 테스트 속도를 높이는 데 사용되는 방법입니다. 수행해야 할 모든 작업과 명령어는 Excel 시트와 같은 외부 파일에 작성됩니다. 사용자는 테스트하려는 기능을 쉽게 제어하고 지정할 수 있습니다.

전체 프레임워크는 다음과 같습니다.

키워드 기반 프레임워크 Selenium

보시다시피 5단계 프레임워크입니다. 단계별로 자세히 살펴보겠습니다.

단계 1)

  • 드라이버 스크립트 Execute.java는 ReadGuru99ExcelFile.java를 호출합니다.
  • ReadGuru99ExcelFile.java에는 Excel에서 데이터를 읽는 POI 스크립트가 있습니다.

단계 2)

  • ReadGuru99ExcelFile.java는 TestCase.xlsx에서 데이터를 읽습니다.
  • 시트의 모양은 다음과 같습니다.

키워드 기반 프레임워크 Selenium

  • Excel 파일에 작성된 키워드에 따라 프레임워크가 UI에서 작업을 수행합니다.
  • 예를 들어 '로그인' 버튼을 클릭해야 합니다. 이에 따라 Excel에는 '클릭'이라는 키워드가 있습니다. 이제 AUT는 로그인 버튼을 식별하기 위해 페이지에 수백 개의 버튼을 가질 수 있습니다. Excel에서는 개체 이름을 loginButton으로 입력하고 개체 유형을 이름으로 입력합니다(위 이미지에서 강조 표시된 행 참조). 개체 유형은 Xpath, 이름 CSS 또는 기타 값일 수 있습니다.

단계 3) ReadGuru99ExcelFile.java는 이 데이터를 드라이버 스크립트 Execute.java에 전달합니다.

단계 4)

  • 모든 UI 웹 요소에 대해 요소 로케이터(예: Xpath, 이름, CSS 경로, 클래스 이름 등)를 배치할 개체 저장소를 만들어야 합니다.

키워드 기반 프레임워크 Selenium

  • Execute.java(드라이버 스크립트)는 전체 개체 저장소를 읽고 이를 변수에 저장합니다.
  • 이 객체 저장소를 읽으려면 이를 읽을 수 있는 getObjectRepository 메소드가 있는 ReadObject 클래스가 필요합니다.
  • 키워드 기반 프레임워크 Selenium

알림: 객체 저장소를 만들어야 하는 이유가 무엇인지 생각할 수도 있습니다. 답변은 코드 유지 관리에 도움이 됩니다. 예를 들어, 우리는 10개의 다른 테스트 사례에서 이름 = btnlogin인 버튼을 사용하고 있습니다. 앞으로 개발자는 이름을 btnlogin에서 submit으로 변경하기로 결정했습니다. 10개의 테스트 케이스 모두를 변경해야 합니다. 개체 저장소의 경우 저장소에서 한 번만 변경하면 됩니다.

단계 5)

  • 드라이버는 Excel 및 개체 저장소의 데이터를 UI로 전달합니다.Opera수업
  • UIOperation 클래스에는 엑셀에 언급된 CLICK, SETTEXT 등과 같은 키워드에 해당하는 작업을 수행하는 기능이 있습니다.
  • UIOpera수업은 Java 웹 요소에 대한 작업을 수행하기 위한 코드의 실제 구현을 포함하는 클래스

키워드 기반 프레임워크 Selenium

전체 프로젝트는 다음과 같습니다.

키워드 기반 프레임워크 Selenium

예를 살펴보겠습니다.

테스트 시나리오 : 우리는 2개의 테스트 케이스를 실행하고 있습니다.

  • 테스트 케이스 1:
  • 고토 https://demo.guru99.com/V4/
  • 사용자 ID를 입력하세요
  • 암호를 입력
  • 재설정을 클릭하십시오.
  • 테스트 케이스 2:
  • 고토 https://demo.guru99.com/V4/
  • 사용자 ID를 입력하세요
  • 암호를 입력
  • 로그인을 클릭하십시오

객체.속성

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

ReadGuru99ExcelFile.java

package excelExportAndFileIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadGuru99ExcelFile {
    
    public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{
    //Create a object of File class to open xlsx file
    File file =    new File(filePath+"\\"+fileName);
    //Create an object of FileInputStream class to read excel file
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    //Find the file extension by spliting file name in substing and getting only extension name
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    //Check condition if the file is xlsx file
    if(fileExtensionName.equals(".xlsx")){
    //If it is xlsx file then create object of XSSFWorkbook class
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    //Check condition if the file is xls file
    else if(fileExtensionName.equals(".xls")){
        //If it is xls file then create object of XSSFWorkbook class
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    //Read sheet inside the workbook by its name
    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);
     return guru99Sheet;    
    }
}

ReadObject.java

package operation;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadObject {
    Properties p = new Properties();
    public Properties getObjectRepository() throws IOException{
        //Read object repository file
        InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties"));
        //load all objects
        p.load(stream);
         return p;
    }
    
}

UIOperation.java

package operation;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UIOperation {
    WebDriver driver;
    public UIOperation(WebDriver driver){
        this.driver = driver;
    }
    public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{
        System.out.println("");
        switch (operation.toUpperCase()) {
        case "CLICK":
            //Perform click
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            //Set text on control
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            //Get url of application
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            //Get text of an element
            driver.findElement(this.getObject(p,objectName,objectType)).getText();
            break;
        default:
            break;
        }
    }
    
    /**
     * Find element BY using object type and value
     * @param p
     * @param objectName
     * @param objectType
     * @return
     * @throws Exception
     */
    private By getObject(Properties p,String objectName,String objectType) throws Exception{
        //Find by xpath
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        //find by class
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        //find by name
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        //Find by css
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        //find by link
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        //find by partial link
        else if(objectType.equalsIgnoreCase("PARTIALLINK")){
            
            return By.partialLinkText(p.getProperty(objectName));
            
        }else
        {
            throw new Exception("Wrong object type");
        }
    }
}

ExecuteTest.java

package testCases;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class ExecuteTest {
@Test
    public void testLogin() throws Exception {
        // TODO Auto-generated method stub
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    //Create a loop over all the rows of excel file to read it
    for (int i = 1; i < rowCount+1; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i);
        //Check if the first cell contain a value, if yes, That means it is the new testcase name
        if(row.getCell(0).toString().length()==0){
        //Print testcase detail on console
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        //Call perform function to perform operation on UI
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            //Print the new testcase name when it started
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

실행 후 출력은 다음과 같습니다.

키워드 기반 프레임워크 Selenium

를 다운로드 Selenium 이 튜토리얼의 데모용 프로젝트 파일

하이브리드 기반 프레임워크

하이브리드 기반 프레임워크 in Selenium 키워드 중심 프레임워크와 데이터 중심 프레임워크의 장점을 모두 활용하는 개념입니다. 매뉴얼 테스터가 프레임워크 내 코딩 없이 키워드, 테스트 데이터, 객체 저장소만 보고 테스트 케이스를 생성할 수 있는 사용하기 쉬운 프레임워크입니다.

여기서 키워드는 Excel 파일을 사용하여 테스트 케이스를 유지 관리하고, 테스트 데이터는 공급자인 데이터를 사용합니다. 테스트 중 뼈대.

하이브리드 기반 프레임워크

여기 하이브리드 프레임워크에서는 키워드 기반 프레임워크에서 아무 것도 변경할 필요가 없습니다. 여기서는 ExecuteTest.java 파일을 HybridExecuteTest.java 파일로 바꾸면 됩니다.

하이브리드 기반 프레임워크

이 HybridExecuteTest 파일에는 데이터 공급자 개념으로 구동되는 키워드에 대한 모든 코드가 포함되어 있습니다.

하이브리드 프레임워크의 완전한 그림 표현은 다음과 같습니다.

하이브리드 기반 프레임워크

HybridExecuteTest.java

package testCases;
import java.io.IOException;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class HybridExecuteTest {
    WebDriver webdriver = null;
@Test(dataProvider="hybridData")
    public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception {
        // TODO Auto-generated method stub
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    //Call perform function to perform operation on UI
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    object = new Object[rowCount][5];
    for (int i = 0; i < rowCount; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i+1);
        //Create a loop to print cell values in a row
        for (int j = 0; j < row.getLastCellNum(); j++) {
            //Print excel data in console
            object[i][j] = row.getCell(j).toString();
        }
    }
    System.out.println("");
     return object;    
    }
}

요약

  • 다음을 사용하여 세 가지 유형의 테스트 프레임워크를 만들 수 있습니다. Selenium 웹드라이버.
  • A Selenium 데이터 기반, 키워드 기반, 하이브리드 프레임워크로 분류할 수 있는 자동화 프레임워크입니다.
  • 우리는 다음을 사용하여 데이터 기반 프레임워크를 달성할 수 있습니다. TestNG의 데이터 제공자입니다.
  • 키워드 중심 프레임워크에서는 키워드가 Excel 파일과 같은 일부 외부 파일에 작성되고 Java 코드가 이 파일을 호출하고 테스트 케이스를 실행합니다.
  • 하이브리드 프레임워크는 키워드 중심 프레임워크와 데이터 중심 프레임워크가 혼합된 것입니다.

를 다운로드 Selenium 이 튜토리얼의 데모용 프로젝트 파일