Selenium WebDriver: TestNG pro správu testovacích případů a generování zpráv



Tento výukový program Selenium WebDriver vám pomůže pochopit potřebu používat TestNG se Selenem pro správu testovacích případů a generování podrobných protokolů o zkouškách.

V předchozím blogu jsem vás naučil, jak spustit váš první test selenového WebDriveru. V tomto blogu se budu věnovat pokročilým konceptům Selenium WebDriver. Již několikrát jsem se zmínil, že Selenium WebDriver má omezení, pokud jde o správu testovacích případů a generování testovacích zpráv. Jaká je tedy alternativa? Nástroj tak populární jako Selenium musí určitě mít řešení, že? Samozřejmě že ano! K překonání tohoto omezení můžeme použít kombinaci selenu a TestNG, což bude tématem diskuse tohoto blogu.

je postgraduální a ovládá stejné

V případě, že jste se Selenem noví a chcete se seznámit se základními koncepty, můžete začít svou cestu odtud: ? Ostatní však mohou začít s TestNG pro selen z tohoto blogu.Měli byste také vědět, že organizace aktivně hledají profesionály , což je pro softwarové testery důležitou dovedností k osvojení.





Vývojáři softwaru z celého světa jednomyslně souhlasí s tím, že psaní kódu v testovacích případech jim ušetří velkou část času na ladění. Proč? To proto, že testovací případy pomáhají při vytváření robustního a bezchybného kódu. Jak to dělá? Rozdělením celého kódu na menší testovací případy a následným vyhodnocením každého z těchto testovacích případů pro splnění / nesplnění podmínek můžeme vytvořit bezchybný kód. Vzhledem k tomu, že Selenium nepodporuje provádění kódu v testovacích případech, musíme pro stejné použít TestNG. To je místo, kde TestNG zapadá do selenového rámce.

TestNG znamená Vyzkoušejte novou generaci a jedná se o open-source testovací automatizační rámec inspirovaný JUnit a NUnit. Není to jen inspirace, ale upgrade na tyto dva rámce. Takže se můžete zeptat, jaký je zde upgrade?Upgrade s TestNG spočívá v tom, že poskytuje další funkce, jako jsou: testovací poznámky, seskupování, stanovení priorit, parametrizace a sekvenční techniky v kódu, které dříve nebyly možné.



Kromě správy testovacích případů lze pomocí TestNG získat i podrobné zprávy o testech. K dispozici bude souhrn zobrazující testovací případ, který selhal, spolu se skupinou, do které byl součástí, a třídou, do které spadá. Když lze takto přesně lokalizovat chyby, mohou být okamžitě opraveny k úlevě od vývojářů. Na následujícím obrázku je znázorněno fungování TestNG.

testng - selenový webdriver

Jak tedy TestNG provede práci? Tato otázka bude zodpovězena vdalší část tohoto výukového blogu Selenium WebDriver, kde budu diskutovat o tom, jak spravovat různé testovací případy pomocí TestNG.



Selenium WebDriver s TestNG

Testovací případy lze definovat a spravovat jedním z následujících způsobů:

  1. Testovací poznámky
  2. Stanovení priorit
  3. Zakázání testovacích případů
  4. Závislost metody
  5. Seskupení
  6. Tvrzení
  7. Generování zpráv

Dovolte mi začít vysvětlovatkaždou z těchto funkcí.

Testovací poznámky

Nejprve si položme tuto otázku: Proč musíme používat anotace? Kdy je můžeme použít? Anotace v selenu se používají k ovládání další metody, která se má provést. Poznámky k testu jsou definovány před každou metodou v testovacím kódu. V případě, že žádná metoda nemá předponu s anotacemi, bude tato metoda ignorována a nebude provedena jako součást testovacího kódu. K jejich definování je třeba metody jednoduše anotovat pomocí ‚ @Test „. Podívejte se například na níže uvedený fragment kódu.

balíček testng import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.annotations.AfterClass import org.testng.annotations.AfterMethod import org.testng.annotations.BeforeClass import org.testng.annotations .BeforeMethod import org.testng.annotations.Test veřejné třídy TestAnnotations {@Test public void myTestMethod () {System.out.println ('Inside method: - myTestMethod') WebDriver driver = new FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') Název řetězce = driver.getTitle () System.out.println (title) driver.quit ()} @BeforeMethod public void beforeMethod () {System.out.println (' This kus kódu je proveden před metodou: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod () {System.out.println (' This piece kódu se provede po metodě: - myTestMethod ')} @BeforeClass public void beforeClass () {Syste m.out.println ('Tato část kódu je provedena před provedením třídy')} @AfterClass public void afterClass () {System.out.println ('Tato část kódu je provedena po provedení třídy')} }

Ve výše uvedeném kódu byste si všimli, že jsem nedefinoval ‚hlavní 'metodu. Mám však definováno dalších 5 metod. Jsou to „myTestMethod“, „beforeMethod“, „afterMethod“, „beforeClass“ a „afterClass“. Všimněte si také pořadí definice metod v kódu, protože nebudou provedeny ve stejném pořadí.

Metoda „myTestMethod“ je anotována @Test , a je třeba provést hlavní metodu nebo část kódu. Před a po provedení této metody budou provedeny další metody s poznámkami. Protože ‚beforeMethod 'je anotován @BeforeMethod , bude provedeno před provedením „myTestMethod“. Podobně je „afterMethod“ anotován @AfterMethod , a bude tedy spuštěn po „myTestMethod“.

Výraz „beforeClass“ je však opatřen poznámkami @Před hodinou , což znamená, že bude provedeno ještě před provedením samotné třídy. Název naší třídy je zde TestAnnotations , a tedy předtím, než se třída začne spouštět, bude provedena část kódu uvnitř ‚beforeClass '. Podobně je „afterClass“ anotován @AfterMethod , a budou tedy provedeny po skončení kurzu TestAnnotations je proveden.

Pokud stále máte nejasnosti ohledně pořadí provádění, pak vám níže uvedený úryvek určitě pomůže.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod 5. Test 6. AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

Výstupem výše uvedeného kódu bude:

Tato část kódu se provede před provedením třídy Tato část kódu se provede před metodou: - myTestMethod Vnitřní metoda: - myTestMethod 1493192682118 geckodriver INFO Poslech na 127.0.0.1:13676 1493192682713 mozprofile :: profil INFO Pomocí cesty profilu C: UsersVardhanAppDataLocalTemp ust_moz .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Spuštění prohlížeče C: Program Files (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO Připojení k loutce na localhost: 59792 [GPU 6152] VAROVÁNÍ: chyba kanálu: 109: soubor c: / sestavení /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, linka 346 1493192688316 Marionette INFO Poslech na portu 59792 26. dubna 2017 13:14:49 org. openqa.selenium.remote.ProtocolHandshake createSession INFO: Zjištěný dialekt: W3C Chyba JavaScriptu: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, řádek 1: TypeError: document.getElementsByTagNa me (...) [0] je nedefinovaný rámec selenu | Practiceform 1493192695134 Marionette INFO Nová připojení již nebudou přijímána 26. dubna 2017 13:14:57 org.openqa.selenium.os.UnixProcess zničit SEVERE: Nelze zabít proces s PID 6724 Tento kus kódu se provede po metodě: - myTestMethod Tato část kódu se provede po provedení třídy PASSED: myTestMethod ===================================== ============ Výchozí test Spustí se testy: 1, selhání: 0, přeskočení: 0 ========================= =================================================== ===================== Výchozí sada Celkový počet spuštěných testů: 1, Selhání: 0, Přeskočení: 0 ================ =================================

Jak můžete vidět z výše uvedeného výstupu, počet spuštěných testů je 1 a neúspěch je 0. To znamená, že kód je úspěšný. I pořadí provádění metod bude v pořadízmíněno dříve.

Když tento kód ve svém počítači spustíte, Selenium WebDriver vytvoří instanci prohlížeče Firefox, přejde do cvičného formuláře Selenium Framework, zavře instanci prohlížeče a zobrazí stejný výstup, jak je uvedeno výše v IDE Eclipse.

Ve svém kódu jsem použil pouze 5 různých anotací. Existuje ale mnohem více anotací, které lze použít k ovládání další metody, která má být provedena. Celý seznam anotací je vysvětlen vstůlníže:

@BeforeSuite - Metoda s poznámkou @BeforeSuite proběhne před spuštěním všech testů v sadě.

@AfterSuite - Metoda s poznámkou @AfterSuite se spustí po spuštění všech testů v sadě.

@BeforeTest - Metoda s poznámkou @BeforeTest bude spuštěno před spuštěním jakékoli testovací metody patřící do třídy.

@AfterTest - Metoda s poznámkou @AfterTest se spustí po spuštění všech testovacích metod patřících do třídy.

@BeforeGroup - Metoda s poznámkou @BeforeGroup proběhne před spuštěním každé skupiny.

@AfterGroup - Metoda s poznámkou @AfterGroup poběží po spuštění každé skupiny.

@Před hodinou - Metoda s poznámkou @Před hodinou se spustí jednou, než se vyvolá první testovací metoda v aktuální třídě.

@Po hodině - Metoda s poznámkou @Po hodině se spustí jednou po spuštění všech testovacích metod v aktuální třídě.

@BeforeMethod - Metoda s poznámkou @BeforeMethod bude spuštěno před spuštěním jakékoli testovací metody uvnitř třídy.

jak implementovat propojený seznam v c

@AfterMethod - Metoda s poznámkou @AfterMethod poběží po spuštění každé testovací metody uvnitř třídy.

@Test - Metoda s poznámkou @Test je hlavní testovací metoda v celém programu. Kolem této metody budou provedeny další komentované metody.

Snímek obrazovky se zprávou TestNG jepřítomen níže: -

Stanovení priorit

Mluvili jsme o tom, jak různé metody, které lze definovat tak, aby byly prováděny kolem @Test metoda. Ale co když máte více než jednu @Test metoda a chcete definovat pořadí provádění mezi nimi?

V takovém případě můžemePupřednostněte je přidělením čísla anotovaným testovacím případům. Menší číslo, vyšší priorita. Prioritu lze přiřadit jako parametry při definování testovacích případů. Pokud však není přiřazena žádná priorita, budou testované metody s poznámkami provedeny podle abecedního pořadí testů. Podívejte se na parametry testovacích anotací v níže uvedené částikód.

@Test (Priority = 2) public static void FirstTest () {system.out.println ('This is the Test Case number Two because of Priority # 2')} @Test (Priority = 1) public static void SecondTest () { system.out.println ('Toto je testovací případ číslo jedna z důvodu priority č. 1')} @Test public static void FinalTest () {system.out.println ('Toto je poslední testovací případ, protože neexistuje žádná priorita') )}

Zakázání testovacích případů

Ukážu vám něco zajímavějšího. Co když máte kód přesahující milion řádků skládající se ze stovek testovacích případů a chcete deaktivovat pouze jednu testovací metodu? Místo toho nemusíte mazat žádnou část kódu, můžeme tuto testovací metodu jednoduše deaktivovat.

Akt deaktivace testovacího případu se také provádí pomocí parametrů. Můžeme nastavit povoleno atribut „false“. Ve výchozím nastavení budou povoleny všechny testovací případy, proto je není nutné definovat pokaždé, když napíšeme test. Podívejte se na parametry třetí a čtvrté metody v níže uvedené částikód.

@Test (Priority = 2, enabled = True) public static void FirstTest () {system.out.println ('This is the Test Case number Two because of Priority # 2')} @Test (Priority = 1, enabled = True ) public static void SecondTest () {system.out.println ('This is the Test Case number One because of Priority # 1')} @Test (enabled = false) public static void SkippedTest () {system.out.println ( 'This is the Skipped Test Case because this has been disabled')} @Test (enabled = True) public static void FinalTest () {system.out.println ('This is the Final Test Case, which is enabled and has no Priority ')}

Závislost metody

Nyní v případě, že máte situaci, kdy chcete, aby byl kus kódu spuštěn pouze v případě, že splňuje podmínku, nebo pouze v případě, že se určitá metoda provede úspěšně, to můžeme udělat pomocí dependsOnMethod (). Toto je v podstatě podmínka závislosti metody, kdy bude metoda provedena v závislosti na jiné metodě. Pokud dodatečně nastavíme alwaysRun atribut true, pak bude metoda provedena bez ohledu na podmínku selhání / předání závislé metody. Podívejte se na kód v níže uvedeném fragmentu kódu.

@Test public static void FirstTest () {system.out.println ('Toto je první testovaný případ, který má být proveden')} @Test (dependsOnMethods = {'FirstTest'}) veřejný static void SecondTest () {system.out. println ('Toto je druhý testovací případ, který má být proveden Toto je závislá metoda')} @Test (dependsOnMethods = {'SecondTest'}) public static void FinalTest () {system.out.println ('Toto je závěrečný test Případ Bude stejně proveden. ')}

Tím se nyní dostáváme k dalšímu důležitému aspektu testuanotace což je Seskupení .

Seskupení

Nyní musíte vědět, že v kódu bude celá řada metod jako součást našeho testovacího případu. Řekněme, že existuje 100 testovacích případů, ale v našem dalším testu chceme provést pouze 20 testovacích případů. Myslíte si, že to dokážeme? Jasně, že můžeme.

Můžeme použít skupiny atribut pro tento účel. Můžeme přiřadit název skupiny několika testovacím případům a později zvolit provedení skupiny namísto celého kódu. Chcete-li to pochopit, podívejte se na níže uvedený fragment kódujak vytvářet skupiny.

@Test (groups = {'MyGroup'}) public static void FirstTest () {system.out.println ('This is a part of the Group: MyGroup')} @Test (groups = {'MyGroup'}) public static void SecondTest () {system.out.println ('This is also a part of the Group: MyGroup')} @Test public static void ThirdTest () {system.out.println ('But, this is not a part of the Skupina: MyGroup ')}

TestNG tvrzení

Tím se nyní dostáváme k dalšímu tématu v TestNG, kterým jsou tvrzení. Jak název napovídá, lze v testovacích metodách použít tvrzení k určení podmínky úspěšného / neúspěšného testu. Na základě pravdivé / nepravdivé podmínky příkazu budou testy úspěšné / neúspěšné.

V níže uvedeném kódu jsem zahrnoval 3 testovací metody, přičemž první a třetí metoda mají podmínku splnění a druhá metoda bude mít podmínku selhání. Podívejte se na kód sami.

balíček testng import org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.AfterMethod public class Assertions {@BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} public boolean isEqual (int a, int b) {if (a == b ) {return true} else {return false}} @Test public void testEquality1 () {Assert.assertEquals (true, isEqual (10, 10)) System.out.println ('This is a pass condition')} @Test public void testEquality2 () {Assert.assertEquals (true, isEqual (10, 11)) System.out.println ('This is a fail condition')} @Test public void getTitle () {WebDriver driver = new FirefoxDriver () driver. get ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (title, 'Gmail') System.out.println ('This is again a pass condition')} }

Když se podíváte na sestavu, která se vygeneruje po tomto provedení, všimnete si, že ze tří testů jeden selhal a dva prošly. Dalším důležitým bodem, který je třeba poznamenat, je, že když se tvrzení nezdaří, ostatní příkazy / řádky kódu v tomto testu budou přeskočeny. Pouze v případě, že je tvrzení úspěšné, bude v tomto testu proveden další řádek kódu. Podívejte se na výstup níže, kde system.out.println provedl pouze pro první a třetí metodu.

1493277977348 geckodriver INFO Poslech na 127.0.0.1:47035 1493277977993 mozprofile :: profil INFO Použití cesty k profilu C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionilla INFO x832 Mozek Připojení k loutce na localhost: 50758 [GPU 6920] UPOZORNĚNÍ: Chyba kanálu: 109: soubor c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, řádek 346 1493277981742 Marionette INFO Poslech na portu 50758 27. dubna 2017 12:56:22 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Zjištěný dialekt: W3C Toto je opět podmínka splnění Jedná se o podmínku PROJIŠTĚNO: getTitle PASSED: testEquality1 FAILED: testEquality2 java.lang.AssertionError: expect [false] but found [true] at org.testng.Assert.fail (Assert.java:93) at org.testng.Assert.failNotEquals (Assert.java: 512) při org.testng.Assert.assertE qualsImpl (Assert.java:134) na org.testng.Assert.assertEquals (Assert.java:115) na org.testng.Assert.assertEquals (Assert.java:304) na org.testng.Assert.assertEquals (Assert.java) : 314) at testng.Assertions.testEquality2 (Assertions.java:38) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) at sun.reflect.DelegatingMethodAccess Source) at java.lang.reflect.Method.invoke (Unknown Source) at org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) at org.testng.internal.Invoker.invokeMethod (Invoker.java:661) at org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) at org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) at org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java ) na org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) na org.testng.TestRunner.privateRun (TestRunner.java:744) na org.testng.TestRu nner.run (TestRunner.java:602) na org.testng.SuiteRunner.runTest (SuiteRunner.java:380) na org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) na org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) na org.testng.SuiteRunner.run (SuiteRunner.java:289) na org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) na org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) na org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) na org.testng.TestNG.runSuitesLocally (TestNG.java:1226) na org.testng.TestNG.runSuites (TestNG.java:1144) na org.testng. TestNG.run (TestNG.java:1115) at org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) at org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) at org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ======================================== ======== Výchozí testovací testy: 3, selhání: 1, přeskočení: 0 ============================= ================================================== ================= Výchozí sada Celkový počet spuštěných testů: 3, Selhání: 1, Přeskočení: 0 ==================================== =============

To je tedy konec konceptů souvisejících se správou testovacích případů. Zbývá nám ještě jedno téma, a to generování zpráv. Generování zpráv je posledním tématem v tomto výukovém programu Selenium WebDriver, protože zprávy lze generovat až po všechjsou provedeny testy.

rozdíl mezi hashovací mapou a hashovací tabulkou

Generování zpráv

Nejdůležitější věcí, kterou si musíte uvědomit, je, že zpráva bude generována pouze prostřednictvím souboru .xml. To znamená, ať už jde o metodu, nebo o třídu, nebo o skupinu, kterou chcete testovat, musí být všechny uvedeny v souboru .xml.

Nejprve tedy můžete ve svém projektu vytvořit novou složku a uvnitř této složky vytvořit nový soubor, pojmenovat soubor a uložit jej s příponou .xml. Novou složku a soubor můžete vytvořit kliknutím pravým tlačítkem na průzkumník balíčků. Jakmile vytvoříte soubor, přejděte na záložku zdroje ve spodní části okna a zadejte konfigurace, jak je uvedeno v následujícím fragmentu.

 

První řádek je definice typu dokumentu XML. Toto je standardní a povinné pro všechny protokoly o zkouškách. Ale ostatní řádky jsou docela vysvětlující. Použil jsem otevřené značky pro sadu, test, třídy a třídu. Značka Classes can have one or more class inside it. Lze jej tedy použít, pokud chceme vygenerovat zprávu, kde testujeme více tříd. To je užitečné zejména pro vývojáře, kteří chtějí otestovat dlouhý kus kódu.

Každopádně, když se vrátíte k našemu přehledu, můžete po otevření těchto značek pojmenovat každou sadu, test nebo třídu a nezapomeňte zavřít každou otevřenou značku. Jméno své sady jsem uvedl jako TestNG , název testu jako Test Anotace a název třídy jako testovací poznámky. Všimněte si, že název třídy je ve formátu '' packagename.classname “ .

Když spustíte tento soubor jako sadu TestNG, spustí se spuštění a získáte podrobné protokoly o zkouškách. Výstup testu získáte na kartě konzoly a výsledek testovací sady na další kartě. Zpráva, kterou jsem vygeneroval pro spuštění mého kódu, jevníže uvedený snímek obrazovky. Všimnete si, že tentokrát existuje název sady, název testu, název třídy spolu s časem potřebným na provedení každého z nich.

V případě, že chcete zobrazit zprávu HTML (indexová zpráva nebo e-mailová zpráva), můžete přejít na test-výstup složku v adresáři projektu ve vašem pracovním prostoru. Kliknutím na ně můžete přehledy zobrazit i později. Níže jsou jejich snímky obrazovky.

Zpráva o rejstříku : -

Emailable Report : -

Tím se dostáváme na konec tohoto výukového blogu Selenium WebDriver. Je čas, abyste na svém konci nastavili zatmění, nainstalovali různé balíčky selenu, nainstalovali TestNG a začali psát své testovací případy.

Můžete se podívat na níže uvedené výukové video Selenium WebDriver, abyste byli svědky demonstrace různých konceptů vysvětlených v tomto blogu.

Školení selenu Rámec TestNG pro selen | Edureka

Toto video Edureka Selenium Training vás provede podrobnými podrobnostmi Selenium WebDriver. Toto výukové video selenu je ideální pro začátečníky i profesionály, kteří chtějí prozkoumat základy příkazů WebDriver a naučit se, jak lze TestNG používat se selenem pro správu různých testovacích případů.

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í.

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