selenium database testing using webdriver
I vores sidste Selen-tutorial lærte vi, hvordan vi gør det fejlfinde nogle tilbagevendende problemer i selen-scripts . Vi diskuterede nogle forhåndskoncepter, hvor vi ville beskæftige os med mus- og tastaturbegivenheder ved at få adgang til flere links ved at implementere lister.
Gå videre med vores avancerede emner i Selenium-træningsserien , vi introducerer dig med begrebet Databasetestning ved hjælp af Selenium WebDriver.
Vi vil diskutere de grundlæggende processer som databaseforbindelse, udførelse af forespørgsler, hentning af data og afbrydelse af databaseinstanser osv. Vi vil også diskutere forskellige praktiske implikationer, hvor vi har brug for databasetest med automatiseringstest for at teste komplette end-to-end-scenarier.
Inden du går videre med de tekniske implikationer forbundet med automatiseret databasetest. Lad os diskutere et par scenarier, hvor vi kræver udførelse af databasetest sammen med automatiseringstesten. Men før det vil jeg gerne bekræfte her, at databasetest er en meget speciel type test, mens Selenium WebDriver er et værktøj, der bruges til at simulere og automatisere brugerinteraktioner med Application UI.
Så teknisk set udfører vi ikke nøjagtigt databasetest, men vi tester vores applikation sammen med databasen for at sikre, at ændringerne reflekteres i begge ender og dermed identificere fejl tidligt.
Absolut alle webapplikationer har brug for en backend til at gemme dataene. Databaser som MySQL, Oracle og SQL Server er rimeligt populære i disse dage.
Lad os nu diskutere et par scenarier for at eksemplificere behovet for databasetest sammen med automatiseringstest.
Hvad du lærer:
- Overvej følgende scenarier
- Oprettelse af testdata i databasen
- Oprettelse af ny database
- Konklusion
- Anbefalet læsning
Overvej følgende scenarier
# 1) Til tider er vi forpligtet til at sikre os, at de data, der indtastes fra brugergrænsefladen, konsekvent afspejles i databasen. Således henter vi oplysningerne fra databasen og verificerer de hentede oplysninger i forhold til de oplysninger, der leveres fra brugergrænsefladen. For eksempel registreringsformularer, brugerdata, brugerprofiler, opdateringer og sletning af brugerdata. Således kan testscenariet til automatisering være 'At kontrollere, at brugerens oplysninger med succes gemmes i databasen, så snart brugeren registrerer sig i applikationen'.
#to) Et andet brugstilfælde til udførelse af databasetest med Selenium WebDriver kan opstå, når brugeren bliver bedt om at indlæse testdata eller forventede data fra databasen. I et sådant tilfælde vil brugeren således oprette forbindelse til databasen ved hjælp af en tredjeparts-API, udføre forespørgsler for at hente data fra datasættet og derefter hævde de data, der er hentet fra databasen med de faktiske data, der er befolket på applikationsgrænsefladen .
# 3) En anden brugssag er at udføre associerende databasetest. Antag, at vi udførte en operation på applikationens brugergrænseflade, og vi vil teste refleksionen i databasen. Det kan være tilfældet, at de berørte data findes i forskellige tabeller i databasen på grund af tilknytningen. Derfor anbefales det altid at teste refleksion af data på alle de berørte områder.
Selen simulerer som sagt brugerens interaktioner med den testede applikation. Det kan simulere tastaturhændelser, mushandlinger osv. Men hvis brugeren ønsker at automatisere noget uden for browseren - webapplikationsinteraktioner, kan selen ikke være til stor hjælp. Således har vi brug for andre værktøjer eller kapaciteter til at udføre slut – til – ende test.
I alle ovenstående scenarier kan vi således kræve, at vi udfører databasetest sammen med UI-automatisering. Vi kan kontrollere forretningslogik ved at manipulere dataene og kontrollere, at de afspejler dem. Vi kan også kontrollere de tekniske aspekter af selve databasen som soft delete, feltvalidering osv.
Lad os nu gå videre med den faktiske implementering. Før vi udvikler Selenium WebDriver-scripts til at udtrække data fra datakilden, lad os oprette testdata i databasen. Til denne tutorial bruger vi MySQL som en database.
Oprettelse af testdata i databasen
Hvis du endnu ikke har downloadet databasen, skal du downloade den ved hjælp af link . Det forventes, at brugeren følger nogle grundlæggende trin for at downloade og installere databasen.
= >> Læs denne vejledning til download og installer MySQL-database .
Når databasen er installeret, kan brugeren starte MySQL Command Line Prompt, der ser ud som følgende skærmbillede. Applikationen beder muligvis brugeren om at indtaste adgangskoden. Standardadgangskoden er 'root'.
Bemærk : Brugeren kan også finde GUI-baserede klienter over internettet for at oprette forbindelse til databasen. For at nævne nogle få kan brugeren downloade og installere Query Browser eller Work Bench.
Oprettelse af ny database
Det næste trin er at oprette testdatabasen med et par tabeller og poster gemt i disse tabeller for at oprette forbindelse til databasen og udføre forespørgsler.
Trin 1) Skriv 'vis databaser' for at se alle de allerede tilgængelige databaser
vis databaser;
Trin 2) Skriv 'Opret databasebruger;' at oprette en database med navnet “bruger”.
oprette databasebruger
Vær opmærksom på, at databasenavnet, når brugeren oprettes, og kan ses på listen over databaser.
Trin 3) Skriv 'brug bruger;' for at vælge den nyoprettede database. Skriv også 'vis tabeller;' for at se alle de tilgængelige tabeller i brugerdatabasen.
brug bruger;
udstillingsborde;
Noter, at Tomt sæt vises i resultatet af 'showtabellerne'. forespørgsel, da der ikke var nogen tilgængelige tabeller i brugerdatabasen.
Lad os nu et par tabeller og tilføje poster i dem.
Trin 4) Skriv følgende kommando for at oprette en tabel med 4 felter / kolonner (userId, userName, userAge, userAddress).
Opret tabel brugerinfo
(
userId int,
brugernavn varchar (255),
userAge int,
userAddress varchar (255)
);
Det næste trin er at tilføje nogle dataposter i 'userinfo' -tabellen.
Trin 5) Skriv følgende kommando for at indsætte data i tabellen en tabel for alle de fire felter 4 felter / kolonner (userId, userName, userAge, userAddress).
indsæt i userinfo (userID, userName, userAge, userAddress) værdier ('1', 'shruti', '25', 'Noida');
For at se de tilføjede data skal du skrive følgende kommando:
vælg * fra brugerinfo;
På samme måde kan du tilføje flere data til din tabel og også kunne oprette andre tabeller.
Nu hvor vi har oprettet vores database. Vi kan gå videre og forstå implementering af automatiserede forespørgsler for at hente poster fra databasen.
Som vi også gentog tidligere, er Selenium WebDriver et værktøj til UI-automatisering. Således er Selen WebDriver alene ikke kvalificeret til at udføre databasetest, men dette kan gøres ved hjælp af Java Database Connectivity API (JDBC). API'en lader brugeren oprette forbindelse og interagere med datakilden og hente dataene ved hjælp af automatiserede forespørgsler. For at kunne udnytte JDBC API er det nødvendigt at have Java Virtual Machine (JVM) kørende på systemet.
JDBC Workflow
Vi vil holde vores fokus tilpasset følgende processer:
- Oprettelse af en forbindelse til databasen
- Udførelse af forespørgsler og opdateringserklæringer for at udtrække / hente data (CRUD-operationer)
- Brug og manipulering af data ekstraheret fra databasen i form af resultatsættet. (Resultatsæt er en samling af data organiseret i rækker og kolonner)
- Afbrydelse af databaseforbindelsen.
Som sagt tidligere, for at kunne teste database automatisk fra vores Selenium WebDriver-testskripter, ville vi oprette forbindelse til databasen via JDBC-forbindelse inden for vores test-scripts. Send til forbindelsen, vi kan udløse så mange CRUD (Opret, læse, opdatere og slette) operationer på databasen.
I denne vejledning diskuterede vi 'Læs operation og dens varianter' og om deres implementering i Selenium WebDriver-script. Men inden det, lad os kontrollere testscenariet manuelt ved hjælp af 'MySQL-kommandolinjen'.
Scenarie:
1) Åbn databaseserveren og opret forbindelse til 'bruger' -databasen.
to) Noter alle poster fra tabellen “userinfo”.
Syntaks: vælg * fra brugerinfo;
værktøjer til præstationstest til webapplikationer
3) Luk databaseforbindelsen.
Bemærk, at læseforespørgslen viser alle brugerdata, der findes i brugerinfotabellen. Tabellen består af følgende kolonner.
- bruger ID
- brugernavn
- brugeralder
- userAddress
Resultatet viser også, at der kun er et enkelt datasæt til stede i tabellen.
Lad os nu udføre det samme scenario ved hjælp af Java-klassen.
For at få adgang til database, er brugeren gearet til at vælge blandt de forskellige forbindelsesmuligheder, der er tilgængelige for at oprette forbindelse til databasen. De fleste databasestik distribueres frit som 'jar' -filer. Da vi bruger MySQL som datakilde, skal vi derfor downloade jar-filen, der er specifik for MySQL.
Jar-filen kan downloades fra: her eller her.
Trin 1 : Det første og første trin er at konfigurere projektets build-sti og tilføje 'mysql-connector-java-3.1.13-bin.jar' -filen som et eksternt bibliotek.
Trin 2 : Opret en java-klasse med navnet “DatabaseTesingDemo”.
Trin 3 : Kopier og indsæt nedenstående kode i klassen oprettet i ovenstående trin.
Kodeeksempel
import org.junit.After; import org.junit.Before; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DatabaseTesingDemo { // Connection object static Connection con = null; // Statement object private static Statement stmt; // Constant for Database URL public static String DB_URL = 'jdbc:mysql://localhost:3306/user'; // Constant for Database Username public static String DB_USER = 'root'; // Constant for Database Password public static String DB_PASSWORD = 'root'; @Before public void setUp() throws Exception { try{ // Make the database connection String dbClass = 'com.mysql.jdbc.Driver'; Class.forName(dbClass).newInstance(); // Get connection to DB Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // Statement object to send the SQL statement to the Database stmt = con.createStatement(); } catch (Exception e) { e.printStackTrace(); } } @Test public void test() { try{ String query = 'select * from userinfo'; // Get the contents of userinfo table from DB ResultSet res = stmt.executeQuery(query); // Print the result untill all the records are printed // res.next() returns true if there is any next record else returns false while (res.next()) { System.out.print(res.getString(1)); System.out.print(' ' + res.getString(2)); System.out.print(' ' + res.getString(3)); System.out.println(' ' + res.getString(4)); } } catch(Exception e) { e.printStackTrace(); } } @After public void tearDown() throws Exception { // Close DB connection if (con != null) { con.close(); } } }
Output af ovenstående kode er:
1 bus 25 Noida
2 shrivastava 55 Mumbai
Læs udsagnsvarianter
Hvor klausul med en enkelt betingelse
Strengeforespørgsel = “vælg * fra brugerinfo, hvor userId = '” + 1 + “‘ ”;
ResultSet res = stmt.executeQuery (forespørgsel);
Produktion:
1 bus 25 Noida
Hvor klausul med flere betingelser
Strengadresse = ”Mumbai”;
Strengeforespørgsel = “vælg * fra brugerinfo, hvor userId = '” + 2 + “‘ og userAddress =' ”+ Adresse +” ‘”;
ResultSet res = stmt.executeQuery (forespørgsel);
Produktion:
2 shrivastava 55 Mumbai
Vis bruger-id
Strengeforespørgsel = “vælg userId fra userinfo”;
ResultSet res = stmt.executeQuery (forespørgsel);
Produktion:
1
to
Vis brugerId med hvor klausul
Strengadresse = ”Noida”;
Strengeforespørgsel = “vælg userId, brugernavn fra brugerinfo, hvor userAddress = '” + adresse + ”‘ ”;
ResultSet res = stmt.executeQuery (forespørgsel);
Produktion:
to
shrivastava
Således kan brugeren på samme måde udføre forskellige forespørgsler på databasen.
Lad os med dette også kaste lys over metoderne til tilgængelighed af resultater.
Metoder til tilgængelighed af resultat:
Metodenavn | Beskrivelse |
---|---|
dobbelt getDouble () | Metoden bruges til at hente data af dobbelt type fra resultatsættet |
String getString () | Metoden bruges til at hente strengtypedataene fra resultatsættet |
int getInt () | Metoden bruges til at hente heltalstypedataene fra resultatsættet |
boolsk getBoolean () | Metoden bruges til at hente den boolske værdi fra resultatsættet |
flyde getFloat () | Metoden bruges til at hente float-typedataene fra resultatsættet |
lang getLong () | Metoden bruges til at hente de lange typedata fra resultatsættet |
kort getShort () | Metoden bruges til at hente korttypedataene fra resultatsættet |
Dato getDate () | Metoden bruges til at hente datotype-objektet fra resultatsættet |
Resultatnavigationsmetoder:
Metodenavn | Beskrivelse |
---|---|
boolsk næste () | Metoden bruges til at gå til den næste post i resultatsættet |
boolsk forrige () | Metoden bruges til at flytte til den forrige rekord i resultatsættet |
boolsk først () | Metoden bruges til at flytte til den første post i resultatsættet |
boolsk sidste () | Metoden bruges til at flytte til den sidste post i resultatsættet |
boolsk absolut (int rækkeNummer) | Metoden bruges til at flytte til den specifikke post i resultatsættet |
Konklusion
Gennem denne vejledning forsøgte vi at gøre dig bekendt med begrebet Automatiseret databasetest . Vi har tydeligt lagt vægt på de tekniske implikationer og behov ved databasetestning.
Da hele vores serie var fokuseret på selen, kan læseren blive vildledt og kan skabe et indtryk af, at denne vejledning lærer at udføre databasetest ved hjælp af selen, men som jeg nævnte en række gange tidligere, noget der ligger uden for periferien af UI-test , kan ikke håndteres af selen. Derfor introducerer vi Java Database Connectivity (JDBC) API for at udføre databasetest ved at integrere koden i Selenium WebDriver-scripts.
JDBC gør det muligt for java-klassen at oprette forbindelse til databasen, hente data fra databasen eller faktisk udføre nogen af CRUD-operationerne, manipulere de resulterende data og lukke forbindelsen.
Således udgør tutorialen den grundlæggende prøveimplementering af ovennævnte proces.
Næste tutorial # 29 : Vi vil gå videre med avancerede Selen-emner. I den næste vejledning vil vi dække Selen GRID - som bruges, når du skal udføre multi-browsertest, og du har et stort antal testcases.
Anbefalet læsning
- Databasetestning med JMeter
- Integration af selen med JMeter
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- Bedste softwaretestværktøjer 2021 (QA Test Automation Tools)
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- Det bedste online Selen WebDriver + JAVA-træningskursus
- Spock til integration og funktionstest med selen