debugging selenium scripts with logs selenium tutorial 26
Nu bevæger vi os mod slutningen af vores mest omfattende Gratis vejledninger til værktøj til test af selen . De selvstudier, vi sender nu, er den del af den forudgående Selen-træning.
I den foregående vejledning holdt vi vores fokus på Kontinuerligt integrationsværktøj navngivet som Hudson . Det er et gratis værktøj og har mange flere muligheder for at opbygge testprojektet, udføre testklasser eksternt og sende en underretnings-e-mail til interessenterne, der informerer dem om applikationsstatus med hensyn til beståede og mislykkede testsager.
I den nuværende vejledning bevæger vi os mod nogle avancerede koncepter, der direkte eller indirekte kan hjælpe optimering af automatiseringsrammen og giver brugerne mere synlighed.
Således vil vi i den nuværende vejledning diskutere logfunktion, dens potentiale, fejlfindingsfunktioner og meget mere.
oracle sql forespørgsler interview spørgsmål og svar til erfaren pdf
Nogle gange betragtes logning som en overhead for den eksisterende mekanisme til oprettelse af script, men eksperter anser det for at være en af de bedste fremgangsmåder, hvis de anvendes i den nøjagtige andel på grund af følgende fordele:
Fordele ved logning i selen-scripts:
- Giver en fuldstændig forståelse af eksekvering af testpakker
- Logmeddelelser kan gemmes i eksterne filer til kontrol efter udførelse
- Logfiler er en ekstraordinær assistent i fejlfinding af problemer med programudførelse og fejl
- Logfiler kan også gennemgås for at fastslå applikationens helbred af interessenterne
Hvad du lærer:
Log4j - En Java-baseret lognings-API
Gå videre til de tekniske detaljer om logning, lad os diskutere oprindelsen af API'et, som vi ville bruge i hele log4j vejledning at generere logfiler. Log4j var et resultat af menneskerettigheder på Secure Electronic Marketplace for Europe for at udvikle et værktøj, der kunne hjælpe os med at generere logfiler, og log4j kom derfor i rampelyset i året 1996. Log4j er et open source-værktøj og licenseret under IBM Public License.
Der er tre hovedkomponenter, der udgør implementeringen af log4j. Disse komponenter repræsenterer detaljerne om logniveauet, formaterne for den logmeddelelse, hvori de ville blive gengivet, og deres lagringsmekanismer.
Bestanddele af Log4j
- Loggere
- Appenders
- Layouter
# 1) Loggere
Følgende trin skal udføres for at implementere loggere i projektet.
Trin 1 : Oprettelse af en forekomst af Logger-klassen
Trin 2 : Definition af logniveau
Logger klasse - Det er et java-baseret værktøj, der allerede har implementeret alle de generiske metoder, så vi har mulighed for at bruge log4j.
Logniveauer - Logniveauer er populært kendt som udskrivningsmetoder. Disse bruges til udskrivning af logmeddelelserne. Der er primært fem slags logniveauer.
- fejl()
- advare()
- info ()
- fejlfinde()
- log ()
For at kunne generere logfiler er alt, hvad vi skal gøre, at kalde en af udskrivningsmetoderne over loggerinstansen. Vi vil have et bredere kig på det under implementeringsfasen.
# 2) Appenders
Nu hvor vi ved, hvordan vi genererer disse logfiler, er den næste ting, der skal dukke op i vores sind, at hvor får jeg vist logfiler? Svaret på dette spørgsmål ligger i definitionen af 'Appenders'.
Appenders bruges konsekvent til at specificere datakilden / mediet, hvor logfilerne skal genereres. Omfanget af datakilder strækker sig fra forskellige eksterne medier som konsollen, GUI, tekstfiler osv.
# 3) Layouter
Til tider ønsker brugeren, at visse oplysninger forudindstilles eller tilføjes med hver logopgørelse. For eksempel ønsker jeg at udskrive et tidsstempel sammen med min logopgørelse. Sådanne krav kan således opnås ved 'Layouts'.
Layouts er et værktøj, der giver brugeren mulighed for at vælge det ønskede format, hvor logfilerne gengives. Appenders og Layout har en tæt kobling mellem dem. Således er vi forpligtet til at kortlægge hver af appenderne med et specifikt layout.
Noter, at brugeren er gearet til at definere flere appenders, hvert kort med et særskilt layout.
Nu hvor vi er opmærksomme på det grundlæggende i log4j og dets komponenter, bevæger vi vores fokus mod implementeringsfænomenet.
Lad os forstå hele implementeringsprocessen trin for trin.
Installation / opsætning
Til installation og opsætning ville vi overveje “Learning_Selenium” -projektet, som vi allerede har oprettet i de tidligere sessioner i denne serie.
Trin 1 : Det første og det første skridt er at downloade den nyeste jar til log4j API. Krukken kan let findes på dens officielle distributionswebsted - “ http://logging.apache.org/log4j/1.2/download.html ”.
Trin 2 : Det næste trin er at konfigurere build-stien og give log4j.jar som et eksternt bibliotek.
Implementering
Logning ved hjælp af log4j kan implementeres og konfigureres på to måder:
- Programmatisk via script
- Manuelt via konfigurationsfiler
Både de ovennævnte konfigurationsmetoder har fortjeneste såvel som ulemper. Til denne vejledning vil vi overveje at konfigurere log4j manuelt via konfigurationsfiler baseret på dets lethed og enkelhed. Konfigurationsfilen er endnu en XML-fil til konfiguration af artefakter relateret til log4j.
Oprettelse af log4j.xml-fil
Trin 1 . Opret en log4j.xml-fil. Kopier og indsæt koden nedenfor i konfigurationsfilen.
Gennemgang af konfigurationsfilen
consoleAppender
Konsolappenderen bruges til at udskrive logopgørelserne på konsollen.
fil appender
Filappenderen bruges til at udskrive logopgørelserne i en ekstern fil. Brugeren udnyttes til at indstille en tænd / sluk-værdi for det vedhæftede tag, som fortæller systemet at tilføje og logge udsagn til den tidligere oprettede eller til at overskrive de tidligere oprettede logfiler og generere de friske logfiler helt.
'append' value= 'false' />
Værdien af filparameteren er indstillet til en bestemt placering for at underrette systemet om at oprette den forventede logfil på den nævnte placering. Vi angiver også logfilnavnet inden for værdiparameteren.
Layout
Som diskuteret i de tidlige afsnit af denne vejledning bruges layoutene til at specificere gengivelsesmekanismen for logsætninger. Log4j giver forskellige layoutmønstre. Brugeren udnyttes til at specificere det ønskede mønster i værdien af parameteren ConversionPattern.
Outputtet fra ovenstående layout skal være omtrent som:
01-07-2014 12:56:32 INFO (GmailLogin): Eksempel på logmeddelelse
I output ovenfor:
- Første felt - Dato for udførelse
- Andet felt - Præcis tid i tt: mm: ss, hvor testtrinet blev udført
- Tredje felt - Et af logniveauet
- Fjerde felt - Testklassens navn
- Det femte felt - Logbesked
Trin 2 . Så snart vi er færdige med oprettelsen af log4j.XML-filen, er det næste trin at placere log4j.XML-filen i projektets rodmappe / basekatalog.
Programniveau Implementering
Trin 3 : Det næste trin er at bruge en af konfiguratorerne til at konfigurere og parsere filen log4j.xml.
Syntaks:
package com.logExample; import org.apache.log4j.xml.DOMConfigurator; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.RunWith; import org.junit.runner.notification.Failure; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ Demo.class }) public class TestSuite { /** * Setup method to set system property for log file name */ @BeforeClass public static void Setup() { // loading log4j.xml file DOMConfigurator.configure('log4j.xml'); } /** * @param args */ public static void main(String() args) { Result result = JUnitCore.runClasses(TestSuite.class); for (Failure failure : result.getFailures()) { System.out.println('
TEST NAME: ' + failure.getTestHeader()); System.out.println('
ERROR: ' + failure.getMessage() + '
'); System.out.println(failure.getTrace()); System.exit(1); } } }
Bemærk : Logfiler kan implementeres på klasseniveau også i stedet for Test suite-niveau. Alt hvad du skal gøre er at foretage de nødvendige ændringer i testklassen snarere end i testpakken.
Trin 4 : Det næste trin er at oprette en testklasse 'GmailLogin.java' under projektet. Implementere Gmail-loginfunktionen i klassen.
Trin 5 : Det næste trin er at importere loggerklassen for at være i stand til at implementere logsætningerne.
Syntaks:
import org.apache.log4j.Logger;
Trin 6 : Det næste trin i processen er at instantiere objektet fra Logger-klassen.
Syntaks:
// Objektinitialisering til log
statisk Logger log = Logger.getLogger(Demo. klasse .getnavn ());
Trin 7 : Den ovenfor oprettede logvariabel af typen Logger vil blive brugt på tværs af hele testklassen til at generere logsætningerne. Se følgende kode for det samme.
Syntaks:
@Test public void testGmailLogin() throws Exception{ // enter a valid email address driver.findElement(By.id('Email')).sendKeys('TestSelenium1607@gmail.com'); log.info('Entered a valid Email Address.'); // enter a invalid password driver.findElement(By.id('Passwd')).sendKeys('InvalidPassword'); log.info('Entered a invalid Password.'); // click on sign in button driver.findElement(By.id('signIn')).click(); log.info('Clicked on the Sign In Button.'); try{ //Verify the home page assertTrue('Verification Failed: User successfully landed on the Home Page.', driver.getTitle().equals('Gmail')); log.info('Verified that the user landed on the Home Page.'); } catch (Exception e) { log.error('Unsuccessfull Login.'); } }
Resultat i logfilen
01-07-2014 12:56:11 INFO (GmailLogin): Uploadede filen til systemet: FileExample.txt
01-07-2014 12:56:11 INFO (GmailLogin): Afsendelse af ændringerne
01-07-2014 12:56:15 FEJL (GmailLogin): Login mislykkedes.
OPDATERING marts 2020
Logfiler
En log er en besked, som vi optager eller genererer for hver transaktion, vi foretager. Vi kan analysere logfilerne for at kontrollere, hvad der gik korrekt eller forkert. Antag, at hvis et system lukkes pludseligt, kan vi komme ind i den grundlæggende årsag til fejlen ved at analysere logfilerne.
Således genereres logfiler i hver udviklingscyklus. På samme måde kan vi også generere logfiler i vores Selenium-kode til test før og efter hver testtilstand eller testerklæring for at kontrollere, om alle fungerer som forventet.
log4j Framework
For at generere disse logfiler i Selenium-kode bruger vi log4j framework leveret af Apache. Med denne ramme kan vi generere vores tilpassede logfiler.
Klik på her for at downloade log4j jar fra Maven-arkivet.
Vi kan generere logfiler på to måder:
- Brug af filen log4j.properties
- Brug af log4j.xml-filen
Disse filer indeholder konfigurationen om, hvilken type logfiler du vil generere. Du kan bruge en hvilken som helst af dem. Hvis du ønsker at bruge begge dele, får log4j.xml højere prioritet. Den foretrukne måde at generere logfiler er ved hjælp af egenskabsfilen, så her vil vi udforske mere om kun at generere gennem egenskabsfilen.
Implementering af log4j
Download log4j jar-filen fra ovenstående sti, og tilføj den i din projektbygningssti. Opret log4j.properties-filen, og tilføj egenskabsfilen parallelt med din kildemappe, når du bruger et selvstændigt Java-program.
Log4j.properties-filen er en konfigurationsfil, der gemmer værdier i nøgleværdipar.
Den indeholder 3 hovedkomponenter:
- Loggere: Fanger logningsoplysninger.
- Appenders : Udgiv logningsoplysninger til en anden foretrukken destination som konsoller, filer, sockets, NT-hændelseslogfiler osv.
- Layouter : Formater logningsoplysninger i forskellige stilarter som HTML, XML-layout osv.
Syntaks af filen log4j.properties
# 1) Definer rodloggeren med logningsniveauet INFO og appender X (appender kan være alle konsoller, filer, sockets, NT-hændelseslogfiler).
log4j.rootLogger = INFO, X
#to) Indstil appender ved navn X til at være File Appender.
log4j.appender.X = org.apache.log4j.FileAppender
# 3) Definer layoutet til X appender.
log4j.appender.X.layout = org.apache.log4j.PatternLayout log4j.appender.X.layout.conversionPattern = %m%n
log4j.properties Eksempel
Opret en log4j.properties-fil med henvisning til ovenstående syntaks:
# initialiser rodlogger med niveau INFO og udskriv den i konsollen ved hjælp af stdout og fout.
log4j.rootLogger=INFO,stdout,fout
# tilføj en ConsoleAppender til logger-stdout for at skrive til konsollen.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# brug et enkelt beskedformat layoutmønster defineret er% m% n, der udskriver logge beskeder i en ny linje.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%m%n
# tilføj en FileAppender til loggerfout.
log4j.appender.fout=org.apache.log4j.FileAppender
# Appender FILE er defineret som org.apache.log4j.FileAppender. Det skriver til en fil ved navn SoftwareTestingHelp.
log4j.appender.fout.File=SoftwareTestingHelp.log
# brug et mere detaljeret beskedmønster.
log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=%p %d{ISO8601} %r %c (%t) %m%n
Forskellige niveauer af logning
- FEJLFINDE
- INFO
- ADVARE
- FEJL
- FATAL
Hvert niveau har sin egen prioritet. Antag, at hvis vi bruger “DEBUG” -niveau, logger det alle niveaubeskeder som INFO >> ADVARSEL >> FEJL >> FATAL.
Antag, at hvis vi bruger niveauet 'FEJL', ignorerer det DEBUG >> INFO >> ADVARSEL, og det logger kun FEJL >> FATAL.
På alle disse niveauer skal vi definere i vores egenskabsfil. Logfilerne genereres afhængigt af vores konfiguration.
Implementering af logfiler til det samme eksempel, der er nævnt ovenfor:
Trin 1: Opret et objekt til klassen Logger.
final static Logger logger = Logger.getLogger(Frame.class);
Ovenstående metode hjælper med at få loggerobjektet. Denne metode tager enten klasse eller navnet på klassen som argument. Ved hjælp af dette loggerobjekt kan du generere tilpassede logfiler.
I dette eksempel henviste vi til apache log4j framework, hvis du bruger TestNG framework, skal du bruge TestNG-logklassen.
Her har vi forsøgt at generere loggen uden at implementere egenskabsfilen.
Der genereres ingen logfiler hverken i konsollen eller nogen oprettet logfil. Der modtages en fejl i konsollen, da logfilen ikke er implementeret korrekt. For at implementere det skal vi bruge - PropertyConfigurator klasse. Følg trin 2.
Trin 2: Initialiser Property Configurator-filen, og send argumentet som navnet på log4j-egenskabsfilen.
PropertyConfigurator.configure (“log4j.properties”);
Komplet kode til generering af logfiler:
package com.wordpress.pages; import java.util.List; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Frame { static WebDriver driver; final static Logger logger = Logger.getLogger(Frame.class); @Test public void Test(){ PropertyConfigurator.configure('log4j.properties.txt'); System.setProperty('webdriver.chrome.driver', 'D:\New folder\exe\chromedriver.exe'); logger.debug('Debug this path for chrome path issue'); driver = new ChromeDriver(); logger.info('Chrome driver is up and running'); driver.get('http://www.dwuser.com/education/content/the-magical-iframe-tag-an-introduction/'); logger.warn('Url is not loaded properly'); //identifying the frame using locator or say using webelement driver.switchTo().frame(driver.findElement(By.xpath('//div(@id='eduFooterWrap')//iframe(1)'))); logger.error('Frame is not available'); driver.findElement(By.xpath('//input(@name='name')')).sendKeys('SoftwareTestingHelp.com'); logger.fatal('Message not entered'); } }
Egenskaber fil:
Konklusion
I den aktuelle vejledning fokuserede vi på teknisk implikation under implementering af logning i en ramme. Vi udnyttede log4j-værktøjet til at implementere logning. Vi diskuterede de grundlæggende komponenter, som udgør log4j fra et brugervenligt perspektiv. Med Appenders og layouts udnyttes brugeren til at vælge det ønskede logningsformat / mønster og datakilden / placeringen.
I denne vejledning undersøger vi, hvorfor logfiler bruges i vores test og omfattede log4j-ramme, og implementering af log4j-rammen i Selen til generering af logfiler.
Næste tutorial # 27 : I den kommende tutorial, ville vi diskutere nogle mere avancerede emner relateret til effektiv scripting og fejlfinding af scenarier hvor brugeren skal håndtere mus- og tastaturbegivenheder. Desuden vil vi også diskutere, hvordan man gemmer mere end et webelement på en liste.
Anbefalet læsning
- Dybdegående formørkelsesvejledninger til begyndere
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- Effektiv Selen Scripting og fejlfinding af scenarier - Selen Tutorial # 27
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- 30+ bedste selen-tutorials: Lær selen med rigtige eksempler
- Sådan finder du elementer i Chrome og IE-browsere til opbygning af selen-scripts - Selen Tutorial # 7
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- WebDriver hele opsætningen og installationen med Eclipse - Selenium-tutorial # 9