Selenium 프레임워크: 데이터, 키워드 및 하이브리드 기반
Selenium 뼈대?
The Selenium 자동화 프레임워크 코드 유지 관리를 쉽고 효율적으로 만드는 코드 구조입니다. 프레임워크가 없으면 사용자는 재사용 가능하지도 읽을 수 없는 동일한 위치에 "코드"와 "데이터"를 배치할 수 있습니다. 프레임워크는 코드 재사용성 증가, 더 높은 이식성, 스크립트 유지 관리 비용 감소, 더 나은 코드 가독성 등과 같은 유익한 결과를 낳습니다.
유형 Selenium 뼈대
크게 XNUMX가지가 있습니다 프레임워크 유형 에 의해 생성 Selenium 수동 테스트 케이스를 자동화하는 WebDriver
- 데이터 기반 프레임워크
- 키워드 기반 프레임워크
- 하이브리드 기반 프레임워크
데이터 기반 프레임워크 Selenium
데이터 기반 프레임워크 Selenium 테스트 케이스에서 데이터 세트를 분리하는 방법입니다. 데이터 세트가 테스트 케이스에서 분리되면 코드를 변경하지 않고도 특정 기능에 맞게 쉽게 수정할 수 있습니다. 다음과 같은 외부 파일에서 테스트 케이스 및 스위트를 가져오는 데 사용됩니다. 뛰어나다, .csv, .xml 또는 일부 데이터베이스 테이블.
Excel을 읽거나 쓰기 위해 Apache는 매우 유명한 라이브러리 POI를 제공합니다. 이 라이브러리는 두 가지 모두를 읽고 쓸 수 있을 만큼 충분합니다. XLS and XLSX 엑셀의 파일 형식.
읽다 XLS 파일, HSSF 구현은 POI 라이브러리에서 제공됩니다.
읽다 XLSX, XSSF 의 구현 POI 도서관 선택이 될 것입니다. 이러한 구현을 자세히 살펴보겠습니다.
우리는 이미 데이터 기반 테스트에 대해 배웠습니다. 이전 튜토리얼
키워드 기반 프레임워크 Selenium
키워드 기반 프레임워크 Selenium 는 공통적인 기능과 명령어 집합에 대한 키워드를 분리하여 자동화된 테스트 속도를 높이는 데 사용되는 방법입니다. 수행해야 할 모든 작업과 명령어는 Excel 시트와 같은 외부 파일에 작성됩니다. 사용자는 테스트하려는 기능을 쉽게 제어하고 지정할 수 있습니다.
전체 프레임워크는 다음과 같습니다.
보시다시피 5단계 프레임워크입니다. 단계별로 자세히 살펴보겠습니다.
단계 1)
- 드라이버 스크립트 Execute.java는 ReadGuru99ExcelFile.java를 호출합니다.
- ReadGuru99ExcelFile.java에는 Excel에서 데이터를 읽는 POI 스크립트가 있습니다.
단계 2)
- ReadGuru99ExcelFile.java는 TestCase.xlsx에서 데이터를 읽습니다.
- 시트의 모양은 다음과 같습니다.
- Excel 파일에 작성된 키워드에 따라 프레임워크가 UI에서 작업을 수행합니다.
- 예를 들어 '로그인' 버튼을 클릭해야 합니다. 이에 따라 Excel에는 '클릭'이라는 키워드가 있습니다. 이제 AUT는 로그인 버튼을 식별하기 위해 페이지에 수백 개의 버튼을 가질 수 있습니다. Excel에서는 개체 이름을 loginButton으로 입력하고 개체 유형을 이름으로 입력합니다(위 이미지에서 강조 표시된 행 참조). 개체 유형은 Xpath, 이름 CSS 또는 기타 값일 수 있습니다.
단계 3) ReadGuru99ExcelFile.java는 이 데이터를 드라이버 스크립트 Execute.java에 전달합니다.
단계 4)
- 모든 UI 웹 요소에 대해 요소 로케이터(예: Xpath, 이름, CSS 경로, 클래스 이름 등)를 배치할 개체 저장소를 만들어야 합니다.
- Execute.java(드라이버 스크립트)는 전체 개체 저장소를 읽고 이를 변수에 저장합니다.
- 이 객체 저장소를 읽으려면 이를 읽을 수 있는 getObjectRepository 메소드가 있는 ReadObject 클래스가 필요합니다.
알림: 객체 저장소를 만들어야 하는 이유가 무엇인지 생각할 수도 있습니다. 답변은 코드 유지 관리에 도움이 됩니다. 예를 들어, 우리는 10개의 다른 테스트 사례에서 이름 = btnlogin인 버튼을 사용하고 있습니다. 앞으로 개발자는 이름을 btnlogin에서 submit으로 변경하기로 결정했습니다. 10개의 테스트 케이스 모두를 변경해야 합니다. 개체 저장소의 경우 저장소에서 한 번만 변경하면 됩니다.
단계 5)
- 드라이버는 Excel 및 개체 저장소의 데이터를 UI로 전달합니다.Opera수업
- UIOperation 클래스에는 엑셀에 언급된 CLICK, SETTEXT 등과 같은 키워드에 해당하는 작업을 수행하는 기능이 있습니다.
- UIOpera수업은 Java 웹 요소에 대한 작업을 수행하기 위한 코드의 실제 구현을 포함하는 클래스
전체 프로젝트는 다음과 같습니다.
예를 살펴보겠습니다.
테스트 시나리오 : 우리는 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 이 튜토리얼의 데모용 프로젝트 파일
하이브리드 기반 프레임워크
하이브리드 기반 프레임워크 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 이 튜토리얼의 데모용 프로젝트 파일