Tietopohjaisen, avainsanavetoisen ja hybridiseleenikehyksen rakentaminen

Tämä blogi selittää, mikä on seleenikehys, sen edut ja kuinka Data Driven-, Keyword Driven & Hybrid -kehykset otetaan käyttöön seleenissä.

Edellinen tässä sarjassa ovat antaneet sinulle altistumisen seleenitestauksen peruskäsitteille.Tässä blogissa kerron kuitenkin kuinka käyttää Selenium-kehystä koodirakenteen optimointiin, ja tämä vie sinut lähemmäksi tulemaan .

Mikä on seleenikehys?

Seleenikehys on koodirakenne koodin ylläpidon yksinkertaistamiseksi ja koodin luettavuuden parantamiseksi. Kehykseen kuuluu koko koodin jakaminen pienemmiksi koodikappaleiksi, jotka testaavat tietyn toiminnallisuuden.



Koodi on rakennettu siten, että 'tietojoukko' erotetaan todellisesta 'testitapauksesta', joka testaa verkkosovelluksen toimivuutta. Se voidaan myös jäsentää tavalla, jossa suoritettavia testitapauksia kutsutaan (kutsutaan) ulkoisesta sovelluksesta (kuten .csv).

Siellä on useita kehyksiä, mutta 3 yleisesti käytettyä Selenium-kehystä ovat:



Näistä kehyksistä keskustellaan demon kanssa tässä blogissa. Mutta ennen kuin jatkat, haluan kertoa sinulle, miksi seleenikehyksen on oltava paikallaan ja mitä etuja saat niiden käytöstä.

Miksi tarvitsemme seleenikehystä?

Ilman kehystä on olemassa yksi testitapaus, joka käsittää koko testitoiminnon. Pelottava osa on, että tällä yksittäisellä testitapauksella on kyky nousta miljoonaan koodiriviin. Joten on melko ilmeistä, että niin valtava testitapaus on vaikea lukea. Vaikka haluat muokata mitä tahansa toimintoa myöhemmin, sinulla on vaikea muokata koodia.

Koska kehyksen käyttöönotto johtaa pienempiin mutta useampiin koodikappaleisiin, on olemassa useita etuja.



Selenium-kehyksen edut

  • Lisääntynyt koodin uudelleenkäyttö
  • Parannettu koodin luettavuus
  • Parempi siirrettävyys
  • Pienennetty käsikirjoitushuolto

Nyt kun tiedät kehysten perusteet, haluan selittää ne kaikki yksityiskohtaisesti.

Data Driven Framework

Dataohjattu kehys seleenissä on tekniikka erottaa “tietojoukko” todellisesta ”testitapauksesta” (koodi). Tämä kehys riippuu täysin syötetestitiedoista. Testitiedot syötetään ulkoisista lähteistä, kuten Excel-tiedosto, .CSV-tiedosto tai mikä tahansa tietokanta.

datapohjainen kehys - seleenikehys - edureka

Koska testitapaus on erotettu tietojoukosta, voimme helposti muokata tietyn toiminnon testitapausta tekemättä tukkumyyntiä koodiin. Esimerkiksi, jos haluat muokata koodia sisäänkirjautumistoimintoja varten, voit muokata juuri sitä sen sijaan, että joudut muokkaamaan myös muita saman koodin riippuvaisia ​​osia.

Tämän lisäksi voit myös helposti hallita, kuinka paljon tietoa on testattava. Voit helposti lisätä testiparametrien määrää lisäämällä lisää käyttäjätunnus- ja salasanakenttiä Excel-tiedostoon (tai muihin lähteisiin).

arvon ohittaminen vs viittauksen java ohittaminen

Esimerkiksi, jos minun on tarkistettava sisäänkirjautuminen verkkosivulle, voin pitää käyttäjänimen ja salasanan tunnistetiedot excel-tiedostossa ja välittää tunnistetiedot koodille automaattisen selaimen suorittamiseksi erillisessä Java-luokan tiedostossa.

Apache POI: n käyttäminen Selenium WebDriverin kanssa

WebDriver ei tue suoraan Excel-tiedostojen lukemista. Siksi käytämme Apache POI minkä tahansa Microsoft Office -asiakirjan lukemiseen / kirjoittamiseen. Voit ladata Apache POI (joukko JAR-tiedostoja) osoitteesta tässä . Lataa zip- tai tervatiedosto vaatimuksesi mukaan ja aseta ne yhdessä Selenium JAR -joukon kanssa.

Pääkoodin ja tietojoukon koordinoinnista huolehtii TestNG-tietojen tarjoajat, joka on kirjasto, joka tulee osana Apache POI JAR -tiedostoja. Esittelytarkoituksiin olen luonut excel-tiedoston nimeltä “LoginCredentials”, johon käyttäjätunnukset ja salasanat on tallennettu eri sarakkeisiin.

Katsokaa alla olevaa koodia ymmärtääksesi testitapauksen. Se on yksinkertainen koodi lentovaraussovelluksen kirjautumistoimintojen testaamiseen.

paketti 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-käyttäjänimi, String-salasana) heittää InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') -ajuri = uusi ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('käyttäjänimi')). sendKeys (käyttäjänimi) driver.findElement (By.name ('salasana') )). sendKeys (salasana) driver.findElement (By.name ('kirjautuminen')). ​​napsauta () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). vastaa ('Find a Flight: Mercury Tours: '),' Virheelliset tunnistetiedot ') System.out.println (' Sisäänkirjautuminen onnistui ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rivit = config.getRowCount (0) objekti [] [] tunnistetiedot = uusi objekti [rivit] [2] kohteelle (int i = 0i

Jos huomaat ylhäältä, meillä on menetelmä nimeltä TestDataFeed (). Tällä menetelmällä olen luonut toisen luokan objektin esiintymän nimeltä 'ReadExcelFile'. Kun olen havainnut tämän objektin, olen syöttänyt tiedot sisältävän Excel-tiedostoni polun. Olen määrittänyt edelleen for for -silmukan tekstin hakemiseksi Excel-työkirjasta.

Mutta tietyn arkinumeron, sarakkeen numeron ja rivinumeron tietojen lukemiseksi soitetaan “ReadExcelFile” -luokkaan. “ReadExcelFile” -koodini on alla.

paketti 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 excelPath) {kokeile {File src = uusi tiedosto (excelPath) FileInputStream fis = new FileInputStream (src) wb = uusi XSSFWorkbook (fis)} saalis (poikkeus e) {System.out.println (e.getMessage ())}} public Merkkijono getData (int taulukonumero, int-rivi, int-sarake) {sheet = wb.getSheetAt (taulukon numero) String data = sheet.getRow (rivi) .getCell (sarake) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int rivi = wb.getSheetAt (sheetIndex) .getLastRowNum () rivi = rivi + 1 paluu rivi}}

Huomaa ensin tuomani kirjastot. Olen tuonut Apache POI XSSF kirjastot, joita käytetään tietojen lukemiseen / kirjoittamiseen Excel-tiedostoihin. Tässä olen luonut rakentajan (saman menetelmän kohde) välittämään arvot: taulukon numero, rivin numero ja sarakkeen numero. Jotta ymmärtäisit tämän kehyksen paremmin, pyydän sinua käymään läpi alla oleva video, jossa olen selittänyt tämän jäsennellysti.

Dataohjattu kehys seleenissä WebDriver | Seleeniopetus

Siirrytään nyt kehykseen eli avainsanavetoiseen kehykseen.

Avainsanaohjattu kehys

Avainsanavetoinen kehys on tekniikka, jossa kaikki suoritettavat toiminnot ja ohjeet kirjoitetaan erillään todellisesta testitapauksesta. Samankaltaisuus sillä on Data Driven -kehyksen kanssa, että suoritettavat toiminnot tallennetaan jälleen ulkoiseen tiedostoon, kuten Excel-arkki.

c ++ fibonacci -sarja

Toiminnot, joista puhun, ovat vain menetelmiä, jotka on suoritettava osana testitapausta. Avainsanaohjatun kehyksen etuna on, että voit helposti hallita testattavia toimintoja. Voit määrittää Excel-tiedostossa menetelmät, jotka testaavat sovelluksen toimivuutta. Täten testataan vain ne excelissä määritellyt menetelmien nimet.

Esimerkiksi web-sovellukseen kirjautumista varten voimme kirjoittaa useita tapoja päätestitapauksessa, joissa jokainen testitapaus testaa tiettyjä toimintoja. Selainohjaimen instantioimiseksi voi olla yksi menetelmä, käyttäjätunnus- ja salasanakenttien löytämiseksi, menetelmiä, verkkosivulle siirtymiseksi toinen menetelmä jne.

Katsokaa alla olevaa koodia ymmärtääkseen, miten kehys näyttää. Alla olevassa koodissa kommentoidut rivit ovat selityksiä, jos et ymmärrä.

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 -ajuri public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implisiittisesti Odota (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')).) Napsauta ()} @Test public static void ellenőriz_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Etsi lento: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Kuten näette, testattavat toiminnot ovat erillisissä menetelmissä, jotka odottavat kutsua. Nyt näitä menetelmiä kutsutaan toisesta luokasta, perustuen menetelmän nimen esiintymiseen excel-tiedostossa. Ja vastaavasti, olen lukenut Excel-tiedoston ja lähettänyt tulokset takaisin, olen kirjoittanut toisen luokan. Molemmat näytetään alla.

Menetelmiä käyttävä luokkatiedosto on tämä.

kuinka jäsentää xml - tiedosto Java - sovelluksessa
package KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Ilmoitetaan Excel-tiedoston polku Excel-tiedoston nimellä String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Täällä välitämme Excel-polun ja SheetName-argumentin muodostaaksesi yhteyden Excel-tiedostoon ReadExcelData.setExcelFile (sPath, 'Sheet1') // Excel-rivillä ja sarakkeissa käytetään toistamiseen kovakoodattuja arvoja // Excel-rivillä käytetään kovakoodattuja arvoja sarakkeet toistaiseksi // Korvataan myöhemmissä luvuissa nämä kovakoodatut arvot varibaleilla // Tämä on silmukka sarakkeen 3 (Action Key) arvojen lukemiseen riviltä riville (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() } } } } 

Ja luokatiedosto, joka lukee Excel-arvot, on tämä.

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 ReadEiccelData {private static XSSFSheet ExcelWSheet private staattinen XSSFWorkbook ExcelWBook yksityinen staattinen XSSFCell Cell // Tämä menetelmä on asettaa tiedostopolku ja avata Excel-tiedosto // välittää Excel-polku ja SheetName argumentteina tähän menetelmään public static void setExcelFile (String Path, String SheetName) heittää Poikkeus {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Tämän menetelmän tarkoituksena on lukea testitiedot Excel-solusta // Tässä välitämme parametreja / argumentteja kun julkinen staattinen merkkijono rivinumero ja Col Num merkkijono getCellData (int RowNum, int ColNum) heittää poikkeuksen {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Siirrytään nyt tämän Selenium-kehysblogin viimeiseen osaan, jossa näytän sinulle, kuinka voit rakentaa hybridikehyksen.

Hybridikehys

Hybridikehys on tekniikka, jossa voimme hyödyntää parhaiten sekä Data Driven- että Keyword Driven Selenium -kehyksiä. Käyttämällä tämän blogin yllä esitettyjä esimerkkejä voimme rakentaa hybridikehyksen tallentamalla suoritettavat menetelmät Excel-tiedostoon (avainsanavetoinen lähestymistapa) ja välittämällä nämä menetelmien nimet Java Reflection -luokka (datavetoinen lähestymistapa) luomisen sijaan Tai muuten silmukka ”DriverScript” -luokassa.

Katso alla olevan koodinpätkän muokattu “DriverScript” -luokka.Tässä useiden If / Else-silmukoiden käyttämisen sijasta datan ohjaamaa lähestymistapaa käytetään lukemaan menetelmien nimet Excel-tiedostosta.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Tämä on luokkaobjekti, joka on julistettu julkiseksi staattiseksi // Jotta sitä voidaan käyttää main [] -metodin ulkopuolella public static Actions actionKeywords public static String sActions // Tämä on heijastusluokan objekti, joka on julistettu julkiseksi staattiseksi // Jotta sitä voidaan käyttää main [] -metodin ulkopuolella public static Method -metodi [] public static void main (String [] args) heittää poikkeuksen {// Excel-tiedoston polun ilmoittaminen Excel-tiedoston nimellä String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tässä ohitetaan Excel-polku ja SheetName yhteyden muodostamiseksi Excel-tiedostoon // Tämä menetelmä luotiin aiemmin ReadExcelData.setExcelFile (sPath, 'Sheet1') // Koodattuja arvoja käytetään toistaiseksi Excel-riveille ja sarakkeille // Myöhemmin käytämme näitä kovakoodattuja arvoja paljon tehokkaammin // Tämä on silmukka lukemiseen sarake (Action Key) -rivin arvot rivillä // Se tarkoittaa, että tämä silmukka suorittaa kaikki testitapauksessa mainitut vaiheet Test Steps -sivulla (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

Jotta ymmärtäisin tämän Data Driven-, Keyword Driven & Hybrid Driven -kehysten käsitteen paremmin, pyydän sinua katsomaan alla olevaa videota.

Selenium Framework Java-sovelluksen avulla Selenium-opetusohjelma Seleeniharjoittelu verkossa

Toivon, että tämä blogi oli hyödyllinen sinulle ja antoi sinulle selkeän käsityksen siitä, mikä on seleenikehys, kuinka hyödyllistä se on ja kuinka rakentaa koodirakenne käyttämällä näitä 3 seleenikehystä. Pysy kuulolla tämän sarjan lisää blogeja.

Jos haluat oppia seleeniä ja rakentaa uraa testausalueella, tutustu interaktiiviseen live-online-sivustoomme Tässä mukana tulee 24 * 7 -tuki, joka ohjaa sinua koko oppimisjaksosi ajan. Seleenikehykseen liittyvät käsitteet kattavat syvällisesti Edurekan kurssin.

Onko sinulla kysymys meille? Mainitse se kommenttiosassa ja palaamme sinuun.