Bygg et datadrevet, nøkkelorddrevet og hybrid selen-rammeverk



Denne bloggen forklarer hva som er et Selen-rammeverk, fordelene, og hvordan man implementerer Data Driven, Keyword Driven & Hybrid rammer i selen.

Den forrige i denne serien har gitt deg eksponering for grunnleggende konsepter i Selen-testing.I denne bloggen vil jeg imidlertid fortelle deg hvordan du bruker et Selen-rammeverk for å optimalisere kodestrukturen, og dette vil føre deg nærmere å bli en .

Hva er et Selen-rammeverk?

Selen-rammeverk er en kodestruktur for å gjøre kodevedlikehold enklere, og kodelesbarhet bedre. Et rammeverk innebærer å bryte hele koden i mindre koder, som tester en bestemt funksjonalitet.





Koden er strukturert slik at 'datasettet' er atskilt fra den faktiske 'test case' som vil teste funksjonaliteten til webapplikasjonen. Det kan også være strukturert på en måte der testtilfellene som må utføres kalles (påkalt) fra en ekstern applikasjon (som en .csv).

hvordan du bruker parametere i tablå

Det er en rekke rammer der ute, men tre vanlige Selen-rammer er:



Disse rammene vil bli diskutert med en demo i denne bloggen. Men før du går videre, la meg fortelle deg hvorfor et Selen-rammeverk må være på plass, og hvilke fordeler du får ut av å bruke dem.

Hvorfor trenger vi et selen-rammeverk?

Uten et rammeverk på plass, vil det være en testtilfelle som vil omfatte hele testfunksjonaliteten. Den skumle delen er at denne ene testsaken har muligheten til å stige opp til en million linjer med kode. Så det er ganske åpenbart at en testsak så stor vil være vanskelig å lese. Selv om du vil endre funksjonalitet senere, vil du ha det vanskelig å endre koden.

Siden implementeringen av et rammeverk vil resultere i mindre, men flere kodestykker, er det forskjellige fordeler.



Fordeler med Selen-rammeverket

  • Økt gjenbruk av kode
  • Forbedret kodelesbarhet
  • Høyere bærbarhet
  • Redusert manusvedlikehold

Nå som du vet det grunnleggende om rammer, la meg forklare hver av dem i detalj.

Datadrevet rammeverk

Et datadrevet rammeverk i selen er teknikken for å skille 'datasettet' fra den faktiske 'test case' (kode). Dette rammeverket avhenger helt av testdataene. Testdataene mates fra eksterne kilder, for eksempel en excel-fil, .CSV-fil eller hvilken som helst database.

datadrevet rammeverk - selen rammeverk - edureka

Siden testsaken er atskilt fra datasettet, kan vi enkelt endre testsaken til en bestemt funksjonalitet uten å gjøre endringer i koden. Hvis du for eksempel vil endre koden for påloggingsfunksjonalitet, kan du endre nettopp det i stedet for å måtte endre annen avhengig del i samme kode.

I tillegg til dette kan du også enkelt kontrollere hvor mye data som må testes. Du kan enkelt øke antall testparametere ved å legge til flere brukernavn og passordfelt i Excel-filen (eller andre kilder).

For eksempel, hvis jeg må sjekke påloggingen til en webside, så kan jeg beholde settet med brukernavn og passordlegitimasjon i en excel-fil og sende legitimasjonen til koden for å utføre automatisering i nettleseren i en egen Java-klassefil.

Bruke Apache POI med Selenium WebDriver

WebDriver støtter ikke lesing av Excel-filer direkte. Derfor bruker vi Apache POI for lesing / skriving til ethvert Microsoft-kontordokument. Du kan laste ned Apache POI (sett med JAR-filer) fra her . Last ned zip-filen eller tarfilen etter behov og legg dem sammen med settet med Selen JAR.

hva er den beste java ideen

Samordningen mellom hovedkoden og datasettet blir ivaretatt av TestNG-dataleverandører, som er et bibliotek som kommer som en del av Apache POI JAR-filene. For demoformål har jeg opprettet en excel-fil kalt “LoginCredentials” der brukernavnene og passordene er lagret i forskjellige kolonner.

Ta en titt på koden nedenfor for å forstå testsaken. Det er en enkel kode for å teste påloggingsfunksjonaliteten til en flybestillingsapplikasjon.

pakke 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 offentlig klasse DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') offentlig ugyldig DemoProject (String brukernavn, String passord) kaster InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = ny ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (brukernavn) driver.findElement (By.name ('passord') sendKeys (passord) driver.findElement (By.name ('login')). ​​klikk () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ('Find a Flight: Mercury Tours: '),' Ugyldig legitimasjon ') System.out.println (' Innlogging vellykket ')} @AfterMethod ugyldig 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

Hvis du la merke til ovenfra, har vi en metode som heter “TestDataFeed ()”. I denne metoden har jeg opprettet en objektforekomst av en annen klasse som heter 'ReadExcelFile'. Mens jeg startet dette objektet, har jeg matet banen til excel-filen min som inneholder dataene. Jeg har videre definert en for loop for å hente teksten fra Excel-arbeidsboken.

Men for å lese dataene fra et gitt arknummer, kolonnenummer og radnummer, blir samtalene ringt til 'ReadExcelFile' -klassen. Koden til “ReadExcelFile” er nedenfor.

pakke 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 public Readcel excelPath) {prøv {File src = ny fil (excelPath) FileInputStream fis = ny FileInputStream (src) wb = ny XSSFWorkbook (fis)} fangst (Unntak e) {System.out.println (e.getMessage ())}} offentlig Streng getData (int arknummer, int rad, int kolonne) {ark = wb.getSheetAt (arknummer) Strengdata = ark.getRow (rad) .getCell (kolonne) .getStringCellValue () returner data} offentlig int getRowCount (int arkIndex) { int rad = wb.getSheetAt (sheetIndex) .getLastRowNum () rad = rad + 1 returrad}}

Legg først merke til bibliotekene jeg har importert. Jeg har importert Apache POI XSSF biblioteker som brukes til å lese / skrive data for å utmerke filer. Her har jeg opprettet en konstruktør (objekt av samme metode) for å overføre verdiene: arknummer, radnummer og kolonnenummer. For å forstå dette rammeverket bedre, ber jeg deg gå gjennom videoen nedenfor, der jeg har forklart dette på en strukturert måte.

Datadrevet rammeverk i Selen WebDriver | Selen Tutorial

La oss nå gå videre til rammeverket, dvs. søkeorddrevet rammeverk.

Søkeorddrevet rammeverk

Keyword Driven framework er en teknikk der alle operasjoner og instruksjoner som skal utføres er skrevet separat fra selve testsaken. Likheten med Data Driven framework er at operasjonene som skal utføres lagres igjen i en ekstern fil som Excel-ark.

Operasjonene jeg snakker om er ingenting annet enn metodene som må utføres som en del av en testsak. Fordelen med Keyword Driven framework er at du enkelt kan kontrollere funksjonene du vil teste. Du kan spesifisere metodene som tester funksjonaliteten til applikasjonen i Excel-filen. Dermed blir bare de metodenavnene som er spesifisert i excel testet.

For eksempel, for å logge på webapplikasjonen, kan vi skrive flere metoder i hovedtestesaken, der hver testtilfelle vil teste bestemt funksjonalitet. For å starte nettleserdriveren kan det være en metode, for å finne brukernavn- og passordfeltene, kan det være metoder, for å navigere til en webside kan det være en annen metode, etc.

Ta en titt på koden nedenfor for å forstå hvordan rammeverket ser ut. Linjene som er kommentert i koden nedenfor fungerer som forklaring hvis du ikke forstår det.

pakke 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 = ny ChromeDriver ()} offentlig statisk ugyldig navigere () {driver .manage (). timeouts (). implicitWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} offentlig statisk ugyldig input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' kvikksølv ')} offentlig statisk ugyldig input_Password () {driver.findElement (By.name (' passord ')). sendKeys (' kvikksølv ')} offentlig statisk tomrom click_Login () {driver.findElement (By.name ('login')). ​​Klikk ()} @ Test offentlig statisk ugyldighet verifisere_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} offentlig statisk tomrom closeBrowser () {driver.quit ()}}

Som du kan se, er de forskjellige funksjonalitetene som må testes, til stede i separate metoder som venter på å bli kalt. Nå vil disse metodene kalles fra en annen klasse, basert på tilstedeværelsen av metodens navn i excel-filen. Og på samme måte har jeg skrevet en annen klasse for å lese excel-filen og sende resultatene tilbake. Begge vises nedenfor.

Klassefilen som påkaller metodene, er dette.

eksempel på instansvariabel i java
pakke KeywordDriven offentlig klasse DriverScript {public static void main (String [] args) kaster Unntak {// Erklærer banen til Excel-filen med navnet på Excel-filen String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Here vi sender Excel-banen og SheetName som argumenter for å koble til Excel-filen ReadExcelData.setExcelFile (sPath, 'Sheet1') // Hardkodede verdier brukes til Excel-rad og kolonner for nå // Hardkodede verdier brukes til Excel-rad & kolonner for nå // I senere kapitler vil vi erstatte disse hardkodede verdiene med varibaler // Dette er sløyfen for å lese verdiene til kolonne 3 (Action Keyword) rad for rad for (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() } } } } 

Og klassefilen som leser Excel-verdiene er dette.

pakke KeywordDriven importere java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell offentlig klasse ReadExcelData {privat static XSSFSheet ExcelWSheet privat statisk XSSFWorkbook ExcelWBook privat statisk XSSFCell-celle // Denne metoden er å angi filbanen og åpne Excel-filen // Pass Excel-sti og arknavn som argumenter for denne metoden offentlig statisk ugyldig setExcelFile (strengbane, strengarknavn) kaster Unntak {FileInputStream ExcelFile = ny FileInputStream (Path) ExcelWBook = ny XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Denne metoden er å lese testdataene fra Excel-cellen // I dette sender vi parametere / argumenter som radnummer og kolonnummer offentlig statisk streng getCellData (int RowNum, int ColNum) kaster Unntak {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

La oss nå gå videre til den siste delen av denne Selen-rammebloggen, hvor jeg vil vise deg hvordan du bygger et hybrid-rammeverk.

Hybrid ramme

Hybrid rammeverk er en teknikk der vi kan utnytte både Data Driven & Keyword Driven Selenium framework (s) best mulig. Ved å bruke eksemplene vist ovenfor i denne bloggen, kan vi bygge et hybrid-rammeverk ved å lagre metodene for å utføre i en excel-fil (nøkkelorddrevet tilnærming) og sende disse metodene til Java Reflection Class (datadrevet tilnærming) i stedet for å lage en Hvis / annet loop i klassen 'DriverScript'.

Ta en titt på den modifiserte 'DriverScript' -klassen i kodebiten nedenfor.Her, i stedet for å bruke flere If / Else-løkker, brukes datadrevet tilnærming til å lese metodenavnene fra excel-filen.

pakke HybridFramework importerer java.lang.reflect.Method offentlig klasse DriverScriptJava {// Dette er et klasseobjekt, erklært som 'offentlig statisk' // Slik at det kan brukes utenfor omfanget av hoved [] -metoden offentlig statisk Handling handling Nøkkelord offentlig statisk Streng sAksjoner // Dette er refleksjonsklasseobjekt, erklært som 'offentlig statisk' // Slik at det kan brukes utenfor omfanget av hoved [] metode offentlig statisk Metode metode [] offentlig statisk ugyldig hoved (String [] args) kaster Unntak {// Deklarere banen til Excel-filen med navnet på Excel-filen String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Her sender vi Excel-banen og SheetName for å koble til Excel-filen // Denne metoden ble opprettet tidligere ReadExcelData.setExcelFile (sPath, 'Sheet1') // Hardkodede verdier brukes for Excel-rad og kolonner for nå // Senere vil vi bruke disse hardkodede verdien mye mer effektivt // Dette er sløyfen for lesing verdiene til kolonnen (Handlingsord) av rad // Det betyr at denne sløyfen vil utføre alle trinnene som er nevnt for testsaken i Teststrinn-arket for (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

For å forstå dette konseptet med Data Driven, Keyword Driven & Hybrid Driven rammeverk, ber jeg deg om å se videoen nedenfor.

Selen Framework ved hjelp av Java | Selen Tutorial | Selen Training Online

Jeg håper denne bloggen var nyttig for deg og ga deg en klar forståelse av hva et Selen-rammeverk er, hvordan det er gunstig og hvordan du bygger kodestrukturen din ved hjelp av disse 3 Selen-rammene. Følg med på flere blogger i denne serien.

Hvis du ønsker å lære selen og bygge en karriere i testdomenet, kan du sjekke ut vårt interaktive live-online her, som kommer med 24 * 7 støtte for å veilede deg gjennom hele læringsperioden. Konseptene knyttet til “Selenium Framework” har en grundig dekning i Edurekas kurs.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.