Test de base de données Selenium (En utilisant WebDriver et l’API JDBC)
Dans notre dernier tutoriel Selenium, nous avons appris à résoudre certains problèmes récurrents dans les scripts Selenium. Nous avons discuté de certains concepts avancés dans lesquels nous traiterions les événements de souris et de clavier, accédant à plusieurs liens en implémentant des listes.
Pour aller de l’avant avec nos sujets avancés de la série de formation sur le sélénium, nous vous présenterons le concept de test de base de données à l’aide de Selenium WebDriver.
Nous discuterons des processus de base tels que la connexion à la base de données, l’exécution de requêtes, la récupération de données et la déconnexion des instances de base de données, etc. Nous discuterons également de diverses implications pratiques lorsque nous avons besoin de tests de base de données avec des tests d’automatisation afin de tester les scénarios complets de bout en bout.
Avant d’aller de l’avant avec les implications techniques associées aux tests de base de données automatisés. Laissez-nous discuter de quelques scénarios où nous devons effectuer des tests de base de données avec les tests d’automatisation. Mais avant cela, je voudrais affirmer ici que le test de base de données est un type de test très particulier alors que Selenium WebDriver est un outil utilisé pour simuler et automatiser les interactions des utilisateurs avec l’interface utilisateur de l’application.
Donc, techniquement parlant, nous n’effectuons pas de tests de base de données avec précision, nous testons plutôt notre application en conjonction avec la base de données afin de nous assurer que les modifications sont reflétées aux deux extrémités, identifiant ainsi les défauts tôt.
Absolument toutes les applications Web ont besoin d’un backend pour stocker les données. Les bases de données comme MySQL, Oracle et SQL Server sont raisonnablement populaires de nos jours.
Revenons maintenant au sujet d’origine, discutons de quelques scénarios pour illustrer la demande de test de base de données avec les tests d’automatisation.
Considérez les scénarios suivants
#1) Parfois, nous devons nous assurer que les données saisies à partir de l’interface utilisateur sont systématiquement reflétées dans la base de données. Ainsi, nous récupérons les informations de la base de données et vérifions les informations récupérées par rapport aux informations fournies par l’interface utilisateur. Par exemple, les formulaires d’inscription, les données utilisateur, les profils utilisateur, les mises à jour et les suppressions de données utilisateur. Ainsi, le scénario de test à automatiser peut être « De vérifier que les informations de l’utilisateur sont correctement enregistrées dans la base de données dès que l’utilisateur s’inscrit dans l’application ».
#2) Un autre cas d’utilisation consistant à effectuer des tests de base de données avec Selenium WebDriver peut survenir lorsque l’utilisateur est invité à charger les données de test ou les données attendues de la base de données. Ainsi, dans un tel cas, l’utilisateur établirait la connexion avec la base de données à l’aide d’une API tierce, exécuterait des requêtes pour récupérer des données de l’ensemble de données, puis affirmerait les données extraites de la base de données avec les données réelles qui sont remplies sur l’interface utilisateur de l’application.
#3) Un autre cas d’utilisation consiste à effectuer des tests de base de données associatives. Supposons que nous ayons effectué une opération sur l’interface utilisateur de l’application et que nous souhaitions tester la réflexion dans la base de données. Il se peut que les données impactées résident dans différentes tables de la base de données en raison de l’association. Par conséquent, il est toujours conseillé de tester la réflexion des données sur toutes les zones touchées.
Le sélénium, comme je l’ai dit, simule les interactions de l’utilisateur avec l’application testée. Il peut simuler des événements de clavier, des actions de souris, etc. Mais si l’utilisateur souhaite automatiser quoi que ce soit en dehors du voisinage des interactions navigateur–application Web, le sélénium ne peut pas être d’une grande aide. Nous avons donc besoin d’autres outils ou capacités pour effectuer des tests de bout en bout.
Ainsi, dans tous les scénarios ci-dessus, nous pouvons nécessiter d’effectuer des tests de base de données avec l’automatisation de l’interface utilisateur. Nous pouvons vérifier les logiques commerciales en manipulant les données et en vérifiant leur réflexion. Nous pouvons également vérifier les aspects techniques de la base de données elle-même comme la suppression douce, la validation sur le terrain, etc.
Passons maintenant à la mise en œuvre réelle. Avant de développer des scripts Selenium WebDriver pour extraire des données de la source de données, créons des données de test dans la base de données. Pour ce tutoriel, nous utiliserions MySQL comme base de données.
Création des données de test dans la base de données
Si vous n’avez pas encore téléchargé la base de données, téléchargez-la en utilisant le lien. L’utilisateur doit suivre quelques étapes de base pour télécharger et installer la base de données.
=>> Lisez ce tutoriel pour télécharger et installer la base de données MySQL.
Une fois la base de données installée avec succès, l’utilisateur peut lancer l’invite de ligne de commande MySQL qui ressemblerait à la capture d’écran suivante. L’application peut demander à l’utilisateur d’entrer le mot de passe. Le mot de passe par défaut est « root ».
Remarque: L’utilisateur peut également trouver des clients basés sur l’interface graphique sur Internet pour se connecter à la base de données. Pour n’en nommer que quelques-uns, l’utilisateur peut télécharger et installer le navigateur de requêtes ou le banc de travail.
Création d’une nouvelle base de données
L’étape suivante consiste à créer la base de données de test avec quelques tables et enregistrements stockés dans ces tables afin d’établir une connexion avec la base de données et d’exécuter des requêtes.
Étape 1) Tapez « afficher les bases de données » pour voir toutes les bases de données déjà disponibles
afficher les bases de données;
Étape 2) Tapez « créer un utilisateur de base de données; » pour créer une base de données nommée « utilisateur ».
créer un utilisateur de base de données;
Notez que le nom de la base de données en tant qu’utilisateur est créé et peut être vu dans la liste des bases de données.
Étape 3) Tapez « utiliser l’utilisateur; » pour sélectionner la base de données nouvellement créée. Tapez également « afficher les tables; » pour afficher toutes les tables disponibles dans la base de données utilisateur.
utiliser l’utilisateur;
afficher les tableaux;
Notez que l’ensemble vide est affiché dans le résultat de la requête « afficher les tables; » car aucune table n’était disponible dans la base de données utilisateur.
Laissez-nous maintenant quelques tables et ajoutez-y des enregistrements.
Étape 4) Tapez la commande suivante pour créer une table avec 4 champs / colonnes (userId, userName, userAge, userAddress).
créer une table userinfo
(
userId int,
Nom d’utilisateur varchar(255),
userAge int,
userAddress varchar(255)
);
L’étape suivante consiste à ajouter des enregistrements de données dans la table « userinfo ».
Étape 5) Tapez la commande suivante pour insérer des données dans la table une table pour les quatre champs 4 champs / colonnes (userId, userName, userAge, userAddress).
insert into userinfo(userID, userName, userAge, userAddress) values(‘1’, ‘shruti’, ’25’, ‘Noida’);
Pour afficher les données ajoutées, tapez la commande suivante :
select* from userinfo;
De même, vous pouvez ajouter plus de données à votre table et créer d’autres tables.
Maintenant, que nous avons créé notre base de données. Nous pouvons aller de l’avant et comprendre la mise en œuvre de requêtes automatisées pour récupérer les enregistrements de la base de données.
Comme nous l’avons également répété précédemment, Selenium WebDriver est un outil d’automatisation de l’interface utilisateur. Ainsi, Selenium WebDriver seul n’est pas éligible pour effectuer des tests de base de données, mais cela peut être fait à l’aide de Java Database Connectivity API (JDBC). L’API permet à l’utilisateur de se connecter et d’interagir avec la source de données et de récupérer les données à l’aide de requêtes automatisées. Pour pouvoir exploiter l’API JDBC, il est nécessaire que la machine virtuelle Java (JVM) s’exécute sur le système.
Flux de travail JDBC
Nous garderions notre objectif aligné sur les processus suivants:
- La création d’une connexion avec la base de données
- Exécutant des requêtes et des instructions de mise à jour afin d’extracer/récupérer des données (Opérations CRUD)
- En utilisant et en manipulant les données extraites de la base de données sous la forme de l’ensemble de résultats. (Le jeu de résultats est une collection de données organisées en lignes et colonnes)
- Déconnexion de la connexion à la base de données.
Comme indiqué précédemment, pour pouvoir tester automatiquement la base de données à partir de nos scripts de test Selenium WebDriver, nous nous connecterions à la base de données via la connectivité JDBC dans nos scripts de test. Post à la connexion, nous pouvons déclencher autant d’opérations CRUD (Créer, Lire, Mettre à jour et Supprimer) sur la base de données.
Dans ce tutoriel, nous discuterons de « Opération de lecture et de ses variantes » et de leur implémentation dans le script Selenium WebDriver. Mais avant cela, vérifions le scénario de test manuellement en utilisant la « ligne de commande MySQL ».
Scénario:
1) Ouvrez le serveur de base de données et connectez-vous à la base de données « utilisateur ».
2) Répertoriez tous les enregistrements de la table « userinfo ».
Syntaxe: select* from userinfo;
3) Fermez la connexion à la base de données.
Notez que la requête read répertorie toutes les données utilisateur présentes dans la table userinfo. Le tableau est composé des colonnes suivantes.
- userId
- username
- userAge
- userAddress
Le résultat montre également qu’il n’y a qu’un seul ensemble de données présent dans la table.
Maintenant, exécutons le même scénario en utilisant la classe Java.
Pour pouvoir accéder à la base de données, l’utilisateur peut choisir parmi les diverses options de connecteur disponibles pour se connecter à la base de données. La plupart des connecteurs de base de données sont distribués librement sous forme de fichiers « jar ». Comme nous utilisons MySQL comme source de données, nous devons donc télécharger le fichier jar spécifique à MySQL.
Le fichier jar peut être téléchargé à partir de: ici ou ici.
Étape 1: La première étape consiste à configurer le chemin de construction du projet et à ajouter « mysql-connector-java-3.1.13-bin.fichier « jar » en tant que bibliothèque externe.
Étape 2: Créez une classe java nommée « DatabaseTesingDemo ».
Étape 3: Copiez et collez le code ci-dessous dans la classe créée à l’étape ci-dessus.
Exemple de code
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(); } }}
La sortie du code ci-dessus est:
1 shruti 25 Noida
2 shrivastava 55 Mumbai
Variantes d’instruction de lecture
Clause Where avec condition unique
String query = »select* from userinfo where userId=' » + 1 + « ‘ »;
ResultSet res= stmt.executeQuery(requête);
Sortie:
1 shruti 25 Noida
Clause Where avec plusieurs conditions
String Address= »Mumbai »;
String query= »select* from userinfo where userId=' »+2+ »‘ et userAddress=' »+Address+ »‘ »;
ResultSet res= stmt.executeQuery(requête);
Sortie:
2 shrivastava 55 Mumbai
Afficher l’ID utilisateur
String query= »sélectionnez l’ID utilisateur à partir de l’information utilisateur »;
ResultSet res= stmt.executeQuery(requête);
Sortie:
1
2
Afficher l’ID utilisateur avec la clause where
String Address= »Noida »;
String query= »sélectionnez l’ID utilisateur, le nom d’utilisateur depuis userinfo où userAddress=' »+ Address + » ‘ »;
ResultSet res= stmt.executeQuery(query);
Sortie:
2
shrivastava
Ainsi, de la même manière, l’utilisateur peut exécuter diverses requêtes sur la base de données.
Avec cela, faisons également la lumière sur les méthodes d’accessibilité des résultats.
Méthodes d’accessibilité des résultats:
Nom de la méthode | Description |
---|---|
La méthode String getString() | est utilisée pour extraire les données de type de chaîne de l’ensemble de résultats |
la méthode int getInt() | est utilisée pour récupérer les données de type entier du jeu de résultats |
la méthode booléenne getBoolean() | est utilisée pour récupérer la valeur booléenne de l’ensemble de résultats |
la méthode float getFloat() | est utilisée pour récupérer les données de type float du jeu de résultats |
long La méthode getLong() | est utilisée pour récupérer les données de type long du jeu de résultats |
la méthode short getShort() | est utilisée pour récupérer les données de type court à partir du jeu de résultats |
la méthode double getDouble() | est utilisée pour récupérer les données de type double à partir du jeu de résultats |
La méthode Date getDate() | est utilisée pour extraire l’objet de type Date du jeu de résultats |
Méthodes de Navigation des Résultats:
Nom de la méthode | Description |
---|---|
la méthode booléenne next() | est utilisée pour passer à l’enregistrement suivant dans le jeu de résultats |
la méthode booléenne previous() | est utilisée pour passer à l’enregistrement précédent dans le jeu de résultats |
la méthode booléenne first() | est utilisée pour passer au premier enregistrement du jeu de résultats |
la méthode booléenne last() | est utilisée pour passer au dernier enregistrement du jeu de résultats |
booléen absolute (int rowNumber) |
La méthode est utilisée pour passer à l’enregistrement spécifique dans le jeu de résultats |
Conclusion
Grâce à ce tutoriel, nous avons essayé de vous familiariser avec le concept de Test automatisé de base de données. Nous avons clairement mis l’accent sur les implications techniques et les besoins des tests de bases de données.
Comme toute notre série était axée sur le sélénium, le lecteur peut être induit en erreur et peut donner l’impression que ce tutoriel apprendrait à effectuer des tests de base de données en utilisant du Sélénium, mais comme je l’ai mentionné plusieurs fois plus tôt, tout ce qui se trouve en dehors de la périphérie des tests d’interface utilisateur ne peut pas être géré par le Sélénium. Par conséquent, nous introduisons l’API JDBC (Java Database Connectivity) afin d’effectuer des tests de base de données en incorporant le code dans les scripts Selenium WebDriver.
JDBC permet à la classe java de se connecter à la base de données, de récupérer des données de la base de données ou d’effectuer l’une des opérations CRUD, de manipuler les données résultantes et de fermer la connexion.
Ainsi, le tutoriel constitue l’exemple de base de mise en œuvre du processus mentionné ci-dessus.
Tutoriel suivant #29: Nous allons aller de l’avant avec des sujets avancés sur le sélénium. Dans le prochain tutoriel, nous couvrirons la GRILLE de sélénium – qui est utilisée lorsque vous devez effectuer des tests multi-navigateurs et que vous avez un grand nombre de cas de test.
Dernière mise à jour : 29 novembre 2021