Selenium WebDriver: TestNG за управление на тестови случаи и генериране на отчети



Този урок за Selenium WebDriver ще ви помогне да разберете необходимостта да използвате TestNG с Selenium за управление на тестови случаи и генериране на подробни тестови отчети.

В предишния блог ви научих как да стартирате първия си тест за Selenium WebDriver. В този блог ще разгледам разширените концепции на Selenium WebDriver. Вече споменах доста пъти, че Selenium WebDriver има ограничения по отношение на управлението на тестови случаи и генерирането на отчети за тестове. И така, каква е алтернативата? Инструмент, толкова популярен като селен, определено трябва да има заобиколно решение, нали? Разбира се, че го прави! Можем да използваме комбинация от селен и TestNG, за да преодолеем това ограничение и това ще бъде темата на дискусията в този блог.

какво е регистратор в Java

В случай, че сте нов за Селен и искате въведение в основните понятия, можете да започнете пътуването си от тук: ? Останалите обаче могат да започнат с TestNG за селен от този блог.Трябва също да знаете, че организациите активно търсят професионалисти с , което го прави важно умение за тестването на софтуер.





Разработчиците на софтуер от цял ​​свят единодушно ще се съгласят, че писането на код в тестови случаи спестява голяма част от времето за отстраняване на грешки. Защо? Това е така, защото тестовите случаи помагат при създаването на надежден код без грешки. Как се прави това? Чрез разбиване на целия код на по-малки тестови случаи и след това чрез оценка на всеки от тези тестови случаи за преминаване / неуспех, можем да създадем код без грешки. Тъй като Selenium не поддържа изпълнение на код в тестови случаи, трябва да използваме TestNG за същото. Това е мястото, където TestNG се вписва в рамката на Selenium.

ТестNG означава Тествайте следващото поколение и това е рамка за автоматизация на тестове с отворен код, вдъхновена от JUnit и NUnit. Е, не просто вдъхновено, но надграждане на тези две рамки. Така че можете да попитате какво е надстройката тук?Надграждането с TestNG е, че предоставя допълнителна функционалност като: тестови анотации, групиране, приоритизиране, параметризиране и техники за последователност в кода, което не беше възможно по-рано.



Освен управлението на тестови случаи, дори подробни отчети от тестовете могат да бъдат получени чрез използване на TestNG. Ще има обобщение, показващо тестовия случай, който е неуспешен, заедно с групата, в която е бил част, и класа, в който попада. Когато грешките могат да бъдат точно разположени по този начин, те могат да бъдат незабавно отстранени за облекчение на разработчиците. Изображението по-долу показва работата на TestNG.

testng - селен уеб драйвер

И така, как TestNG свършва работата? Ще получите отговор на този въпросследващия раздел на този блог с уроци на Selenium WebDriver, където ще обсъждам как да управлявам различни тестови случаи с помощта на TestNG.



Селен WebDriver с TestNG

Тестовите случаи могат да бъдат дефинирани и управлявани по един от следните начини:

  1. Тестови анотации
  2. Приоритизиране
  3. Деактивиране на тестови случаи
  4. Зависимост на метода
  5. Групиране
  6. Твърдения
  7. Генериране на отчети

Нека да започна да обяснявамвсяка от тези функционалности.

Тестови анотации

Първо, нека си зададем този въпрос: Защо трябва да използваме анотации? Кога можем да ги използваме? Анотациите в селен се използват за управление на следващия метод, който трябва да бъде изпълнен. Тестовите анотации са дефинирани преди всеки метод в тестовия код. В случай че някой метод не е с префикс с анотации, тогава този метод ще бъде игнориран и няма да бъде изпълнен като част от тестовия код. За да ги дефинират, методите трябва просто да бъдат отбелязани с „ @Тест ‘. Вижте например кодовия фрагмент по-долу.

пакет 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 публичен клас TestAnnotations {@Test public void myTestMethod () {System.out.println ('Вътрешен метод: - myTestMethod') WebDriver драйвер = нов FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') Заглавие на низа = driver.getTitle () System.out.println (заглавие) driver.quit ()} @BeforeMethod public void beforeMethod () {System.out.println (' This парче код се изпълнява преди метод: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod () {System.out.println (' Тази част на кода се изпълнява след метод: - myTestMethod ')} @BeforeClass public void beforeClass () {Syste m.out.println ('Тази част от кода се изпълнява преди изпълнението на класа')} @AfterClass public void afterClass () {System.out.println ('Тази част от кода се изпълнява след изпълнението на класа')} }

В горния код бихте забелязали, че не съм дефинирал ‘основен’ метод. Имам обаче определени 5 други метода. Те са ‘myTestMethod’, ‘beforeMethod’, ‘afterMethod’, ‘beforeClass’ и ‘afterClass’. Също така обърнете внимание на реда на дефиниране на методите в кода, защото те няма да бъдат изпълнени в същия ред.

Методът ‘myTestMethod’ е коментиран с @Тест и това е основният метод или част от кода, който трябва да бъде изпълнен. Други анотирани методи ще бъдат изпълнени преди и след изпълнението на този метод. Тъй като ‘beforeMethod’ е коментиран с @BeforeMethod , тя ще бъде изпълнена преди да се изпълни ‘myTestMethod’. По подобен начин ‘afterMethod’ е коментиран с @AfterMethod и по този начин тя ще бъде изпълнена след „myTestMethod“.

Въпреки това, ‘beforeClass’ се коментира с @BeforeClass , което означава, че ще бъде изпълнено още преди да бъде изпълнен самият клас. Името на нашия клас тук е ТестАнотации и по този начин, преди класът да започне да се изпълнява, парчето код вътре в ‘beforeClass’ ще бъде изпълнено. По същия начин, ‘afterClass’ е коментиран с @AfterMethod , и по този начин ще бъде изпълнен след класа ТестАнотации се изпълнява.

Ако все още имате объркване по отношение на реда на изпълнение, тогава фрагментът по-долу определено ще ви помогне.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod 5. Тест 6. AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

Резултатът от горния код ще бъде:

Тази част от кода се изпълнява преди изпълнението на класа Тази част от кода се изпълнява преди метод: - myTestMethod Вътрешен метод: - myTestMethod 1493192682118 geckodriver INFO Прослушване на 127.0.0.1.13676 1493192682713 mozprofile :: profile INFO Използване на профил път C: UsersVardhanAppDataLocalTempfile ust_ .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Стартиращ браузър C: Програмни файлове (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO Свързване с Marionette на localhost: 59792 [GPU 6152] файл за изграждане: c / 109: c /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, линия 346 1493192688316 Марионет ИНФОРМА Прослушване на пристанище 59792 26 април 2017 г. 13:14:49 org. openqa.selenium.remote.ProtocolHandshake createSession INFO: Открит диалект: W3C JavaScript грешка: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, линия 1: TypeError: document.getElementsByTagNa me (...) [0] е неопределена рамка за селен | Practiceform 1493192695134 Marionette INFO Нови връзки вече няма да се приемат 26 април 2017 г. 13:14:57 org.openqa.selenium.os.UnixProcess унищожи ТЕЖКО: Не може да се убие процес с PID 6724 Тази част от кода се изпълнява след метод: - myTestMethod Тази част от кода се изпълнява, след като класът е изпълнен PASSED: myTestMethod =================================== ============ Тест по подразбиране Тестове: 1, неуспехи: 0, пропуски: 0 ======================== ======================= ============================= ==================== Пакет по подразбиране Общ брой изпълнени тестове: 1, Неуспехи: 0, Пропуски: 0 =============== ==================================

Както можете да видите от горния изход, броят на изпълнените тестове е 1, а неуспешните - 0. Това означава, че кодът е успешен. Дори редът на изпълнение на методите ще бъде в редаАзспоменати по-рано.

Когато изпълнявате този код на вашата машина, Selenium WebDriver ще създаде екземпляр на вашия браузър Firefox, ще отиде до практическата форма на Selenium Framework, ще затвори екземпляра на браузъра и ще покаже същия изход, както е показано по-горе във вашата Eclipse IDE.

Използвал съм само 5 различни анотации в кода си. Но има много повече анотации, които могат да се използват за управление на следващия метод, който трябва да бъде изпълнен. Целият списък с пояснения е обяснен вмасаПо-долу:

@BeforeSuite - Методът, коментиран с @BeforeSuite ще стартира преди да са стартирали всички тестове в пакета.

@AfterSuite - Методът, коментиран с @AfterSuite ще се стартира, след като всички тестове в пакета са изпълнени.

@BeforeTest - Методът, коментиран с @BeforeTest ще се изпълни преди да се изпълни който и да е метод за тестване, принадлежащ на клас.

@AfterTest - Методът, коментиран с @AfterTest ще се стартира след като всички тестови методи, принадлежащи към даден клас, са изпълнени.

@BeforeGroup - Методът, коментиран с @BeforeGroup ще се изпълни преди да се изпълни всяка група.

@AfterGroup - Методът, коментиран с @AfterGroup ще се изпълнява след стартиране на всяка група.

@BeforeClass - Методът, коментиран с @BeforeClass ще се изпълни веднъж преди да бъде извикан първият метод за тестване в текущия клас.

@След часовете - Методът, коментиран с @След часовете ще се изпълни веднъж, след като всички тестови методи в текущия клас са изпълнени.

@BeforeMethod - Методът, коментиран с @BeforeMethod ще се изпълни преди да се изпълни който и да е метод за тестване в клас.

@AfterMethod - Методът, коментиран с @AfterMethod ще се стартира след стартиране на всеки метод за тестване в клас.

@Тест - Методът, коментиран с @Тест е основният метод за тестване в цялата програма. Други анотирани методи ще бъдат изпълнени около този метод.

Екранната снимка на отчета TestNG еприсъства по-долу: -

Приоритизиране

Говорихме за това как различни методи, които могат да бъдат дефинирани, така че да се изпълняват около @Тест метод. Но какво, ако имате повече от един @Тест метод и искате да определите реда за изпълнение между тях?

разлика между хвърляне и хвърляния в java

В такъв случай можемPда ги подредите, като зададете номер на коментираните тестови случаи. По-малък номер, по-висок приоритет. Приоритет може да бъде зададен като параметри, докато се определят тестовите случаи. Но ако не е зададен приоритет, тогава коментираните тестови методи ще бъдат изпълнени според азбучния ред на тестовете. Погледнете параметрите на тестовите пояснения в долната част накод.

@Test (Priority = 2) public static void FirstTest () {system.out.println ('Това е тестовият случай номер две заради приоритет # 2')} @Test (Priority = 1) public static void SecondTest () { system.out.println ('Това е тестовият случай номер едно поради Приоритет # 1')} @Test public static void FinalTest () {system.out.println ('Това е последният тестов случай, защото няма приоритет' )}

Деактивиране на тестови случаи

Позволете ми да ви покажа нещо по-интересно. Какво ще стане, ако имате код, обхващащ милион редове, състоящ се от стотици тестови случаи, и искате да деактивирате само един тестов метод? Вместо това не е необходимо да изтривате никоя част от кода, можем просто да деактивираме този метод за тестване.

Актът за деактивиране на тестов случай също се извършва чрез параметри. Можем да зададем активиран атрибут на ‘false’. По подразбиране всички тестови случаи ще бъдат активирани, поради което не е необходимо да ги дефинираме всеки път, когато пишем тест. Погледнете параметрите на третия и четвъртия метод в долната част накод.

@Test (Приоритет = 2, активиран = Вярно) публична статична невалидна FirstTest () {system.out.println ('Това е Тестовият случай номер две поради Приоритет # 2')} @Test (Приоритет = 1, активиран = Вярно ) public static void SecondTest () {system.out.println ('Това е тестовият случай номер едно заради приоритет # 1')} @Test (enabled = false) public static void SkippedTest () {system.out.println ( „Това е пропуснатият тестов случай, защото това е деактивирано“)} @Test (активирано = Вярно) публична статична невалидна FinalTest () {system.out.println („Това е последният тестов случай, който е активиран и няма приоритет ')}

Зависимост на метода

Сега в случай, че имате ситуация, при която искате част от кода да бъде изпълнена само ако отговаря на условие или само ако даден метод се изпълнява успешно, тогава можем да го направим, като използваме zavisiOnMethod (). Това е основно условие за зависимост на метода, при което методът ще бъде изпълнен в зависимост от друг метод. Ако допълнително зададем винаги бягай атрибут на true, тогава методът ще бъде изпълнен независимо от условието за неуспех / преминаване на зависимия метод. Погледнете кода в кодовия фрагмент по-долу.

@Test public static void FirstTest () {system.out.println ('Това е първият тестов случай, който се изпълнява')} @Test (dependOnMethods = {'FirstTest'}) public static void SecondTest () {system.out. println ('Това е вторият тестов случай, който трябва да бъде изпълнен Това е зависим метод')} @Test (dependOnMethods = {'SecondTest'}) public static void FinalTest () {system.out.println ('Това е последният тест Дело Тя така или иначе ще бъде изпълнена. ')}

Сега това ни отвежда до друг важен аспект в тестаанотации, което е Групиране .

Групиране

Досега трябва да знаете, че в кода ще има редица методи като част от нашия тестов случай. Да предположим, че има 100 тестови случая, но ние искаме да изпълним само 20 тестови случая в следващия ни тест. Мислите ли, че можем да направим това? Разбира се, че можем.

Можем да използваме групи атрибут за тази цел. Можем да присвоим име на група на редица тестови случаи и по-късно да изберем да изпълним групата вместо целия код. Погледнете кодовия фрагмент по-долу, за да разберетекак да създадете групи.

@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 ('Това също е част от групата: MyGroup')} @Test public static void ThirdTest () {system.out.println ('Но това не е част от Група: MyGroup ')}

Твърдения за TestNG

Това сега ни отвежда към следващата тема в TestNG, която е твърдения. Както подсказва името, твърденията могат да се използват в тестовите методи, за да се определи условието за преминаване / неуспех на тест. Въз основа на истинското / невярно състояние на дадено изявление тестовете ще преминат / не успеят.

В кода по-долу съм включил 3 метода за тестване, при които първият и третият метод имат условие за преминаване, а вторият метод ще има състояние на неуспех. Вижте кода сами.

пакет 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 публичен клас 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 ('Това е условие за преминаване')} @Test public void testEquality2 () {Assert.assertEquals (true, isEqual (10, 11)) System.out.println ('Това е условие за неуспех')} @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 ('Това отново е условие за преминаване')} }

Когато погледнете отчета, който се генерира след това изпълнение, тогава ще забележите, че от трите теста един не е успял и два са преминали. Друг важен момент, който трябва да се отбележи е, че когато дадено твърдение се провали, други команди / редове от код в този тест ще бъдат пропуснати. Само когато твърдението е успешно, следващият ред код ще бъде изпълнен в този тест. Вижте изхода по-долу къде system.out.println е изпълнил само за първия и третия метод.

1493277977348 geckodriver INFO Прослушване на 127.0.0.1:47035 1493277977993 mozprofile :: profile INFO Използване на път на профил C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette INfo Starting Firefox Info Starting Firefox Firefox Info Starting Firefox Info Starting Firefox Info Starting Firefox Info Startz Свързване с Marionette на localhost: 50758 [GPU 6920] ПРЕДУПРЕЖДЕНИЕ: грешка на тръбата: 109: файл c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, линия 346 1493277981742 Marionette INFO Слушане на порт 50758 27 април 2017 г. 12:56:22 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Открит диалект: W3C Това отново е условие за преминаване Това е условие за преминаване getTitle ПРИЛАГА: testEquality1 FAILED: testEquality2 java.lang.AssertionError: очаквано [false], но намерено [true] в org.testng.Assert.fail (Assert.java:93) в org.testng.Assert.failNotEquals (Assert.java: 512) в org.testng.Assert.assertE qualsImpl (Assert.java:134) в org.testng.Assert.assertEquals (Assert.java:115) в org.testng.Assert.assertEquals (Assert.java:304) в org.testng.Assert.assertEquals (Assert.java : 314) при testng.Assertions.testEquality2 (Assertions.java:38) при sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) при sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестен източник) при sun.reflect.DelegorkeImetcDelegorkeMethodAknown Източник) на java.lang.reflect.Method.invoke (неизвестен източник) на org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) на org.testng.internal.Invoker.invokeMethod (Invoker.java:661) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) в org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:126 ) на org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) на org.testng.TestRunner.privateRun (TestRunner.java:744) на org.testng.TestRu nner.run (TestRunner.java:602) на org.testng.SuiteRunner.runTest (SuiteRunner.java:380) на org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) на org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) на org.testng.SuiteRunner.run (SuiteRunner.java:289) на org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) на org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) на org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) на org.testng.TestNG.runSuitesLocally (TestNG.java:1226) на org.testng.TestNG.runSuites (TestNG.java:1144) на org.testng. TestNG.run (TestNG.java:1115) на org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) на org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) на org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ========================================= ======== Тест по подразбиране Тестове: 3, неуспехи: 1, пропуски: 0 ============================ =================== =================================== ================ Пакет по подразбиране Общ брой тестове: 3, неуспехи: 1, пропуски: 0 ============

И така, това е краят на концепциите, свързани с управлението на тестови случаи. Остава ни още една тема, а това е генерирането на доклади. Генерирането на отчети е последната тема в този урок на Selenium WebDriver, тъй като отчетите могат да се генерират само след всичкитестовете се изпълняват.

java се превръща двойно в int

Генериране на отчети

Най-важното нещо, което трябва да отбележите, е, че отчетът ще бъде генериран само чрез .xml файл. Това означава, било то метод, било то клас или група, която искате да тествате, всички те трябва да бъдат посочени във файла .xml.

Така че първо можете да създадете нова папка под вашия проект и да създадете нов файл в нея и да дадете име на файла и да го запазите с разширение .xml. Можете да създадете новата папка и файл, като щракнете с десния бутон върху изследователя на пакети. След като създадете файла, отидете в раздела източник от долната част на прозореца и въведете конфигурациите, както е посочено в долния фрагмент.

 

Първият ред е дефиницията на типа XML документ. Това е стандартно и задължително за всички протоколи от изпитвания. Но другите редове са доста обясними. Използвал съм отворените тагове за пакет, тест, класове и клас. Маркерът за класове може да съдържа един или повече класове вътре в него. По този начин той може да се използва, ако искаме да генерираме отчет, където тестваме множество класове. Това е удобно, особено за разработчици, които искат да тестват дълъг код.

Във всеки случай, връщайки се към нашия отчет, можете да назовете всеки пакет или тест или клас, след като отворите тези маркери и не забравяйте да затворите всеки отворен маркер. Дадох името на апартамента си като TestNG , име на теста като Тест Анотации и името на класа като testng.TestAnotations. Имайте предвид, че името на класа е във формата на ' packagename.classname ’ .

Когато стартирате този файл като TestNG Suite, изпълнението ще започне и ще получите подробните отчети за теста. Ще получите изходния тест в раздела на конзолата и резултата от тестовия пакет в следващия раздел. Отчетът, който съм генерирал за изпълнение на кода ми, евскрийншота по-долу. Ще забележите, че този път има име на пакет, име на тест, име на клас заедно с времето, необходимо за изпълнението на всеки от тях.

В случай, че искате да прегледате отчета HTML (отчет за индекс или отчет за изпращане по имейл), можете да отидете на тест-изход папка в директорията на проекта във вашето работно пространство. Като кликнете върху тях, можете да преглеждате отчетите дори по-късно. По-долу са техните екранни снимки.

Индекс доклад : -

Доклад по имейл : -

Така че това ни води до края на този блог с уроци за Selenium WebDriver. Време е да настроите eclipse в края си, да инсталирате различните пакети Selenium, да инсталирате TestNG и да започнете да пишете вашите тестови случаи.

Можете да разгледате видеото с уроци по Selenium WebDriver, за да станете свидетели на демонстрация на различните концепции, обяснени в този блог.

Обучение по селен | Рамка на TestNG за селен | Едурека

Това видео за обучение на Edureka Selenium ще ви преведе през задълбочените подробности за Selenium WebDriver. Това видео с уроци по Selenium е идеално както за начинаещи, така и за професионалисти, които искат да изчистят основите на командите на WebDriver и да научат как TestNG може да се използва със Selenium за управление на различни тестови случаи.

Ако искате да научите селен и да изградите кариера в тестващата област, разгледайте нашия интерактивен онлайн на живо тук това идва с поддръжка 24 * 7, която да ви води през целия период на обучение.

Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас.