TestNG is een testraamwerk 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 testcases uitvoeren in uw Testng-code.
Als testprioriteit niet is gedefinieerd tijdens het uitvoeren van meerdere testcases, wijst TestNG alle @Test een prioriteit toe als nul (0).
Nu, tijdens het rennen; lagere prioriteiten worden eerst ingepland.
In deze tutorial leer je -
- Demo van TestNG-code zonder prioriteit
- Demo van TestNG-code zonder prioriteit in alfabetische volgorde
- Prioriteit instellen in TestNG
- Methoden met dezelfde prioriteit
- Combinatie van zowel geprioriteerde (met dezelfde prioriteit) als niet-geprioriteerde methoden
Demo van TestNG-code zonder prioriteit
Laten we een scenario nemen waarin sequencing vereist is om alle testcases te doorstaan:
Scenario: genereer een code waarbij u een Google-zoekopdracht moet uitvoeren met een specifiek trefwoord, zeg "Facebook". Controleer nu of de browsertitel is gewijzigd in "Facebook - Google Zoeken".
Opmerking: elke stap die u codeert, moet in afzonderlijke methoden zijn
Methode 1 : Open browser, zeg Firefox (openBrowser ())
Methode 2 : start Google.com (launchGoogle ())
Methode 3 : Voer een zoekopdracht uit met "Facebook" (performSearchAndClick1stLink ())
Methode 4 : Controleer de titel van de Google-zoekpagina (FaceBookPageTitleVerification ())
Code voor ons scenario :
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.Assert;importeer org.testng.annotations.Test;openbare klas Priority_In_testNG {WebDriver-stuurprogramma;// Methode 1: Open Brower, zeg Firefox@Testopenbare leegte openBrowser () {driver = nieuwe FirefoxDriver ();// Methode 2: start Google.com@Testopenbare leegte lancering Google () {driver.get ("http://www.google.co.in");// Methode 3: voer een zoekopdracht uit met "Facebook"@Testopenbare leegte peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Zoeken']")). sendKeys ("Facebook");// Methode 4: controleer de titel van de Google-zoekpagina.@Testpublic void FaceBookPageTitleVerification () gooit uitzondering {driver.findElement (By.xpath (".//*[@ value = 'Zoeken']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Bevat ("Facebook - Google Zoeken"), waar);
Verklaring van de code
Zoals hierboven vermeld, hebben we 4 testcases gemaakt voor het uitvoeren van elke actie in een onafhankelijke methode.
- De eerste methode (openBrowser) stelt om de Firefox-browser te initialiseren.
- De tweede methode (launchGoogle) stelt dat het starten van Google.com in de geïnitialiseerde browser is.
- De derde methode (peformSeachAndClick1stLink) stelt dat je een zoekopdracht uitvoert in het zoekvak (met xpath (".//*[@title='Search ']") met een zoekterm als Facebook en
- De vierde en laatste methode (FaceBookPageTitleVerification) stelt dat u op het zoekpictogram van Google klikt en verifieert dat de browsertitel is gewijzigd in Facebook - Google Zoeken.
Voer nu deze code uit met testNG, zoals in de video wordt getoond, u zult zien dat alle testgevallen mislukken. De reden voor mislukking: aangezien er een afhankelijkheid is van het vorige testgeval om te slagen, zal alleen het huidige lopende testgeval worden doorstaan.
In dit geval,
- De eerste methode die wordt uitgevoerd, is openBrowser (). Het werd doorgegeven omdat het geen enkele afhankelijkheid heeft.
- De tweede uitgevoerde methode is FaceBookPageTitleVerification (); 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, u elke andere stap kunt doorstaan. Daarom is dit de reden waarom mijn testcases mislukken.
GESLAAGD: openBrowserMISLUKT: FaceBookPageTitleVerificationMISLUKT: start GoogleMISLUKT: peformSeachAndClick1stLink
Demo van TestNG-code zonder prioriteit in alfabetische volgorde
Als we geen prioriteit noemen, zal testng de @Test-methoden uitvoeren op basis van alfabetische volgorde van hun methodenamen, ongeacht hun plaats van implementatie in de code.
pakket com.guru.testngannotations;importeer org.testng.annotations.Test;openbare klasse TestNG_Priority_Annotations {@Testopenbare leegte c_method () {System.out.println ("Ik zit in methode C");@Testopenbare leegte b_method () {System.out.println ("Ik zit in methode B");@Testopenbare leegte a_method () {System.out.println ("Ik zit in methode A");@Testopenbare leegte e_method () {System.out.println ("Ik zit in methode E");@Testopenbare leegte d_method () {System.out.println ("Ik zit in methode D");
Uitvoer
Ik zit in methode AIk zit in methode BIk zit in methode CIk zit in methode DIk zit in methode E
Hoewel we de methoden op een willekeurige manier hebben gedefinieerd (c, b, a, e, d), heeft testng de methoden uitgevoerd op basis van hun methodenamen door rekening te houden met alfabetische volgorde en hetzelfde werd ook weerspiegeld in de uitvoer.
Prioriteit instellen in TestNG
Zoals je in het vorige voorbeeld hebt gezien, was sequencing vereist om voor dit scenario te slagen, dus zullen we het vorige stuk code aanpassen met Priority Parameter, zodat elke test moet worden uitgevoerd tegen de prioriteit die aan hen is toegewezen.
Zoals u kunt zien, hebben we de prioriteit toegewezen aan elke testcase, wat betekent dat de testcase de laagste prioriteitswaarde als eerste zal uitvoeren.
Prioriteit in testNG in actie
import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.Assert;importeer org.testng.annotations.Test;openbare klas Priority_In_testNG {WebDriver-stuurprogramma;// Methode 1: Open browser, zeg Firefox@Test (prioriteit = 1)openbare leegte openBrowser () {driver = nieuwe FirefoxDriver ();// Methode 2: start Google.com@Test (prioriteit = 2)openbare leegte lancering Google () {driver.get ("http://www.google.co.in");// Methode 3: voer een zoekopdracht uit met "Facebook"@Test (prioriteit = 3)openbare leegte peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Zoeken']")). sendKeys ("Facebook");// Methode 4: controleer de titel van de Google-zoekpagina.@Test (prioriteit = 4)public void FaceBookPageTitleVerification () gooit uitzondering {driver.findElement (By.xpath (".//*[@ value = 'Zoeken']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Bevat ("Facebook - Google Zoeken"), waar);
Verklaring van de code
Na het toekennen van prioriteit aan elke testcase, voert u de bovenstaande code uit met testNG zoals getoond in Video-2 hieronder vermeld.
Hier kunt u zien dat testgevallen prioriteit krijgen. Testgevallen met een lagere prioriteit worden eerst uitgevoerd, dwz nu is er een sequentiële uitvoering volgens prioriteit in de testgevallen. Daarom passeren alle testcases nu.
Let op de console van Eclipse:
Uitgang :
GESLAAGD: openBrowserGESLAAGD: launchGoogleGESLAAGD: peformSearchAndClick1stLinkGESLAAGD: 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.
pakket com.guru.testngannotations;importeer org.testng.annotations.Test;openbare klasse TestNG_Priority_Annotations {@Test (prioriteit = 6)openbare leegte c_method () {System.out.println ("Ik zit in methode C");@Test (prioriteit = 9)openbare leegte b_method () {System.out.println ("Ik zit in methode B");@Test (prioriteit = 1)openbare leegte a_method () {System.out.println ("Ik zit in methode A");@Test (prioriteit = 0)openbare leegte e_method () {System.out.println ("Ik zit in methode E");@Test (prioriteit = 3)openbare leegte d_method () {System.out.println ("Ik zit in methode D");
Uitvoer
Ik zit in methode EIk zit in methode AIk zit in methode DIk zit in methode CIk zit in methode B
Hier hebben we de prioriteiten aangegeven als 0,1,3,6,9. Dus methode met 0 als prioriteit wordt eerst uitgevoerd en vervolgens methode met prioriteit-1 enzovoort. Hier wordt geen rekening gehouden met de naam van de alfabetische volgorde, omdat we de prioriteiten hebben opgegeven
Methoden met dezelfde prioriteit:
De kans bestaat dat methoden dezelfde prioriteit hebben. In die gevallen houdt testng rekening met de alfabetische volgorde van de methodenamen waarvan de prioriteit hetzelfde is.
pakket com.guru.testngannotations;importeer org.testng.annotations.Test;openbare klasse TestNG_Priority_Annotations {@Test (prioriteit = 6)openbare leegte c_method () {System.out.println ("Ik zit in methode C");@Test (prioriteit = 9)openbare leegte b_method () {System.out.println ("Ik zit in methode B");@Test (prioriteit = 6)openbare leegte a_method () {System.out.println ("Ik zit in methode A");@Test (prioriteit = 0)openbare leegte e_method () {System.out.println ("Ik zit in methode E");@Test (prioriteit = 3)openbare leegte d_method () {System.out.println ("Ik zit in methode D");
Uitvoer
Ik zit in methode EIk zit in methode DIk zit in methode AIk zit in methode CIk zit in methode 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.
Combinatie van zowel geprioriteerde (met dezelfde prioriteit) als niet-geprioriteerde methoden:
In dit geval behandelen we twee cases in één testng-klasse.
- Methoden met dezelfde prioriteitswaarde.
- Meer dan één niet-geprioriteerde methode.
pakket com.guru.testngannotations;importeer org.testng.annotations.Test;openbare klasse TestNG_Priority_Annotations {@Test()openbare leegte c_method () {System.out.println ("Ik zit in methode C");@Test()openbare leegte b_method () {System.out.println ("Ik zit in methode B");@Test (prioriteit = 6)openbare leegte a_method () {System.out.println ("Ik zit in methode A");@Test (prioriteit = 0)openbare leegte e_method () {System.out.println ("Ik zit in methode E");@Test (prioriteit = 6)openbare leegte d_method () {System.out.println ("Ik zit in methode D");
Uitgang:
Ik zit in methode BIk zit in methode CIk zit in methode EIk zit in methode AIk zit in methode D
GESLAAGD: b_methodGESLAAGD: c_methodGESLAAGD: e_methodGESLAAGD: a_methodGESLAAGD: d_method
Uitleg:
Eerste voorkeur: methoden zonder prioriteit: 'c' en 'b': op alfabetische volgorde werd eerst 'b' uitgevoerd en daarna 'c'.
Tweede voorkeur: methoden met prioriteit: 'a', 'e' en 'd': 'e' werd als eerste uitgevoerd omdat het de hoogste prioriteit had (0). Omdat de prioriteit van de 'a'- en' d'-methoden hetzelfde was, hield testng rekening met de alfabetische volgorde van hun methodenamen. Dus tussen hen werd eerst 'a' uitgevoerd en daarna 'd'.
Hoofdlettergevoelig in TestNG
Ter informatie is er een standaardsyntaxis voor het definiëren van prioriteit in testNG, dat wil zeggen @Test (prioriteit = 4) , stel dat u het definieert in een andere syntaxis, zeg @Test (PRIORITY = 1), dan zal uw IDE het weergeven als een compilatiefout . Zie onderstaande afbeelding:
Gevolgtrekking:
Zoals je hebt gezien, als er een vereiste is om een set testcases in een specifieke volgorde uit te voeren, dit eenvoudig kan worden gedaan met Priority en testNG als een run-tool.
Deze tutorial is mogelijk gemaakt door bijdragen van Ramandeep Singh en Rama Krishna Gadde