데이터 기반, 키워드 기반 및 하이브리드 셀레늄 프레임 워크 구축



이 블로그는 Selenium 프레임 워크가 무엇인지, 그 이점과 셀레늄에서 데이터 기반, 키워드 기반 및 하이브리드 프레임 워크를 구현하는 방법을 설명합니다.

이전 이 시리즈에서는 Selenium 테스트의 기본 개념에 대해 설명했습니다.그러나이 블로그에서는 Selenium 프레임 워크를 사용하여 코드 구조를 최적화하는 방법을 알려 드리겠습니다. .

Selenium 프레임 워크 란 무엇입니까?

Selenium 프레임 워크는 코드 유지 관리를 단순화하고 코드 가독성을 높이기위한 코드 구조입니다. 프레임 워크는 전체 코드를 특정 기능을 테스트하는 작은 코드 조각으로 나누는 작업을 포함합니다.





코드는 '데이터 세트'가 웹 애플리케이션의 기능을 테스트 할 실제 '테스트 케이스'와 분리되도록 구성됩니다. 또한 실행해야하는 테스트 케이스를 외부 애플리케이션 (예 : .csv)에서 호출 (호출)하는 방식으로 구성 할 수도 있습니다.

많은 프레임 워크가 있지만 일반적으로 사용되는 세 가지 Selenium 프레임 워크는 다음과 같습니다.



이러한 프레임 워크는이 블로그의 데모와 함께 논의됩니다. 그러나 더 진행하기 전에 Selenium 프레임 워크를 사용해야하는 이유와이를 사용하여 얻을 수있는 이점에 대해 설명하겠습니다.

Selenium 프레임 워크가 필요한 이유는 무엇입니까?

프레임 워크가 없으면 전체 테스트 기능을 구성하는 하나의 테스트 케이스가 있습니다. 무서운 부분은이 단일 테스트 케이스가 최대 백만 줄의 코드까지 올릴 수 있다는 것입니다. 따라서 너무 큰 테스트 케이스는 읽기가 어려울 것입니다. 나중에 기능을 수정하려는 경우에도 코드를 수정하는 데 어려움을 겪을 것입니다.

프레임 워크를 구현하면 더 작지만 여러 개의 코드 조각이 생성되므로 다양한 이점이 있습니다.



Selenium 프레임 워크의 이점

  • 코드 재사용 증가
  • 코드 가독성 향상
  • 더 높은 휴대 성
  • 축소 된 스크립트유지

이제 프레임 워크의 기본 사항을 알았으니 각각에 대해 자세히 설명하겠습니다.

데이터 기반 프레임 워크

Selenium의 데이터 기반 프레임 워크는 실제 '테스트 케이스'(코드)에서 '데이터 세트'를 분리하는 기술입니다. 이 프레임 워크는 입력 테스트 데이터에 완전히 의존합니다. 테스트 데이터는 엑셀 파일, .CSV 파일 또는 데이터베이스와 같은 외부 소스에서 제공됩니다.

데이터 기반 프레임 워크-셀레늄 프레임 워크-Edureka

테스트 케이스가 데이터 세트와 분리되어 있으므로 코드를 전체적으로 변경하지 않고도 특정 기능의 테스트 케이스를 쉽게 수정할 수 있습니다. 예를 들어, 로그인 기능에 대한 코드를 수정하려는 경우 동일한 코드에서 다른 종속 부분도 수정하지 않고 해당 코드 만 수정할 수 있습니다.

이 외에도 테스트해야하는 데이터의 양을 쉽게 제어 할 수 있습니다. Excel 파일 (또는 기타 소스)에 더 많은 사용자 이름 및 비밀번호 필드를 추가하여 테스트 매개 변수의 수를 쉽게 늘릴 수 있습니다.

예를 들어 웹 페이지에 대한 로그인을 확인해야하는 경우 사용자 이름 및 암호 자격 증명 집합을 Excel 파일에 유지하고 자격 증명을 코드에 전달하여 별도의 Java 클래스 파일에서 브라우저에서 자동화를 수행 할 수 있습니다.

Selenium WebDriver와 함께 Apache POI 사용

WebDriver는 Excel 파일 읽기를 직접 지원하지 않습니다. 따라서 우리는 Apache POI Microsoft Office 문서를 읽고 쓸 수 있습니다. Apache POI (JAR 파일 세트)를 다음에서 다운로드 할 수 있습니다. 여기 . 요구 사항에 따라 zip 파일 또는 tar 파일을 다운로드하고 Selenium JAR 세트와 함께 배치하십시오.

메인 코드와 데이터 세트 간의 조정은 TestNG 데이터 공급자, Apache POI JAR 파일의 일부로 제공되는 라이브러리입니다. 데모 목적으로 사용자 이름과 암호가 서로 다른 열에 저장되어있는 'LoginCredentials'라는 엑셀 파일을 만들었습니다.

math.abs는 자바에서 무엇을합니까?

테스트 사례를 이해하려면 아래 코드를 살펴보십시오. 항공편 예약 애플리케이션의 로그인 기능을 테스트하기위한 간단한 코드입니다.

package DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test public class DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) throws InterruptedException {System.setProperty ( 'webdriver.chrome.driver', 'C : UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver () driver.get ( 'http://newtours.demoaut.com/') driver.findElement (By.name ( 'userName')). sendKeys (사용자 이름) driver.findElement (By.name ( 'password' )). sendKeys (password) driver.findElement (By.name ( 'login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ( '비행 찾기 : 머큐리 투어 : '),'잘못된 자격 증명 ') System.out.println ('로그인 성공 ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name ='testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ( 'C : UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] credentials = new Object [rows] [2] for (int i = 0i

위에서 눈치 챘다면“TestDataFeed ()”라는 메서드가 있습니다. 이 메서드에서는 'ReadExcelFile'이라는 다른 클래스의 개체 인스턴스를 만들었습니다. 이 개체를 인스턴스화하는 동안 데이터가 포함 된 Excel 파일의 경로를 제공했습니다. Excel 통합 문서에서 텍스트를 검색하는 for 루프를 추가로 정의했습니다.

그러나 주어진 시트 번호, 열 번호 및 행 번호에서 데이터를 읽기 위해 'ReadExcelFile'클래스가 호출됩니다. 내 'ReadExcelFile'의 코드는 다음과 같습니다.

패키지 DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadExcelFile (String excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public String getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () 반환 데이터} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

먼저 내가 가져온 라이브러리에 유의하십시오. 나는 수입했다 Apache POI XSSF 엑셀 파일로 데이터를 읽고 쓰는 데 사용되는 라이브러리. 여기서는 시트 번호, 행 번호 및 열 번호와 같은 값을 전달하기 위해 생성자 (동일한 메서드의 개체)를 만들었습니다. 이 프레임 워크를 더 잘 이해하기 위해 아래 비디오를 통해 구조화 된 방식으로 설명했습니다.

Selenium WebDriver의 데이터 기반 프레임 워크 | Selenium 튜토리얼

이제 프레임 워크, 즉 키워드 기반 프레임 워크로 이동해 보겠습니다.

double을 int로 변환

키워드 기반 프레임 워크

키워드 기반 프레임 워크는 수행 할 모든 작업 및 지침이 실제 테스트 사례와 별도로 작성되는 기술입니다. 데이터 기반 프레임 워크와 유사한 점은 수행 할 작업이 Excel 시트와 같은 외부 파일에 다시 저장된다는 것입니다.

제가 말하는 작업은 테스트 케이스의 일부로 실행해야하는 메소드에 불과합니다. 키워드 기반 프레임 워크의 이점은 테스트하려는 기능을 쉽게 제어 할 수 있다는 것입니다. Excel 파일에서 응용 프로그램의 기능을 테스트하는 방법을 지정할 수 있습니다. 따라서 Excel에 지정된 메서드 이름 만 테스트됩니다.

예를 들어 웹 애플리케이션에 로그인하기 위해 기본 테스트 케이스에 여러 메소드를 작성할 수 있으며, 각 테스트 케이스는 특정 기능을 테스트합니다. 브라우저 드라이버를 인스턴스화하는 데는 사용자 이름 및 암호 필드를 찾는 방법이있을 수 있으며 웹 페이지로 이동하는 방법이있을 수 있으며 다른 방법이있을 수 있습니다.

프레임 워크가 어떻게 보이는지 이해하려면 아래 코드를 살펴보십시오. 아래 코드에서 주석 처리 된 줄은 이해하지 못하는 경우 설명으로 사용됩니다.

package KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver public class Actions {public static WebDriver driver public static void openBrowser () {System.setProperty ( 'webdriver.chrome.driver', 'C : UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ( 'http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name ( ' userName ')). sendKeys ('mercury ')} public static void input_Password () {driver.findElement (By.name ('password ')). sendKeys ('mercury ')} public static void click_Login () {driver.findElement (By.name ( 'login')). ​​click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, '비행 찾기 : Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

보시다시피 테스트해야하는 다양한 기능은 호출 대기중인 별도의 메서드에 있습니다. 이제 이러한 메서드는 Excel 파일에있는 메서드 이름에 따라 다른 클래스에서 호출됩니다. 마찬가지로 엑셀 파일을 읽고 결과를 다시 보내기 위해 다른 클래스를 작성했습니다. 둘 다 아래에 표시됩니다.

메소드를 호출하는 클래스 파일은 이것입니다.

package KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Excel 파일 이름으로 Excel 파일의 경로 선언 String sPath = 'C : UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx'// Here Excel 경로 및 SheetName을 Excel 파일과 연결하기위한 인수로 전달합니다. ReadExcelData.setExcelFile (sPath, 'Sheet1') // 현재는 Excel 행 및 열에 하드 코딩 된 값이 사용됩니다. // Excel 행 및 열에는 하드 코딩 된 값이 사용됩니다. // 나중 장에서 하드 코딩 된 값을 varibales로 대체합니다. // 이것은 열 3 (Action Keyword)의 값을 행 단위로 읽는 루프입니다. (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

그리고 엑셀 값을 읽는 클래스 파일은 이것입니다.

package KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell public class ReadExcelData {private static XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell //이 메서드는 파일 경로를 설정하고 Excel 파일을 여는 것입니다. // Excel 경로 및 SheetName을이 메서드에 대한 인수로 전달 public static void setExcelFile (String Path, String SheetName) throws Exception {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} //이 메서드는 Excel 셀에서 테스트 데이터를 읽는 것입니다. // 여기서는 매개 변수 / 인수를 전달합니다. 행 번호 및 열 번호로 public static String getCellData (int RowNum, int ColNum) throws Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

이제이 Selenium 프레임 워크 블로그의 마지막 부분으로 이동하여 하이브리드 프레임 워크를 빌드하는 방법을 보여 드리겠습니다.

하이브리드 프레임 워크

하이브리드 프레임 워크는 데이터 기반 및 키워드 기반 Selenium 프레임 워크를 최대한 활용할 수있는 기술입니다. 이 블로그의 위에 표시된 예제를 사용하여 실행할 메서드를 Excel 파일 (키워드 기반 접근 방식)에 저장하고 이러한 메서드 이름을 자바 리플렉션 클래스 (데이터 기반 접근 방식) 다른 경우라면 'DriverScript'클래스의 루프입니다.

아래 코드 스 니펫에서 수정 된 'DriverScript'클래스를 살펴보십시오.여기에서는 여러 If / Else 루프를 사용하는 대신 데이터 기반 접근 방식을 사용하여 Excel 파일에서 메서드 이름을 읽습니다.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// 'public static'으로 선언 된 클래스 객체입니다. // 메인 [] 메서드의 범위 밖에서 사용할 수 있도록 public static Actions actionKeywords public static String sActions // 이것은 'public static'으로 선언 된 리플렉션 클래스 개체입니다. // 메인 [] 메서드의 범위 밖에서 사용할 수 있도록 public static 메서드 메서드 [] public static void main (String [] args) throws Exception {// Excel 파일 이름으로 Excel 파일의 경로 선언 String sPath = 'C : UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx'// Excel 파일과 연결할 Excel 경로와 SheetName을 전달합니다. // This method 이전에 생성됨 ReadExcelData.setExcelFile (sPath, 'Sheet1') // 현재는 Excel 행 및 열에 하드 코딩 된 값이 사용됩니다. // 나중에 이러한 하드 코딩 된 값을 훨씬 더 효율적으로 사용합니다. // 이것은 읽기를위한 루프입니다. 열 (액션 키워드) 행의 값 행별로 //이 루프는 테스트 단계 시트에서 테스트 케이스에 대해 언급 된 모든 단계를 실행합니다 (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

데이터 기반, 키워드 기반 및 하이브리드 기반 프레임 워크의 개념을 더 잘 이해하기 위해 아래 비디오를 시청 해 주시기 바랍니다.

Java를 사용하는 Selenium Framework | 셀레늄 튜토리얼 | 온라인 셀레늄 교육

이 블로그가 여러분에게 도움이 되었기를 바라며 Selenium 프레임 워크가 무엇인지,이 프레임 워크가 어떻게 유익하며,이 3 가지 Selenium 프레임 워크를 사용하여 코드 구조를 구축하는 방법에 대한 명확한 이해를 제공하기를 바랍니다. 이 시리즈의 더 많은 블로그를 계속 지켜봐주십시오.

Selenium을 배우고 테스트 도메인에서 경력을 쌓고 싶다면 대화 형 라이브 온라인을 확인하십시오. 여기에는 학습 기간 내내 안내하는 연중 무휴 지원이 함께 제공됩니다. 'Selenium Framework'와 관련된 개념은 Edureka의 과정에서 심층적으로 다루고 있습니다.

질문이 있으십니까? 의견란에 언급 해 주시면 연락 드리겠습니다.