Selenium Database Testing (Mit WebDriver und JDBC API)

In unserem letzten Selenium-Tutorial haben wir gelernt, wie Sie einige wiederkehrende Probleme in Selenium-Skripten beheben können. Wir haben einige fortgeschrittene Konzepte besprochen, bei denen wir uns mit Maus- und Tastaturereignissen befassen und durch Implementieren von Listen auf mehrere Links zugreifen.

In unseren fortgeschrittenen Themen der Selenium-Schulungsreihe möchten wir Ihnen das Konzept des Datenbanktests mit Selenium WebDriver vorstellen.

Wir würden die grundlegenden Prozesse wie Datenbankverbindung, Ausführen von Abfragen, Abrufen von Daten und Trennen von Datenbankinstanzen usw. diskutieren. Wir würden auch verschiedene praktische Implikationen diskutieren, wenn wir Datenbanktests mit Automatisierungstests benötigen, um die vollständigen End-to-End-Szenarien zu testen.

 DB-Tests mit Selen

Bevor Sie mit den technischen Implikationen im Zusammenhang mit automatisierten Datenbanktests fortfahren. Lassen Sie uns einige Szenarien besprechen, in denen wir Datenbanktests zusammen mit den Automatisierungstests durchführen müssen. Zuvor möchte ich jedoch bestätigen, dass Datenbanktests eine sehr eigenartige Art von Tests sind, während Selenium WebDriver ein Tool zum Simulieren und Automatisieren von Benutzerinteraktionen mit der Anwendungsbenutzeroberfläche ist.

Technisch gesehen führen wir also keine präzisen Datenbanktests durch, sondern testen unsere Anwendung in Verbindung mit der Datenbank, um sicherzustellen, dass die Änderungen an beiden Enden reflektiert werden, wodurch Fehler frühzeitig erkannt werden.

Absolut alle Webanwendungen benötigen ein Backend, um die Daten zu speichern. Datenbanken wie MySQL, Oracle und SQL Server sind heutzutage einigermaßen beliebt.

Lassen Sie uns nun zum ursprünglichen Thema zurückkehren und einige Szenarien diskutieren, um die Nachfrage nach Datenbanktests zusammen mit Automatisierungstests zu veranschaulichen.

Betrachten Sie die folgenden Szenarien

# 1) Manchmal müssen wir sicherstellen, dass die über die Benutzeroberfläche eingegebenen Daten konsistent in der Datenbank wiedergegeben werden. Daher rufen wir die Informationen aus der Datenbank ab und überprüfen die abgerufenen Informationen anhand der von der Benutzeroberfläche bereitgestellten Informationen. Zum Beispiel Registrierungsformulare, Benutzerdaten, Benutzerprofile, Aktualisierungen und Löschungen von Benutzerdaten. Somit kann das zu automatisierende Testszenario darin bestehen, „zu überprüfen, ob die Informationen des Benutzers erfolgreich in der Datenbank gespeichert werden, sobald sich der Benutzer in der Anwendung registriert“.

# 2) Ein weiterer Anwendungsfall für das Durchführen von Datenbanktests mit Selenium WebDriver kann auftreten, wenn der Benutzer angewiesen wird, die Testdaten oder erwarteten Daten aus der Datenbank zu laden. In einem solchen Fall würde der Benutzer also die Verbindung mit der Datenbank über eine Drittanbieter-API herstellen, Abfragen ausführen, um Daten aus dem Dataset abzurufen, und dann die aus der Datenbank abgerufenen Daten mit den tatsächlichen Daten bestätigen, die auf der Anwendungsbenutzeroberfläche aufgefüllt werden.

# 3) Ein weiterer Anwendungsfall besteht darin, assoziative Datenbanktests durchzuführen. Angenommen, wir haben eine Operation auf der Benutzeroberfläche der Anwendung ausgeführt und möchten die Reflexion in der Datenbank testen. Es kann vorkommen, dass sich die betroffenen Daten aufgrund der Zuordnung in verschiedenen Tabellen der Datenbank befinden. Daher ist es immer ratsam, die Datenreflexion an allen betroffenen Bereichen zu testen.

Selenium simuliert, wie gesagt, die Benutzerinteraktionen mit der zu testenden Anwendung. Es kann Tastaturereignisse, Mausaktionen usw. simulieren. Wenn der Benutzer jedoch etwas außerhalb der Nähe von Browser–Webanwendungsinteraktionen automatisieren möchte, kann Selenium keine große Hilfe sein. Daher benötigen wir andere Tools oder Funktionen, um End–to–End-Tests durchzuführen.

Daher müssen wir in allen oben genannten Szenarien möglicherweise Datenbanktests zusammen mit der UI-Automatisierung durchführen. Wir können die Geschäftslogik überprüfen, indem wir die Daten manipulieren und ihre Reflexion überprüfen. Wir können auch die technischen Aspekte der Datenbank selbst wie Soft Delete, Feldvalidierung usw. überprüfen.

Lassen Sie uns nun mit der eigentlichen Implementierung fortfahren. Bevor wir Selenium WebDriver-Skripte entwickeln, um Daten aus der Datenquelle zu extrahieren, erstellen wir Testdaten in der Datenbank. Für dieses Tutorial würden wir MySQL als Datenbank verwenden.

Erstellen von Testdaten in der Datenbank

Wenn Sie die Datenbank noch nicht heruntergeladen haben, laden Sie sie über den Link herunter. Es wird erwartet, dass der Benutzer einige grundlegende Schritte zum Herunterladen und Installieren der Datenbank ausführt.

=>> Lesen Sie dieses Tutorial, um die MySQL-Datenbank herunterzuladen und zu installieren.

Sobald die Datenbank erfolgreich installiert wurde, kann der Benutzer die MySQL-Befehlszeilenaufforderung starten, die wie im folgenden Screenshot aussehen würde. Die Anwendung fordert den Benutzer möglicherweise auf, das Kennwort einzugeben. Das Standardpasswort ist „root“.

 DB-Tests mit Selenium 1

Hinweis: Der Benutzer kann auch GUI-basierte Clients über das Internet finden, um eine Verbindung zur Datenbank herzustellen. Um nur einige zu nennen, kann der Benutzer den Query Browser oder die Work Bench herunterladen und installieren.

Erstellen einer neuen Datenbank

Der nächste Schritt besteht darin, die Testdatenbank mit einigen Tabellen und Datensätzen zu erstellen, die in diesen Tabellen gespeichert sind, um eine Verbindung mit der Datenbank herzustellen und Abfragen auszuführen.

Schritt 1) Geben Sie „Datenbanken anzeigen“ ein, um alle bereits verfügbaren Datenbanken anzuzeigen

Datenbanken anzeigen;

 DB-Tests mit Selenium 2

Schritt 2) Geben Sie „create database user;“ ein, um eine Datenbank mit dem Namen „user“ zu erstellen.

Datenbankbenutzer erstellen;

 DB-Tests mit Selenium 3

Beachten Sie, dass der Datenbankname als Benutzer erstellt wird und in der Liste der Datenbanken angezeigt wird.

Schritt 3) Geben Sie „use user;“ ein, um die neu erstellte Datenbank auszuwählen. Geben Sie außerdem „show tables;“ ein, um alle in der Benutzerdatenbank verfügbaren Tabellen anzuzeigen.

Benutzer verwenden;
Tabellen anzeigen;

 DB-Tests mit Selenium 4

Beachten Sie, dass im Ergebnis der Abfrage „show tables;“ ein leerer Satz angezeigt wird, da in der Benutzerdatenbank keine Tabellen verfügbar waren.

Lassen Sie uns nun ein paar Tabellen und fügen Sie Datensätze in ihnen.

Schritt 4) Geben Sie den folgenden Befehl ein, um eine Tabelle mit 4 Feldern / Spalten (Benutzer-ID, Benutzername, Benutzeralter, Benutzeradresse) zu erstellen.

Tabelle erstellen userinfo
(
userId int,
Benutzername varchar(255),
userAge int,
userAddress varchar(255)
);

 DB-Tests mit Selenium 5

Im nächsten Schritt fügen Sie einige Datensätze in die Tabelle „userinfo“ ein.

Schritt 5) Geben Sie den folgenden Befehl ein, um Daten in die Tabelle einzufügen eine Tabelle für alle vier Felder 4 Felder / Spalten (Benutzer-ID, Benutzername, Benutzeralter, Benutzeradresse).

insert into userinfo (userId, userName, userAge, userAddress) values (‚1′, ’shruti‘, ’25‘, ‚Noida‘);

Um die hinzugefügten Daten anzuzeigen, geben Sie den folgenden Befehl ein:

select * from userinfo;

 DB-Tests mit Selenium 6

Ebenso können Sie Ihrer Tabelle weitere Daten hinzufügen und auch andere Tabellen erstellen.

Nun, da wir unsere Datenbank erstellt haben. Wir können vorankommen und die Implementierung automatisierter Abfragen zum Abrufen der Datensätze aus der Datenbank verstehen.

Wie bereits erwähnt, ist Selenium WebDriver ein Tool zur Automatisierung der Benutzeroberfläche. Daher kann Selenium WebDriver allein keine Datenbanktests durchführen, dies kann jedoch mithilfe der Java Database Connectivity API (JDBC) erfolgen. Die API ermöglicht es dem Benutzer, sich mit der Datenquelle zu verbinden und mit ihr zu interagieren und die Daten mithilfe automatisierter Abfragen abzurufen. Um die JDBC-API ausnutzen zu können, muss Java Virtual Machine (JVM) auf dem System ausgeführt werden.

JDBC-Arbeitsablauf

 DB-Tests mit Selenium 7

Wir würden unseren Fokus auf die folgenden Prozesse richten:

  1. Herstellen einer Verbindung mit der Datenbank
  2. Ausführen von Abfragen und Update-Anweisungen zum Extrahieren / Abrufen von Daten (CRUD-Operationen)
  3. Verwenden und Bearbeiten der aus der Datenbank extrahierten Daten in Form der Ergebnismenge. (Ergebnismenge ist eine Sammlung von Daten in den Zeilen und Spalten organisiert)
  4. Trennen der Datenbankverbindung.

Wie bereits erwähnt, würden wir, um die Datenbank automatisch von unseren Selenium WebDriver-Testskripten aus testen zu können, eine Verbindung zur Datenbank über die JDBC-Konnektivität in unseren Testskripten herstellen. Nach der Verbindung können wir so viele CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) in der Datenbank auslösen.

In diesem Tutorial würden wir „Leseoperation und ihre Varianten“ und deren Implementierung im Selenium WebDriver-Skript diskutieren. Aber lassen Sie uns vorher das Testszenario manuell mit der „MySQL-Befehlszeile“ überprüfen.

Szenario:

1) Öffnen Sie den Datenbankserver und stellen Sie eine Verbindung zur Datenbank „Benutzer“ her.

2) Listen Sie alle Datensätze aus der Tabelle „userinfo“ auf.

Syntax: select * from userinfo;

 DB-Tests mit Selenium 8

3) Schließen Sie die Datenbankverbindung.

Beachten Sie, dass die Leseabfrage alle in der userinfo-Tabelle vorhandenen Benutzerdaten auflistet. Die Tabelle besteht aus den folgenden Spalten.

  • userId
  • username
  • userAge
  • userAddress

Das Ergebnis zeigt auch, dass in der Tabelle nur ein einziger Datensatz vorhanden ist.

Lassen Sie uns nun das gleiche Szenario mit der Java-Klasse ausführen.

Um auf die Datenbank zugreifen zu können, kann der Benutzer zwischen den verschiedenen Konnektoroptionen wählen, die für die Verbindung mit der Datenbank verfügbar sind. Die meisten Datenbank-Konnektoren werden frei als „JAR“ -Dateien verteilt. Da wir MySQL als Datenquelle verwenden, müssen wir daher die für MySQL spezifische JAR-Datei herunterladen.

Die JAR-Datei kann heruntergeladen werden von: hier oder hier.

Schritt 1: Der erste und wichtigste Schritt besteht darin, den Erstellungspfad des Projekts zu konfigurieren und „mysql-connector-java-3.1.13-bin.jar“-Datei als externe Bibliothek.

Schritt 2: Erstellen Sie eine Java-Klasse mit dem Namen „DatabaseTesingDemo“.

Schritt 3: Kopieren Sie den folgenden Code und fügen Sie ihn in die im obigen Schritt erstellte Klasse ein.

Codebeispiel

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(); } }}

Die Ausgabe des obigen Codes lautet:

1 shruti 25 Noida
2 shrivastava 55 Mumbai

Read Anweisungsvarianten

Where Klausel mit einzelner Bedingung

String query = „select * from userinfo where userId='“ + 1 + „‚“;
Ergebnismenge res = stmt.executeQuery(query);

Ausgabe:
1 shruti 25 Noida

Where-Klausel mit mehreren Bedingungen

String Address =“Mumbai“;
String query = „select * from userinfo where userId='“ + 2 + „‚ and userAddress='“+Address+“‚“;
ResultSet res = stmt.executeQuery(Abfrage);

Ausgabe:
2 shrivastava 55 Mumbai

Benutzer-ID anzeigen

String query = „Benutzer-ID aus Benutzerinfo auswählen“;
Ergebnismenge res = stmt.executeQuery(Abfrage);

Ausgabe:
1
2

userId mit where-Klausel anzeigen

String Address =“Noida“;
String query = „select userId,userName from userinfo where userAddress='“+Address+“‚“;
ResultSet res = stmt.executeQuery(query);

Ausgabe:
2
shrivastava

Auf dieselbe Weise kann der Benutzer verschiedene Abfragen in der Datenbank ausführen.

Lassen Sie uns in diesem Zusammenhang auch etwas Licht auf die Methoden zur Barrierefreiheit von Ergebnissen werfen.

Ergebnis Zugänglichkeit Methoden:

Methodenname Beschreibung
String getString() Methode wird verwendet, um die String-Typ-Daten aus der Ergebnismenge zu holen
int getInt() Methode wird verwendet, um die Integer-Typ-Daten aus der Ergebnismenge zu holen
boolean getBoolean() Methode wird verwendet, um den booleschen Wert aus der Ergebnismenge zu holen
float getFloat() Methode wird verwendet, um die Float-Typ-Daten aus der Ergebnismenge zu holen
lange getLong() Methode wird verwendet, um die Long-Typ-Daten aus der Ergebnismenge zu holen
short getShort() Methode wird verwendet, um die Short-Typ-Daten aus der Ergebnismenge zu holen
double getDouble() Methode wird verwendet, um die Double-Typ-Daten aus der Ergebnismenge zu holen
Date getDate() Methode wird verwendet, um das Objekt vom Typ Date aus der Ergebnismenge abzurufen

Ergebnisnavigationsmethoden:

Methodenname Beschreibung
boolean next() Methode wird verwendet, um zum nächsten Datensatz in der Ergebnismenge zu wechseln
boolean previous() Methode wird verwendet, um zum vorherigen Datensatz in der Ergebnismenge zu wechseln
boolean first() Methode wird verwendet, um zum ersten Datensatz in der Ergebnismenge zu wechseln
boolean last() Methode wird verwendet, um zum letzten Datensatz in der Ergebnismenge zu wechseln
boolean
absolute(int RowNumber)
Die Methode wird verwendet, um zum bestimmten Datensatz in der Ergebnismenge zu wechseln

Fazit

In diesem Tutorial haben wir versucht, Sie mit dem Konzept des automatisierten Datenbanktests vertraut zu machen. Wir haben den Schwerpunkt klar auf die technischen Implikationen und Bedürfnisse von Datenbanktests gelegt.

Da sich unsere gesamte Serie auf Selenium konzentrierte, kann der Leser in die Irre geführt werden und den Eindruck erwecken, dass dieses Tutorial lehren würde, Datenbanktests mit Selenium durchzuführen, aber wie ich bereits einige Male erwähnt habe, kann alles, was außerhalb der Peripherie des UI-Tests liegt, nicht von Selenium gehandhabt werden. Daher führen wir die Java Database Connectivity (JDBC) API ein, um Datenbanktests durchzuführen, indem wir den Code in die Selenium WebDriver-Skripte einbetten.

JDBC ermöglicht es der Java-Klasse, eine Verbindung zur Datenbank herzustellen, Daten aus der Datenbank abzurufen oder tatsächlich eine der CRUD-Operationen auszuführen, die resultierenden Daten zu manipulieren und die Verbindung zu schließen.

Somit stellt das Tutorial die grundlegende Beispielimplementierung des oben genannten Prozesses dar.

Nächstes Tutorial # 29: Wir werden mit fortgeschrittenen Selenium-Themen fortfahren. Im nächsten Tutorial werden wir das Selenium GRID behandeln, das verwendet wird, wenn Sie Multi-Browser-Tests durchführen müssen und eine große Anzahl von Testfällen haben.

Zuletzt aktualisiert: 29.November 2021

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht.