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

Selenium Framework는 무엇입니까?

Selenium Framework는 코드 유지 관리를 쉽게하는 코드 구조입니다. 프레임 워크가 없으면 "코드"와 "데이터"를 다시 사용할 수없고 읽을 수없는 동일한 장소에 배치합니다. 프레임 워크를 사용하면 코드 재사용 증가, 휴대 성 향상, 스크립트 유지 관리 비용 감소, 코드 가독성 향상 등과 같은 유익한 결과를 얻을 수 있습니다.

수동 테스트 케이스를 자동화하기 위해 Selenium WebDriver에서 만든 세 가지 유형의 프레임 워크가 주로 있습니다

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

Selenium Framework : 키워드 기반 및 하이브리드

데이터 기반 테스트 프레임 워크

에서  데이터 중심의 프레임 워크 우리의 테스트 데이터는 모두 같은 일부 외부 파일에서 생성되는 엑셀 , CSV, XML 또는 일부 데이터베이스 테이블. 이전 튜토리얼 에서 데이터 기반 테스트 에  대해 이미 배웠습니다.

키워드 기반 테스트 프레임 워크 :

키워드 기반 테스트 프레임 워크에서 모든 작업 및 지침은 Excel 워크 시트와 같은 일부 외부 파일에 작성됩니다. 전체 프레임 워크가 어떻게 생겼는지 보여줍니다.

Selenium Framework : 키워드 기반 및 하이브리드

보시다시피 5 단계 프레임 워크입니다. 단계적으로 자세히 공부합시다.

1 단계)

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

2 단계)

  • ReadGuru99ExcelFile.java는 TestCase.xlsx에서 데이터를 읽습니다.
  • 다음은 시트가 어떻게 보이는지입니다.

Selenium Framework : 키워드 기반 및 하이브리드

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

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

단계 4)

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

Selenium Framework : 키워드 기반 및 하이브리드

  • Execute.java (드라이버 스크립트)는 전체 객체 저장소를 읽고이를 변수에 저장합니다.
  • 이 객체 저장소를 읽으려면 읽기 위해 getObjectRepository 메소드가있는 ReadObject 클래스가 필요하다.

    Selenium Framework : 키워드 기반 및 하이브리드

참고 : 왜 객체 저장소를 만들어야하는지 생각할 수 있습니다. 대답은 코드 유지 관리에 도움이됩니다. 예를 들어, 10 개의 다른 테스트 케이스에서 name = btnlogin 인 버튼을 사용하고 있습니다. 나중에 개발자는 btnlogin에서 submit으로 이름을 변경하기로 결정합니다. 10 가지 테스트 케이스 모두를 변경해야합니다. 오브젝트 저장소의 경우 저장소에서 한 번만 변경하십시오.

단계 5)

  • 드라이버는 Excel & Object Repository에서 UIOperation 클래스로 데이터를 전달합니다.
  • UIOperation 클래스에는 CLICK, SETTEXT 등의 키워드에 해당하는 액션을 수행하는 기능이 있습니다. Excel에서 언급했습니다.
  • UIOperation 클래스는 웹 요소에 대한 연산을 수행하는 코드의 실제 구현을 갖는 Java 클래스입니다.

Selenium Framework : 키워드 기반 및 하이브리드

전체 프로젝트는 다음과 같이 보입니다.

Selenium Framework : 키워드 기반 및 하이브리드

예제를 살펴 보겠습니다.

테스트 시나리오

  • 2 개의 테스트 케이스를 실행 중입니다.
  • 테스트 케이스 1 :
  • Goto  http://demo.guru99.com/V4/
  • 사용자 ID 입력
  • 암호를 입력
  • 재설정을 클릭하십시오.
  • 테스트 케이스 2 :
  • Goto  http://demo.guru99.com/V4/
  • 사용자 ID 입력
  • 암호를 입력
  • 로그인을 클릭하십시오.

object.properties

url = http://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{
    // xlsx 파일을 열려면 File 클래스의 객체를 만듭니다.
    File file =    new File(filePath+"\\"+fileName);
    // 엑셀 파일을 읽을 FileInputStream 클래스의 객체를 만듭니다.
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    // substing에서 파일 이름을 분리하고 확장명 만 가져 와서 파일 확장자를 찾습니다.
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    // 파일이 xlsx 파일인지 확인합니다.
    if(fileExtensionName.equals(".xlsx")){
    // xlsx 파일이면 XSSFWorkbook 클래스의 객체를 만듭니다.
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    // 파일이 xls 파일인지 확인합니다.
    else if(fileExtensionName.equals(".xls")){
        // xls 파일이면 XSSFWorkbook 클래스의 객체를 만듭니다.
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    // 통합 문서 안의 시트를 이름으로 읽습니다.
    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":
            // 클릭 수행
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            // 컨트롤에 텍스트를 설정합니다.
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            // 응용 프로그램의 URL을 가져옵니다.
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            // 요소의 텍스트를 가져옵니다.
            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{
        // xpath로 찾기
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        // 클래스로 찾기
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        // 이름으로 찾기
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        // css로 찾기
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        // 링크로 찾기
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        // 부분 링크로 찾기
        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 자동 생성 메소드 스텁
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
// 키워드 시트 읽기
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
// Excel 파일에서 행 수 찾기
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    // 엑셀 파일의 모든 행에 루프를 작성하여 읽습니다.
    for (int i = 1; i < rowCount+1; i++) {
        // 모든 행을 반복합니다.
        Row row = guru99Sheet.getRow(i);
        // 첫 번째 셀에 값이 들어 있는지 확인하십시오. 예이면 새 테스트 사례 이름입니다.
        if(row.getCell(0).toString().length()==0){
        // 콘솔에 테스트 케이스 정보를 출력한다.
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        // UI에서 작업을 수행하기 위해 함수 호출 수행
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            // 시작할 때 새로운 테스트 케이스 이름을 출력한다.
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

실행 후 출력은 다음과 같이 보입니다.

Selenium Framework : 키워드 기반 및 하이브리드

이 튜토리얼의 데모 용 Selenium Project 파일 첨부하였습니다.

KeywordDrivenFramework.z01

KeywordDrivenFramework.zip

하이브리드 테스트 프레임 워크

하이브리드 테스트 프레임 워크는 키워드 및 데이터 기반 프레임 워크의 장점을 사용하는 개념입니다.

여기서는 키워드를 위해 Excel 파일을 사용하여 테스트 케이스를 유지하고 테스트 데이터의 경우 Testng 프레임 워크의 제공자 인 데이터를 사용할 수 있습니다 .

Selenium Framework : 키워드 기반 및 하이브리드

여기 하이브리드 프레임 워크에서 Keyword driven framework에서 아무것도 변경할 필요가 없습니다. 여기서는 ExecuteTest.java 파일을 HybridExecuteTest.java 파일로 대체하기 만하면됩니다.

Selenium Framework : 키워드 기반 및 하이브리드

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

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

Selenium Framework : 키워드 기반 및 하이브리드

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 자동 생성 메소드 스텁
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    // UI에서 작업을 수행하기 위해 함수 호출 수행
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
// 키워드 시트 읽기
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
// Excel 파일에서 행 수 찾기
    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 WebDriver를 사용하여 세 가지 유형의 테스트 프레임 워크를 만들 수 있습니다.
  • 이들은 데이터 기반, 키워드 기반 및 하이브리드 테스트 프레임 워크입니다.
  • 우리는 TestNG의 데이터 공급자를 사용하여 데이터 기반 프레임 워크를 구현할 수 있습니다.
  • 키워드 기반 프레임 워크에서 키워드는 Excel 파일과 같은 외부 파일에 작성되고 Java 코드는이 파일을 호출하고 테스트 사례를 실행합니다.
  • 하이브리드 프레임 워크는 키워드 기반 및 데이터 기반 프레임 워크를 혼합 한 것입니다.

이 튜토리얼의 데모 용 Selenium Project 파일 첨부하였습니다.

HybridFramework (2).z01

HybridFramework (2).zip


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