Budování datově řízeného, ​​klíčového a hybridního selenového rámce



Tento blog vysvětluje, co je selenový rámec, jeho výhody a jak implementovat datové, klíčové a hybridní rámce v selenu.

Předchozí v této sérii jste se seznámili se základními koncepty při testování selenu.V tomto blogu vám však řeknu, jak pomocí selenového rámce optimalizovat strukturu kódu a tím se posunete blíže k tomu, abyste se stali .

Co je selenový rámec?

Selenium framework je struktura kódu pro zjednodušení údržby kódu a lepší čitelnost kódu. Rámec zahrnuje rozdělení celého kódu na menší části kódu, které testují konkrétní funkčnost.





Kód je strukturován tak, že „datová sada“ je oddělena od skutečného „testovacího případu“, který otestuje funkčnost webové aplikace. Může být také strukturován tak, že testovací případy, které je třeba provést, se nazývají (vyvolávají) z externí aplikace (například .csv).

Existuje řada rámců, ale 3 běžně používané rámce selenu jsou:



O těchto rámcích budeme v tomto blogu diskutovat s ukázkou. Ale než půjdeme dále, řeknu vám, proč musí být zaveden selenový rámec a jaké výhody z jejich používání získáte.

Proč potřebujeme selenový rámec?

Bez zavedeného rámce bude existovat jeden testovací případ, který bude zahrnovat celou funkčnost testu. Děsivá část je, že tento jediný testovací případ má schopnost vystoupat až na milion řádků kódu. Je tedy docela zřejmé, že tak velký testovací případ bude těžké číst. I když budete chtít později upravit jakoukoli funkcionalitu, budete mít s úpravou kódu těžké časy.

Vzhledem k tomu, že implementace rámce vyústí v menší, ale vícenásobné části kódu, existují různé výhody.



Výhody selenového rámce

  • Zvýšené opětovné použití kódu
  • Vylepšená čitelnost kódu
  • Vyšší přenositelnost
  • Snížený scénářúdržba

Nyní, když znáte základy rámců, dovolte mi každý z nich podrobně vysvětlit.

Rámec založený na datech

Rámec založený na datech v selenu je technika oddělení „datové sady“ od skutečného „testovacího případu“ (kódu). Tento rámec zcela závisí na vstupních testovacích datech. Testovací data jsou napájena z externích zdrojů, jako je soubor aplikace Excel, soubor .CSV nebo jakákoli databáze.

jak převést double do int v java

rámec řízený daty - rámec selenu - edureka

Jelikož je testovací případ oddělen od datové sady, můžeme testovací případ konkrétní funkce snadno upravit, aniž bychom provedli velkoobchodní změny v kódu. Například pokud chcete upravit kód pro funkce přihlašování, můžete upravit pouze to, aniž byste museli upravovat jakoukoli další závislou část ve stejném kódu.

Kromě toho můžete také snadno ovládat, kolik dat je třeba otestovat. Počet testovacích parametrů můžete snadno zvýšit přidáním dalších polí pro uživatelské jméno a heslo do souboru aplikace Excel (nebo jiných zdrojů).

Například pokud musím zkontrolovat přihlašovací údaje na webovou stránku, můžu ponechat sadu pověření uživatelského jména a hesla v souboru aplikace Excel a předat pověření do kódu k provedení automatizace v prohlížeči v samostatném souboru třídy Java.

Používání POI Apache se Selenium WebDriver

WebDriver nepodporuje přímo čtení souborů aplikace Excel. Proto používáme Apache POI pro čtení / zápis do libovolného dokumentu Microsoft Office. Apache POI (sada souborů JAR) si můžete stáhnout z tady . Stáhněte si soubor zip nebo tar podle vašich požadavků a umístěte je spolu se sadou Selenium JAR.

O koordinaci mezi hlavním kódem a souborem dat bude postaráno Poskytovatelé dat TestNG, což je knihovna, která je součástí souborů Apache POI JAR. Pro ukázkové účely jsem vytvořil soubor aplikace Excel s názvem „LoginCredentials“, ve kterém byla uživatelská jména a hesla uložena v různých sloupcích.

Podívejte se na níže uvedený kód, abyste porozuměli testovacímu případu. Jedná se o jednoduchý kód pro testování přihlašovací funkce aplikace pro rezervaci letů.

balíček 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 (username) driver.findElement (By.name ('password') )). sendKeys (heslo) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). Matches ('Find a Flight: Mercury Tours: '),' Invalid credentials ') System.out.println (' Login successful ')} @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 [] [] pověření = nový Objekt [řádky] [2] pro (int i = 0i

Pokud jste si všimli shora, máme metodu nazvanou „TestDataFeed ()“. V této metodě jsem vytvořil instanci objektu jiné třídy s názvem „ReadExcelFile“. Při vytváření instance tohoto objektu jsem přiváděl cestu k mému souboru aplikace Excel obsahujícímu data. Dále jsem definoval smyčku for k načtení textu ze sešitu aplikace Excel.

Ale pro čtení dat z daného čísla listu, čísla sloupce a čísla řádku jsou volání provedena do třídy „ReadExcelFile“. Níže je uveden kód mého souboru „ReadExcelFile“.

je sas programovací jazyk
balíček DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook veřejná třída ReadExcelFile {XSSFWorkbook wb XSSFSheet veřejný 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 Řetězec getData (int listnumber, int řádek, int sloupec) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (řádek) .getCell (sloupec) .getStringCellValue () návratová data} public int getRowCount (int sheetIndex) { int řádek = wb.getSheetAt (sheetIndex) .getLastRowNum () řádek = řádek + 1 návratový řádek}}

Nejprve si všimněte knihoven, které jsem importoval. Dovezl jsem Apache POI XSSF knihovny, které se používají ke čtení / zápisu dat do souborů aplikace Excel. Zde jsem vytvořil konstruktor (objekt stejné metody) pro předání hodnot: číslo listu, číslo řádku a číslo sloupce. Abychom lépe porozuměli tomuto rámci, žádám vás, abyste prošli níže uvedeným videem, kde jsem to vysvětlil strukturovaným způsobem.

Rámec řízený daty v selenu WebDriver Výukový program pro selen

Nyní přejdeme k rámci, tj. Rámci řízenému klíčovým slovem.

Rámec řízený klíčovými slovy

Framework řízený klíčovými slovy je technika, při které jsou všechny operace a pokyny, které mají být provedeny, psány odděleně od skutečného testovacího případu. Podobnost s rámcem Data Driven spočívá v tom, že operace, které mají být provedeny, jsou opět uloženy v externím souboru, jako je list aplikace Excel.

Operace, o kterých mluvím, nejsou nic jiného než metody, které je třeba provést jako součást testovacího případu. Výhodou rámce řízeného klíčovým slovem je, že můžete snadno ovládat funkce, které chcete testovat. V souboru aplikace Excel můžete určit metody, které testují funkčnost aplikace. Budou tedy testovány pouze ty názvy metod, které jsou uvedeny v aplikaci Excel.

Například pro přihlášení do webové aplikace můžeme do hlavního testovacího případu napsat několik metod, ve kterých každý testovací případ otestuje určitou funkčnost. Pro vytvoření instance ovladače prohlížeče může existovat jedna metoda, pro vyhledání polí uživatelského jména a hesla, mohou existovat metody, pro navigaci na webovou stránku může být jiná metoda atd.

Podívejte se na níže uvedený kód, abyste pochopili, jak vypadá rámec. Řádky, které jsou v níže uvedeném kódu komentovány, slouží jako vysvětlení, pokud nerozumíte.

balíček 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, 'Najít let: Prohlídky Merkuru : ')} public static void closeBrowser () {driver.quit ()}}

Jak vidíte, různé funkce, které je třeba otestovat, jsou přítomny v samostatných metodách, které čekají na volání. Nyní budou tyto metody volány z jiné třídy na základě přítomnosti názvu metody v souboru aplikace Excel. A podobně, abych si přečetl soubor aplikace Excel a poslal výsledky zpět, napsal jsem další třídu. Oba jsou zobrazeny níže.

Soubor třídy vyvolávající metody, je tento.

co je pojo třída v Javě s příkladem
balíček KeywordDriven veřejná třída DriverScript {public static void main (String [] args) vyvolá výjimku {// Deklarování cesty k souboru Excel s názvem souboru Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // zde předáváme cestu Excel a SheetName jako argumenty pro připojení k souboru aplikace Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Pro řádek a sloupce aplikace Excel se nyní používají pevně kódované hodnoty // Hodnoty se pevně používají pro řádek Excel & sloupce prozatím // V dalších kapitolách nahradíme tyto hodnoty s pevným kódem varibales // Toto je smyčka pro čtení hodnot sloupce 3 (klíčové slovo akce) řádek po řádku pro (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 soubor třídy, který čte hodnoty aplikace Excel, je toto.

balíček 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 veřejná třída ReadExcelData {soukromá statická XSSFSheet ExcelWSheet soukromý statický XSSFWorkbook ExcelWBook soukromý statický XSSFCell Buňka // Tato metoda má nastavit cestu k souboru a otevřít soubor Excel // Předat cestu a název Excel jako argumenty této metodě veřejná statická void setExcelFile (řetězec, cesta, název listu) hodí Výjimka {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Tato metoda slouží ke čtení testovacích dat z buňky Excel // V tomto předáváme parametry / argumenty jako 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}}

Pojďme nyní k závěrečné části tohoto blogu o Selenium framework, kde vám ukážu, jak vytvořit hybridní framework.

Hybridní rámec

Hybridní rámec je technika, při které můžeme co nejlépe využít jak rámce selenu založeného na datech, tak klíčových slov. Pomocí příkladů uvedených výše v tomto blogu můžeme vytvořit hybridní framework uložením metod, které se mají provést v souboru aplikace Excel (přístup řízený klíčovým slovem) a předáním těchto názvů metod do Java Reflection Class (přístup založený na datech) namísto vytvoření Pokud / Jinak smyčka ve třídě „DriverScript“.

Podívejte se na upravenou třídu „DriverScript“ v níže uvedeném fragmentu kódu.Zde se místo použití více smyček If / Else používá ke čtení názvů metod ze souboru aplikace Excel přístup založený na datech.

balíček HybridFramework import java.lang.reflect.Method veřejná třída DriverScriptJava {// Toto je objekt třídy, deklarovaný jako 'public static' // Aby jej bylo možné použít mimo rozsah metody main [] public static Akce actionKeywords public static String sActions // Toto je objekt třídy reflexe, deklarovaný jako 'public static' // Aby jej bylo možné použít mimo rozsah metody main [] public static Metoda [] public static void main (String [] args) vyvolá výjimku {// Deklarování cesty k souboru Excel s názvem souboru Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Zde předáváme cestu Excel a název listu pro připojení k souboru Excel // Tato metoda byl vytvořen dříve ReadExcelData.setExcelFile (sPath, 'Sheet1') // Hodnoty s pevným kódem se nyní používají pro řádky a sloupce aplikace Excel // Později budeme tyto hodnoty s pevným kódem používat mnohem efektivněji // Toto je smyčka pro čtení hodnoty sloupce (klíčové slovo akce) podle řádku // To znamená, že tato smyčka provede všechny kroky uvedené pro testovací případ v listu Testovací kroky pro (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

Abychom tomuto konceptu rámců řízených daty, klíčových a hybridních systémů lépe porozuměli, žádám vás, abyste se podívali na níže uvedené video.

Selenový rámec pomocí Javy | Výukový program pro selen | Selenium Training Online

Doufám, že tento blog byl pro vás užitečný a poskytl vám jasnou představu o tom, co je selenový rámec, jak je prospěšný a jak vytvořit strukturu kódu pomocí těchto 3 selenových rámců. Zůstaňte naladěni na další blogy v této sérii.

Pokud se chcete naučit selen a budovat si kariéru v testovací doméně, podívejte se na náš interaktivní online přenos Zde je k dispozici podpora 24 * 7, která vás provede celým obdobím učení. Koncepty týkající se „Selenium Framework“ mají v kurzu Edureky důkladné pokrytí.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.