Selenium Database Testing (med WebDriver och JDBC API)

i vår senaste Selenium tutorial lärde vi oss att felsöka några återkommande problem i selenium scripts. Vi diskuterade några förskott begrepp där vi skulle ta itu med mus och tangentbord händelser, tillgång till flera länkar genom att genomföra listor.

gå vidare med våra avancerade ämnen i Selenium training series, vi skulle presentera dig med begreppet Databastestning med Selenium WebDriver.

vi skulle diskutera de grundläggande processerna som databasanslutning, exekvera frågor, hämta data och koppla bort databasinstanser etc. Vi skulle också diskutera olika praktiska konsekvenser där vi behöver databastestning med automatiseringstestning för att testa de fullständiga end-to-end-scenarierna.

DB-testning med Selenium

innan du går vidare med de tekniska konsekvenserna i samband med automatiserad databastestning. Låt oss diskutera några scenarier där vi behöver utföra Databastestning tillsammans med Automatiseringstestningen. Men innan det vill jag här bekräfta att Databastestning är en mycket märklig typ av testning medan Selenium WebDriver är ett verktyg som används för att simulera och automatisera användarinteraktioner med applikationsgränssnittet.

så tekniskt sett utför vi inte exakt Databastestning utan vi testar vår applikation i samband med databasen för att säkerställa att ändringarna återspeglas i båda ändarna och därigenom identifierar defekter tidigt.

absolut alla webbapplikationer behöver en backend för att lagra Data. Databaser som MySQL, Oracle och SQL Server är ganska populära idag.

låt oss nu gå tillbaka till det ursprungliga ämnet, låt oss diskutera några scenarier för att exemplifiera efterfrågan på Databastestning tillsammans med Automatiseringstestning.

Tänk på följande scenarier

#1) Ibland måste vi se till att de data som matats in från användargränssnittet konsekvent återspeglas i databasen. Således hämtar vi informationen från databasen och verifierar den hämtade informationen mot informationen från användargränssnittet. Till exempel registreringsformulär, användardata, användarprofiler, uppdateringar och raderingar av användardata. Således kan testscenariot att automatisera vara”att verifiera att användarens information sparas framgångsrikt i databasen så snart användaren registrerar sig i applikationen”.

# 2) Ett annat användningsfall för att utföra databastestning med Selenium WebDriver kan uppstå när användaren riktas för att ladda testdata eller förväntade data från databasen. Således, i ett sådant fall, användaren skulle göra anslutningen med databasen med hjälp av en tredje part API, köra frågor för att hämta data från dataset och sedan hävda data hämtas från databasen med de faktiska data som är befolkade på ansökan UI.

# 3) Ett annat användningsfall är att utföra associativ Databastestning. Antag att vi utförde en operation på programmets användargränssnitt, och vi vill testa reflektionen i databasen. Det kan vara så att de påverkade uppgifterna finns i olika tabeller i databasen på grund av föreningen. Därför är det alltid lämpligt att testa data reflektion på alla påverkade områden.

selen, som sagt, simulerar användarinteraktionerna med applikationen som testas. Det kan simulera tangentbordshändelser,musåtgärder etc. Men om användaren önskar att automatisera något utanför närheten av webbläsare-webbapplikationsinteraktioner, kan selen inte vara till stor hjälp. Därför behöver vi andra verktyg eller funktioner för att utföra end –to –end-testning.

Således kan vi i alla ovanstående scenarier behöva utföra Databastestning tillsammans med UI-automatisering. Vi kan kontrollera affärslogiken genom att manipulera uppgifterna och verifiera dess reflektion. Vi kan också kontrollera de tekniska aspekterna av själva databasen som soft delete, field validation etc.

Låt oss nu gå vidare med det faktiska genomförandet. Innan vi utvecklar Selenium WebDriver-skript för att extrahera data från datakällan, låt oss skapa testdata i databasen. För denna handledning skulle vi använda MySQL som en databas.

skapande av testdata i databasen

om du inte har laddat ner databasen ännu, ladda ner den med länken. Användaren förväntas följa några grundläggande steg för att ladda ner och installera databasen.

=>> Läs denna handledning för att ladda ner och installera MySQL-databasen.

när databasen har installerats kan användaren starta MySQL-Kommandoradsprompten som skulle se ut som följande skärmdump. Applikationen kan be användaren att ange lösenordet. Standardlösenordet är”root”.

DB-testning med selen 1

användaren kan också hitta GUI – baserade klienter över internet för att ansluta till databasen. För att nämna några kan användaren ladda ner och installera Frågebläddraren eller arbetsbänken.

skapande av ny databas

nästa steg är att skapa testdatabasen med några tabeller och poster lagrade i dessa tabeller för att göra en anslutning till databasen och utföra frågor.

Steg 1) Skriv ”visa databaser” för att se alla redan tillgängliga databaser

visa databaser;

DB-testning med Selen 2

steg 2) Skriv ”skapa databasanvändare;” för att skapa en databas med namnet ”användare”.

skapa databasanvändare;

DB-testning med selen 3

Observera att databasnamnet som användare skapas och kan ses i listan över databaser.

steg 3) Skriv ” använd användare;” för att välja den nyskapade databasen. Skriv också ”visa tabeller;” för att visa alla tabeller som finns tillgängliga i användardatabasen.

använd användare;
visa tabeller;

DB-testning med selen 4

notera att Tom uppsättning visas i resultatet av frågan” visa tabeller; ” eftersom det inte fanns några tabeller tillgängliga i användardatabasen.

Låt oss nu några tabeller och lägga till poster i dem.

steg 4) Skriv följande kommando för att skapa en tabell med 4 fält/kolumner (userId, användarnamn, userAge, userAddress).

Skapa tabell userinfo
(
userId int,
användarnamn varchar(255),
userAge int,
userAddress varchar(255)
);

DB-testning med selen 5

nästa steg är att lägga till några dataposter i tabellen ”userinfo”.

Steg 5) Skriv följande kommando för att infoga data i tabellen en tabell för alla fyra fälten 4 fält/kolumner (userId, användarnamn, userAge, userAddress).

infoga i userinfo (userID, userName, userAge, userAddress) värden (’1’, ’shruti’, ’25’, ’Noida’);

för att visa den tillagda data, skriv följande kommando:

välj * från userinfo;

DB-testning med selen 6

på samma sätt kan du lägga till mer data i din tabell och kan skapa andra tabeller också.

nu har vi skapat vår databas. Vi kan gå vidare och förstå genomförandet av automatiserade frågor för att hämta posterna från databasen.

som vi också itererade tidigare är Selenium WebDriver ett verktyg för UI-automatisering. Således är Selenium WebDriver ensam inte berättigad att utföra databastestning men detta kan göras med Java Database Connectivity API (JDBC). API låter användaren ansluta och interagera med datakällan och hämta data med hjälp av automatiserade frågor. För att kunna utnyttja JDBC API krävs det att Java Virtual Machine (JVM) körs på systemet.

JDBC-arbetsflöde

DB-testning med selen 7

vi skulle hålla vårt fokus i linje med följande processer:

  1. skapa en anslutning till databasen
  2. exekvera frågor och uppdatera uttalanden för att extrahera/hämta data (CRUD-operationer)
  3. använda och manipulera data som extraheras från databasen i form av resultatuppsättningen. (Resultatuppsättning är en samling data organiserade i rader och kolumner)
  4. koppla bort databasanslutningen.

som sagt tidigare, för att kunna testa databasen automatiskt från våra Selenium WebDriver-testskript, skulle vi ansluta till databasen via JDBC-anslutning inom våra testskript. Post till anslutningen, kan vi utlösa så många CRUD (skapa, läsa, uppdatera och ta bort) operationer på databasen.

i denna handledning skulle vi diskutera” Läs operation och dess varianter ” och om deras implementering i Selenium WebDriver script. Men före det, låt oss kontrollera testscenariot manuellt med ”MySQL-kommandoraden”.

Scenario:

1) Öppna databasservern och anslut till databasen ”användare”.

2) Lista ner alla poster från tabellen ”userinfo”.

Syntax: välj * från userinfo;

DB-testning med selen 8

3) Stäng databasanslutningen.

Lägg märke till att läsfrågan kommer att lista alla användardata som finns i userinfo-tabellen. Tabellen består av följande kolumner.

  • userId
  • användarnamn
  • userAge
  • userAddress

resultatet visar också att det bara finns en enda datauppsättning i tabellen.

låt oss nu utföra samma scenario med Java-klassen.

för att kunna komma åt databasen, användaren utnyttjas för att välja bland de olika anslutningsalternativ tillgängliga för att ansluta till databasen. De flesta databasanslutningarna distribueras fritt som ”jar” – filer. Eftersom vi använder MySQL som datakälla måste vi därför ladda ner jar-filen som är specifik för MySQL.

jar-filen kan laddas ner från: här eller här.

Steg 1: det första och främsta steget är att konfigurera projektets byggväg och lägga till ”mysql-connector-java-3.1.13-bin.jar ” – fil som ett externt bibliotek.

steg 2: skapa en java-klass som heter ”DatabaseTesingDemo”.

steg 3: Kopiera och klistra in nedanstående kod i klassen som skapades i ovanstående steg.

kodexempel

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("\t" + res.getString(2)); System.out.print("\t" + res.getString(3)); System.out.println("\t" + res.getString(4)); } } catch(Exception e) { e.printStackTrace(); } } @After public void tearDown() throws Exception { // Close DB connection if (con != null) { con.close(); } }}

utsignalen från ovanstående kod är:

1 shruti 25 Noida
2 shrivastava 55 Mumbai

Läs uttalande varianter

där klausul med enda villkor

String query = ” välj * från userinfo där userId='” + 1 + ”’”;
ResultSet res = stmt.executeQuery(fråga);

utgång:
1 shruti 25 Noida

där klausul med flera villkor

String Address =”Mumbai”;
String query = ”välj * från userinfo där userId='” + 2 + ”’ och userAddress='”+adress+”’”;
ResultSet res = stmt.executeQuery (fråga);

utgång:
2 shrivastava 55 Mumbai

Visa userId

String query = ”välj userId från userinfo”;
ResultSet res = stmt.executeQuery (fråga);

utgång:
1
2

Visa userId med where klausul

String Address =”Noida”;
String query = ”välj userId,användarnamn från userinfo där userAddress='”+adress+”’”;
ResultSet res = stmt.executeQuery (query);

Output:
2
shrivastava

således, på samma sätt användaren kan utföra olika frågor på databasen.

med detta, låt oss kasta lite ljus på resultat tillgänglighetsmetoder också.

Metoder För Resultattillgänglighet:

metodnamn beskrivning
String getString () metoden används för att hämta strängtypsdata från resultatuppsättningen
Int getInt() metoden används för att hämta heltalstypdata från resultatuppsättningen
boolean getBoolean () metoden används för att hämta det booleska värdet från resultatuppsättningen
float getFloat () metoden används för att hämta float-typdata från resultatuppsättningen
lång getLong () metoden används för att hämta data av lång Typ från resultatuppsättningen
kort getShort () metod används för att hämta kort typ data från resultatuppsättningen
double getDouble () metoden används för att hämta dubbeltypsdata från resultatuppsättningen
datum getDate () metoden används för att hämta objektet Datumtyp från resultatuppsättningen

resultat navigeringsmetoder:

metodnamn beskrivning
boolean next () metoden används för att flytta till nästa post i resultatuppsättningen
boolean previous () metoden används för att flytta till föregående post i resultatuppsättningen
boolean first () metoden används för att flytta till den första posten i resultatuppsättningen
boolean last () metoden används för att flytta till den sista posten i resultatuppsättningen
booleska
absolut (int radnummer)
metoden används för att flytta till den specifika posten i resultatuppsättningen

slutsats

genom denna handledning försökte vi göra dig bekant med begreppet automatiserad Databastestning. Vi lade tydligt tonvikten på de tekniska konsekvenserna och behoven av Databastestning.

eftersom hela vår serie var inriktad på selen kan läsaren bli vilseledd och kan skapa ett intryck av att denna handledning skulle lära sig att utföra Databastestning med selen, men som jag nämnde ett antal gånger tidigare kan allt som ligger utanför periferin av UI-testning inte hanteras av selen. Därför introducerar vi Java Database Connectivity (JDBC) API för att utföra Databastestning genom att bädda in koden i Selenium WebDriver-skript.

JDBC gör det möjligt för java-klassen att ansluta till databasen, hämta data från databasen eller faktiskt utföra någon av CRUD-operationerna, manipulera de resulterande data och stänga anslutningen.

således utgör handledningen det grundläggande urvalet av ovannämnda process.

nästa handledning #29: vi kommer att gå vidare med avancerade selen ämnen. I nästa handledning kommer vi att täcka Selenium – nätet-som används när du måste utföra tester med flera webbläsare och du har ett stort antal testfall.

Senast Uppdaterad: 29 November 2021

Leave a Reply

Din e-postadress kommer inte publiceras.