TestNG @Testprioriteit in Selenium
TestNG is een Testen raamwerk, dat verschillende soorten testontwerpen omvat, zoals een unit-test, functionele test, end-to-end-test, UI-test en integratietest.
U kunt een enkele of meerdere testgevallen uitvoeren in uw Testen code.
Als de testprioriteit niet is gedefinieerd tijdens het uitvoeren van meerdere testgevallen, TestNG wijst alle @Test een prioriteit toe als nul(0).
Nu, tijdens het rennen; lagere prioriteiten worden eerst gepland.
Demo van TestNG code zonder prioriteit
Laten we een scenario nemen waarin sequentiebepaling vereist is om alle testgevallen te doorstaan:
Scenario: Genereer een code waarbij u een Google-zoekopdracht moet uitvoeren met een specifiek trefwoord, bijvoorbeeld 'Facebook'. Controleer nu of de browsertitel is gewijzigd in "Facebook - Google Zoeken".
Opmerking: elke stap die u codeert, moet in afzonderlijke methoden plaatsvinden
Methode 1: Browser openen, zeg maar Firefox (Open browser())
Methode 2: Start Google.com (startGoogle())
Methode 3: Voer een zoekopdracht uit met behulp van “Facebook” (performSearchAndClick1stLink())
Methode 4: Controleer de titel van de Google-zoekpagina (FaceBookPageTitleVerification())
Codeer voor ons scenario:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Verklaring van code
Zoals hierboven vermeld hebben we 4 testgevallen gemaakt voor het uitvoeren van elke actie op een onafhankelijke manier.
- De eerste methode (Open browser) staten om te initialiseren Firefox browser.
- De tweede methode (start Google) geeft aan dat het starten van Google.com in de geïnitialiseerde browser plaatsvindt.
- De derde methode (voervormZoekenAndKlik1stLink)staten die een zoekopdracht uitvoeren in het zoekvak (met xpath (“.//*[@title='Zoeken']”) met een zoekterm als Facebook en
- De vierde en laatste methode (FaceBookPageTitleVerificatie) staten die op het zoekpictogram van Google klikken en verifiëren dat de browsertitel is gewijzigd in Facebook – Google Zoeken.
Voer deze code nu uit met testNG zoals getoond in de video. U zult alle Testgeval zijn aan het falen. De reden voor het mislukken: aangezien er een afhankelijkheid is van de eerdere testcase om te slagen, zal alleen de huidige lopende testcase slagen.
In dit geval,
- De eerste methode die wordt uitgevoerd is Open browser(). Het werd aangenomen omdat het geen enkele afhankelijkheid heeft.
- De tweede uitgevoerde methode is FaceBookPaginaTitelVerificatie(); het mislukt omdat we proberen op de zoekknop te klikken en de browsertitel te verifiëren.
- U kunt zien dat als de zoekactiviteit niet wordt verwerkt, elke andere stap kan worden doorgegeven. Dit is dan ook de reden dat mijn testgevallen mislukken.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo van TestNG code zonder prioriteit in alfabetische volgorde
Als we geen prioriteit opgeven, voert testng de @Test-methoden uit op basis van de alfabetische volgorde van hun methodenamen, ongeacht hun plaats van implementatie in de code.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
uitgang
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Hoewel we de methoden op willekeurige wijze definieerden (c, b, a, e, d), voerde testng de methoden uit op basis van hun methodenamen, waarbij rekening werd gehouden met de alfabetische volgorde. Dit werd ook weerspiegeld in de uitvoer.
Prioriteit instellen TestNG
Zoals je in het vorige voorbeeld hebt gezien, is sequencing vereist om dit scenario te doorstaan, dus zullen we het vorige stuk code aanpassen met Prioriteitsparameter zodat elke test moet worden uitgevoerd in overeenstemming met de prioriteit die eraan is toegewezen.
Zoals u kunt zien, hebben we aan elk testgeval een prioriteit toegewezen. Dit betekent dat het testgeval eerst met de lagere prioriteitswaarde wordt uitgevoerd.
Prioriteit in testNG in actie
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Verklaring van code
Nadat u prioriteit hebt toegewezen aan elke testcase, voert u de bovenstaande code uit met testNG zoals getoond in Video-2 hieronder.
Hier kunt u zien dat testgevallen prioriteit krijgen. Testgevallen met een lagere prioriteit worden als eerste uitgevoerd, dwz nu is er een sequentiële uitvoering volgens prioriteit in de testgevallen. Daarom zijn alle testgevallen nu geslaagd.
Let op de console van de eclips:
uitgang :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Nummer 0 heeft de hoogste prioriteit (het wordt als eerste uitgevoerd) en de prioriteit gaat verder op basis van het opgegeven nummer, dwz 0 heeft de hoogste prioriteit dan 1. 1 heeft de hoogste prioriteit dan 2, enzovoort.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
uitgang
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Hier hebben we de prioriteiten opgegeven als 0,1,3,6,9. De methode met prioriteit 0 wordt dus eerst uitgevoerd en vervolgens de methode met prioriteit 1, enzovoort. Hier wordt geen rekening gehouden met de alfabetische volgorde van de methodenaam, omdat we de prioriteiten hebben opgegeven
Methoden met dezelfde prioriteit
Er is een kans dat methoden dezelfde prioriteit hebben. In die gevallen houdt testng rekening met de alfabetische volgorde van de methodenamen waarvan de prioriteit dezelfde is.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
uitgang
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Hier worden 'e' en 'd' uitgevoerd op basis van hun prioriteitswaarden. Maar de methoden 'a' en 'c' bevatten dezelfde prioriteitswaarde(6). Dus, hier beschouwt testng de alfabetische volgorde van 'a' en 'c' en voert ze dienovereenkomstig uit.
Het combineren van zowel geprioriteerde (met dezelfde prioriteit) als niet-geprioriteerde methoden
In dit geval behandelen we twee gevallen in één testng-klasse.
- Methoden met dezelfde prioriteitswaarde.
- Meer dan één niet-geprioriteerde methode.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Output:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Uitleg:
Eerste voorkeur: Methoden zonder prioriteit: 'c' en 'b': op basis van alfabetische volgorde werd 'b' eerst uitgevoerd en daarna 'c'.
Tweede voorkeur: Geprioriteerde methoden: 'a', 'e' en 'd': 'e' werd als eerste uitgevoerd omdat het de hoogste prioriteit had (0). Omdat de prioriteit van de methoden 'a' en 'd' hetzelfde was, hield testng rekening met de alfabetische volgorde van hun methodenamen. Dus tussen hen werd 'a' als eerste uitgevoerd en daarna 'd'.
Hoofdlettergevoelig in TestNG
Ter informatie: er is een standaardsyntaxis voor het definiëren van prioriteit in testNG, namelijk: @Test (prioriteit=4), stel dat je het in een andere syntaxis definieert, bijvoorbeeld @Test (PRIORITEIT=1) dan zal uw IDE het weergeven als een compilatiefout. Zie onderstaande afbeelding:
Conclusie
Zoals u hebt gezien, kunt u, als er een vereiste is om een set testgevallen in een specifieke volgorde uit te voeren, dit eenvoudig doen met behulp van Prioriteit testNG gebruiken als runtool.
Deze tutorial wordt mogelijk gemaakt dankzij bijdragen van Ramandeep Singh en Rama Krishna Gadde