Budovanie dátovo orientovaného, ​​kľúčového slova a hybridného selénového rámca



Tento blog vysvetľuje, čo je selénový rámec, jeho výhody a ako implementovať rámce založené na dátach, kľúčových slovách a hybridných architektúrach v seléne.

Predchádzajúci v tejto sérii ste sa oboznámili so základnými konceptmi pri testovaní selénu.V tomto blogu vám však poviem, ako používať selénový rámec na optimalizáciu štruktúry vášho kódu, čo vás posunie bližšie k tomu, aby ste sa stali .

Čo je selénový rámec?

Selénový rámec je štruktúra kódu, ktorá uľahčuje údržbu kódu a zvyšuje čitateľnosť kódu. Rámec zahŕňa rozdelenie celého kódu na menšie časti kódu, ktoré testujú konkrétnu funkčnosť.





Kód je štruktúrovaný tak, že „dátová sada“ je oddelená od skutočného „testovacieho prípadu“, ktorý otestuje funkčnosť webovej aplikácie. Môže byť tiež štruktúrovaný tak, že testovacie prípady, ktoré je potrebné vykonať, sa volajú (vyvolávajú) z externej aplikácie (napríklad .csv).

Existuje niekoľko rámcov, ale 3 bežne používané selénové rámce sú:



O týchto rámcoch bude v tomto blogu diskutované ukážka. Ale predtým, ako pôjdem ďalej, poviem vám, prečo musí byť zavedený selénový rámec a aké výhody z ich používania získate.

Prečo potrebujeme selénový rámec?

Bez zavedeného rámca bude existovať jeden testovací prípad, ktorý bude obsahovať celú funkčnosť testu. Strašidelnou časťou je, že tento jediný testovací prípad má schopnosť vystúpiť až na milión riadkov kódu. Je celkom zrejmé, že tak obrovský testovací prípad bude ťažké čítať. Aj keď budete chcieť neskôr upraviť ktorúkoľvek funkcionalitu, budete mať s úpravou kódu ťažké časy.

Pretože implementácia rámca bude mať za následok menšie, ale viacnásobné časti kódu, existujú rôzne výhody.



Výhody selénového rámca

  • Zvýšené opätovné použitie kódu
  • Vylepšená čitateľnosť kódu
  • Vyššia prenosnosť
  • Znížený scenárúdržba

Teraz, keď poznáte základy rámcov, dovoľte mi podrobne ich vysvetliť.

Rámec riadený údajmi

Rámec riadený dátami v seléne je technika oddelenia „súboru údajov“ od skutočného „testovacieho prípadu“ (kódu). Tento rámec úplne závisí od vstupných testovacích údajov. Údaje o teste sa napájajú z externých zdrojov, ako sú napríklad súbory programu Excel, .CSV alebo iné databázy.

rozdiel medzi git a github

rámec riadený údajmi - rámec selénu - edureka

Pretože je testovací prípad oddelený od súboru údajov, môžeme testovací prípad konkrétnej funkcie ľahko upraviť bez toho, aby sme vo vašom kóde vykonali veľkoobchodné zmeny. Napríklad, ak chcete upraviť kód pre prihlasovacie funkcie, môžete upraviť iba tento kód namiesto toho, aby ste museli meniť aj akúkoľvek inú závislú časť v rovnakom kóde.

Okrem toho môžete tiež ľahko ovládať, koľko dát je potrebné testovať. Počet testovacích parametrov môžete ľahko zvýšiť pridaním ďalších polí používateľského mena a hesla do súboru programu Excel (alebo iných zdrojov).

Napríklad, ak musím skontrolovať prihlásenie na webovú stránku, potom môžem ponechať množinu prihlasovacích údajov používateľského mena a hesla v súbore programu Excel a odovzdať tieto poverenia kódu na vykonanie automatizácie v prehliadači v samostatnom súbore triedy Java.

Používanie POI Apache so selénom WebDriver

WebDriver priamo nepodporuje čítanie súborov programu Excel. Preto používame Apache POI na čítanie / zápis do ľubovoľného dokumentu balíka Microsoft Office. Apache POI (súbor súborov JAR) si môžete stiahnuť z tu . Stiahnite si zip súbor alebo súbor tar podľa vašich požiadaviek a umiestnite ich spolu so sadou selénových súborov JAR.

O koordináciu medzi hlavným kódom a súborom údajov bude postarané Poskytovatelia údajov TestNG, čo je knižnica, ktorá je súčasťou súborov Apache POI JAR. Na demonštračné účely som vytvoril súbor programu Excel s názvom „LoginCredentials“, v ktorom boli používateľské mená a heslá uložené v rôznych stĺpcoch.

Pozrite sa na nasledujúci kód, aby ste pochopili testovací prípad. Je to jednoduchý kód na testovanie prihlasovacej funkcie aplikácie na rezerváciu letov.

balík DataDriven import org.openqa.selenium. Importom 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 = nový ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('heslo) )). sendKeys (heslo) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ('Nájsť let: Mercury Tours: '),' Neplatné poverenia ') System.out.println (' Prihlásenie úspešné ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = nový ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int řádky = config.getRowCount (0) Objekt [] [] poverenia = nový Objekt [riadky] [2] pre (int i = 0i

Ak ste si všimli zhora, máme metódu s názvom „TestDataFeed ()“. V tejto metóde som vytvoril inštanciu objektu inej triedy s názvom „ReadExcelFile“. Pri vytváraní inštancie tohto objektu som vložil cestu do môjho súboru programu Excel obsahujúceho údaje. Ďalej som definoval slučku for na načítanie textu zo zošita programu Excel.

Pre načítanie údajov z daného čísla listu, čísla stĺpca a čísla riadku sa však uskutoční hovor do triedy „ReadExcelFile“. Kód môjho súboru „ReadExcelFile“ je uvedený nižšie.

previesť reťazec do formátu dátumu v
balík DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook verejná trieda ReadExcelFile {XSSFWorkbook wb XSSFSheet verejný list ReadExcelFile 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 Reťazec getData (int sheetnumber, int riadok, int stĺpec) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (riadok) .getCell (stĺpec) .getStringCellValue () návratové údaje} verejné int getRowCount (int sheetIndex) { int riadok = wb.getSheetAt (sheetIndex) .getLastRowNum () riadok = riadok + 1 spätný riadok}}

Najskôr si všimnite knižnice, ktoré som importoval. Doviezol som Apache POI XSSF knižnice, ktoré sa používajú na čítanie / zápis údajov do súborov Excel. Tu som vytvoril konštruktor (objekt rovnakej metódy) na odovzdanie hodnôt: číslo listu, číslo riadku a číslo stĺpca. Aby sme lepšie pochopili tento rámec, žiadam vás, aby ste si prešli nasledujúce video, kde som to vysvetlil štruktúrovaným spôsobom.

Rámec riadený dátami v selenovom WebDriveri Výukový program pre selén

Prejdime teraz k rámcu, teda k rámcu riadenému kľúčovými slovami.

Rámec riadený kľúčovým slovom

Rámec riadený kľúčovými slovami je technika, pri ktorej sú všetky operácie a pokyny, ktoré sa majú vykonať, napísané oddelene od skutočného testovacieho prípadu. Podobnosť s rámcom Data Driven spočíva v tom, že operácie, ktoré sa majú vykonať, sa opäť ukladajú do externého súboru, ako je napríklad hárok programu Excel.

Operácie, o ktorých hovorím, nie sú nič iné ako metódy, ktoré je potrebné vykonať ako súčasť testovacieho prípadu. Výhodou rámca riadeného kľúčovými slovami je, že môžete ľahko ovládať funkcie, ktoré chcete testovať. V súbore programu Excel môžete určiť metódy, ktoré testujú funkčnosť aplikácie. Testovať sa teda budú iba tie názvy metód, ktoré sú uvedené v programe Excel.

Napríklad pre prihlásenie do webovej aplikácie môžeme do hlavného testovacieho prípadu napísať viac metód, v ktorých bude každý testovací prípad testovať určitú funkčnosť. Na vytvorenie inštancie ovládača prehliadača môže existovať jedna metóda, na vyhľadanie polí používateľského mena a hesla môžu existovať metódy, na navigáciu na webovú stránku môže existovať iná metóda atď.

Pozrite sa na nasledujúci kód, aby ste pochopili, ako rámec vyzerá. Riadky, ktoré sú komentované v nasledujúcom kóde, slúžia ako vysvetlenie, ak nerozumiete.

balík 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, 'Nájsť let: Merkur : ')} public static void closeBrowser () {driver.quit ()}}

Ako vidíte, rôzne funkcie, ktoré je potrebné testovať, sú prítomné v samostatných metódach, ktoré čakajú na vyvolanie. Teraz budú tieto metódy volané z inej triedy na základe prítomnosti názvu metódy v súbore programu Excel. A podobne, aby som si prečítal súbor programu Excel a vrátil výsledky, napísal som ďalšiu triedu. Obe sú zobrazené nižšie.

Súbor triedy vyvolávajúci metódy je tento.

je magisterský a postgraduálny stupeň
balík KeywordDriven verejná trieda DriverScript {public static void main (String [] args) vyvolá výnimku {// Deklarovanie cesty k súboru Excel s názvom súboru Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // tu odovzdávame cestu k programu Excel a názov SheetName ako argumenty na pripojenie k súboru Excel ReadExcelData.setExcelFile (sPath, „Sheet1“) // Pre riadok a stĺpce programu Excel sa teraz používajú pevne kódované hodnoty // Pre riadok programu Excel sa používajú pevne kódované hodnoty & stĺpce nateraz // V ďalších kapitolách nahradíme tieto pevne zakódované hodnoty varibales // Toto je cyklus na čítanie hodnôt stĺpca 3 (Action Key) riadok po riadku pre (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() } } } } 

A súbor triedy, ktorý číta hodnoty programu Excel, je tento.

balík 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 verejná trieda ReadExcelData {súkromná statická XSSFSheet ExcelWSheet súkromný statický XSSFWorkbook ExcelWBook súkromný statický XSSFCell Bunka // Touto metódou je nastavenie cesty k súboru a otvorenie súboru programu Excel // Pass Excel Path and SheetName as Arguments to this method public static void setExcelFile (String Path, String SheetName) throws Výnimka {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Táto metóda slúži na načítanie testovacích údajov z bunky programu Excel // V tomto prípade odovzdávame parametre / argumenty ako Row Num and Col Num public static String getCellData (int RowNum, int ColNum) throws Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Prejdime teraz k záverečnej časti tohto blogu o selenovom rámci, kde vám ukážem, ako vytvoriť hybridný rámec.

Hybridný rámec

Hybridný rámec je technika, pri ktorej môžeme čo najlepšie využiť rámec (-y) selenu riadený dátami aj kľúčové slová. Pomocou príkladov uvedených vyššie v tomto blogu môžeme vytvoriť hybridný rámec uložením metód, ktoré sa majú vykonať, do súboru excel (prístup riadený kľúčovými slovami) a odovzdaním týchto názvov metód Java Reflection Class (prístup založený na dátach) namiesto vytvorenia Ako / Inak slučka v triede „DriverScript“.

Prezrite si upravenú triedu „DriverScript“ v útržku kódu nižšie.Tu sa namiesto použitia viacerých slučiek If / Else používa prístup založený na dátach na načítanie názvov metód zo súboru programu Excel.

balíček HybridFramework import java.lang.reflect.Method verejná trieda DriverScriptJava {// Toto je objekt triedy, deklarovaný ako 'verejný statický' // // Aby ho bolo možné použiť mimo rámec hlavnej metódy [] verejná statická Akcia actionKeywords verejná statická String sActions // Toto je objekt triedy reflexie, deklarovaný ako 'public static' // Aby ho bolo možné použiť mimo rozsahu metódy main [] public static Metóda [] public static void main (String [] args) vyvolá Výnimku {// Deklarovanie cesty k súboru Excel s názvom súboru Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tu prechádzame cestu programu Excel a názov listu pre pripojenie k súboru Excel // Táto metóda bol predtým vytvorený ReadExcelData.setExcelFile (sPath, 'Sheet1') // Pre riadky a stĺpce programu Excel sa teraz používajú pevne kódované hodnoty // Neskôr tieto hodnoty s pevným kódom použijeme oveľa efektívnejšie // Toto je cyklus pre čítanie hodnoty stĺpca (kľúčové slovo akcie) po riadku // Znamená to, že táto slučka vykoná všetky kroky uvedené pre testovací prípad v hárku Testovacie kroky pre (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

Aby sme tomuto konceptu rámcov poháňaných údajmi, kľúčovým slovom a hybridným pohonom lepšie porozumeli, žiadam vás, aby ste si pozreli nasledujúce video.

Selénový rámec pomocou Java Výučba selénu Školenie selénu online

Dúfam, že tento blog bol pre vás užitočný a dal vám jasné pochopenie toho, čo je selénový rámec, aký je prínosný a ako si môžete zostaviť štruktúru kódu pomocou týchto 3 selénových rámcov. Zostaňte naladení na ďalšie blogy v tejto sérii.

Ak sa chcete naučiť selén a budovať si kariéru v testovacej doméne, pozrite si náš interaktívny online prenos tu je dodávaná s podporou 24 * 7, ktorá vás prevedie celým vzdelávacím obdobím. Koncepty týkajúce sa „rámca selénu“ majú hĺbkové pokrytie v rámci kurzu Edureka.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.