Pruebas de la base de datos de Selenium (Usando WebDriver y JDBC API)
En nuestro último tutorial de Selenium, aprendimos a solucionar algunos problemas recurrentes en scripts de selenium. Discutimos algunos conceptos avanzados en los que nos ocuparíamos de eventos de ratón y teclado, accediendo a múltiples enlaces mediante la implementación de listas.
Siguiendo adelante con nuestros temas avanzados en la serie de capacitación de Selenium, le presentaremos el concepto de pruebas de bases de datos utilizando Selenium WebDriver.
Discutiremos los procesos básicos como la conexión a la base de datos, la ejecución de consultas, la obtención de datos y la desconexión de instancias de la base de datos, etc. También discutiremos varias implicaciones prácticas en las que necesitamos pruebas de bases de datos con pruebas de automatización para probar los escenarios completos de extremo a extremo.
Antes de seguir adelante con las implicaciones técnicas asociadas con las pruebas automatizadas de bases de datos. Analicemos algunos escenarios en los que requerimos realizar pruebas de base de datos junto con las Pruebas de Automatización. Pero antes de eso, me gustaría afirmar aquí que las pruebas de base de datos son un tipo de pruebas muy peculiar, mientras que Selenium WebDriver es una herramienta utilizada para simular y automatizar las interacciones del usuario con la interfaz de usuario de la aplicación.
Por lo tanto, técnicamente hablando, no estamos realizando pruebas de base de datos con precisión, sino que estamos probando nuestra aplicación junto con la base de datos para garantizar que los cambios se reflejen en ambos extremos, identificando así los defectos de forma temprana.
Absolutamente todas las aplicaciones web necesitan un backend para almacenar los Datos. Las bases de datos como MySQL, Oracle y SQL Server son bastante populares en estos días.
Ahora, volviendo al tema original, analicemos algunos escenarios para ejemplificar la demanda de pruebas de bases de datos junto con Pruebas de automatización.
Considere los siguientes escenarios
#1) A veces, se nos requiere asegurarnos de que los datos ingresados desde la interfaz de usuario se reflejen de manera consistente en la base de datos. Por lo tanto, recuperamos la información de la Base de datos y verificamos la información recuperada con la información suministrada desde la interfaz de usuario. Por ejemplo, formularios de registro, datos de usuario, perfiles de usuario, actualizaciones y eliminaciones de datos de usuario. Por lo tanto, el escenario de prueba para automatizar puede ser «Verificar que la información del usuario se guarda correctamente en la base de datos tan pronto como el usuario se registra en la aplicación».
#2) Puede surgir otro caso de uso de realizar pruebas de base de datos con Selenium WebDriver cuando se indica al usuario que cargue los datos de prueba o los datos esperados de la base de datos. Por lo tanto, en tal caso, el usuario haría la conexión con la Base de datos utilizando una API de terceros, ejecutaría consultas para recuperar datos del conjunto de datos y luego afirmaría los datos obtenidos de la Base de datos con los datos reales que se rellenan en la interfaz de usuario de la aplicación.
#3) Otro caso de uso es realizar pruebas de base de datos asociativa. Supongamos que hemos realizado una operación en la interfaz de usuario de la aplicación y queremos probar el reflejo en la Base de datos. Puede darse el caso de que los datos afectados residan en varias tablas de la base de datos debido a la asociación. Por lo tanto, siempre es recomendable probar la reflexión de datos en todas las áreas afectadas.
Selenium, como he dicho, simula las interacciones del usuario con la aplicación bajo prueba. Puede simular eventos de teclado, acciones de ratón, etc. Pero si el usuario desea automatizar cualquier cosa fuera de las interacciones entre el navegador y la aplicación web, entonces selenium no puede ser de mucha ayuda. Por lo tanto, requerimos otras herramientas o capacidades para realizar pruebas de extremo a extremo.
Por lo tanto, en todos los escenarios anteriores, es posible que necesitemos realizar pruebas de base de datos junto con la automatización de la interfaz de usuario. Podemos comprobar la lógica empresarial manipulando los datos y verificando su reflejo. También podemos verificar los aspectos técnicos de la Base de datos en sí, como la eliminación suave, la validación de campos, etc.
Avancemos ahora con la implementación real. Antes de desarrollar scripts de Selenium WebDriver para extraer datos de la fuente de datos, creemos datos de prueba en la base de datos. Para este tutorial, usaríamos MySQL como base de datos.
Creación de datos de prueba en la base de datos
Si aún no ha descargado la base de datos, descárguela utilizando el enlace. Se espera que el usuario siga algunos pasos básicos para descargar e instalar la base de datos.
=>> Lea este tutorial para descargar e instalar la base de datos MySQL.
Una vez que la base de datos se haya instalado correctamente, el usuario puede iniciar el símbolo de línea de comandos de MySQL, que se vería como la siguiente captura de pantalla. La aplicación puede pedirle al usuario que introduzca la contraseña. La contraseña predeterminada es»root».
Nota: El usuario también puede encontrar clientes basados en GUI a través de Internet para conectarse con la base de datos. Por nombrar algunos, el usuario puede descargar e instalar el Navegador de consultas o el Banco de trabajo.
Creación de una nueva base de datos
El siguiente paso es crear la base de datos de prueba con unas pocas tablas y registros almacenados en esas tablas para establecer una conexión con la base de datos y ejecutar consultas.
Paso 1) Escriba «mostrar bases de datos» para ver todas las bases de datos ya disponibles
mostrar bases de datos;
Paso 2) Escriba «crear usuario de base de datos;» para crear una base de datos llamada «usuario».
crear usuario de base de datos;
Tenga en cuenta que el nombre de la base de datos como usuario se crea y se puede ver en la lista de bases de datos.
Paso 3) Escriba » usar usuario;» para seleccionar la base de datos recién creada. Además, escriba «mostrar tablas;» para ver todas las tablas disponibles en la base de datos de usuarios.
usar usuario;
mostrar tablas;
Tome nota de que el conjunto vacío se muestra en el resultado de la consulta» mostrar tablas;», ya que no había tablas disponibles en la base de datos de usuarios.
Ahora vamos a añadir algunas tablas y registros en ellas.
Paso 4) Escriba el siguiente comando para crear una tabla con 4 campos/columnas (userId, userName, Usererage, userAddress).
crear tabla userinfo
(
userId int,
userName varchar (255),
Usererage int,
userAddress varchar(255)
);
El siguiente paso es agregar algunos registros de datos en la tabla» userinfo».
Paso 5) Escriba el siguiente comando para insertar datos en la tabla una tabla para los cuatro campos 4 campos / columnas (userId, userName, Usererage, userAddress).
insertar en userinfo (userId, userName, Usererage, userAddress) valores (‘1’, ‘shruti’, ’25’, ‘Noida’);
Para ver los datos agregados, escriba el siguiente comando:
seleccionar * desde userinfo;
Del mismo modo, puede agregar más datos a su tabla y también puede crear otras tablas.
Ahora, que hemos creado nuestra base de datos. Podemos avanzar y entender la implementación de consultas automatizadas para obtener los registros de la base de datos.
Como también hemos iterado anteriormente, Selenium WebDriver es una herramienta para la automatización de la interfaz de usuario. Por lo tanto, Selenium WebDriver por sí solo no es elegible para realizar pruebas de bases de datos, pero esto se puede hacer utilizando Java Database Connectivity API (JDBC). La API permite al usuario conectarse e interactuar con la fuente de datos y obtener los datos con la ayuda de consultas automatizadas. Para poder explotar la API de JDBC, es necesario tener una Máquina Virtual Java (JVM) ejecutándose en el sistema.
Flujo de trabajo JDBC
Mantendríamos nuestro enfoque alineado con los siguientes procesos:
- Crear una conexión con la base de datos
- Ejecutar consultas y sentencias de actualización para extraer/recuperar datos (Operaciones CRUD)
- Usar y manipular los datos extraídos de la base de datos en forma de conjunto de resultados. (El conjunto de resultados es una colección de datos organizados en filas y columnas)
- Desconectar la conexión de la base de datos.
Como se dijo anteriormente, para poder probar la base de datos automáticamente desde nuestros scripts de prueba de Selenium WebDriver, nos conectaríamos con la base de datos a través de la conectividad JDBC dentro de nuestros scripts de prueba. Después de la conexión, podemos activar tantas operaciones CRUD (Crear, Leer, Actualizar y Eliminar) en la Base de datos.
En este tutorial, discutiremos «Operación de lectura y sus variantes» y sobre su implementación en el script Selenium WebDriver. Pero antes de eso, comprobemos el escenario de prueba manualmente usando la «línea de comandos MySQL».Escenario
:
1) Abra el servidor de la base de datos y conéctese a la base de datos» usuario».
2) Enumere todos los registros de la tabla «userinfo».
Sintaxis: seleccionar * del userinfo;
3) Cierre la conexión de la base de datos.
Observe que la consulta de lectura mostrará todos los datos de usuario presentes en la tabla userinfo. La tabla consta de las siguientes columnas.
- userId
- username
- Usererage
- userAddress
El resultado también muestra que solo hay un conjunto de datos presente en la tabla.
Ahora, ejecutemos el mismo escenario usando la Clase Java.
Para poder acceder a la Base de datos, el usuario puede elegir entre las diversas opciones de conector disponibles para conectarse a la Base de datos. La mayoría de los conectores de base de datos se distribuyen libremente como archivos «jar». Como estamos usando MySQL como fuente de datos, por lo tanto, estamos obligados a descargar el archivo jar específico de MySQL.
El archivo jar se puede descargar desde: aquí o aquí.
Paso 1: El primer y principal paso es configurar la ruta de compilación del proyecto y agregar «mysql-connector-java-3.1.13-bin».archivo jar» como biblioteca externa.
Paso 2: Cree una clase java llamada «DatabaseTesingDemo».
Paso 3: Copie y pegue el siguiente código en la clase creada en el paso anterior.
Ejemplo de Código
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 salida del código anterior es:
1 shruti 25 Noida
2 shrivastava 55 Mumbai
Variantes de instrucción de lectura
Cláusula Where con una sola condición
String query = » seleccione * desde userinfo donde userId='» + 1 + «‘»;
Conjunto de resultados res = stmt.executeQuery(query);
Salida:
1 shruti 25 Noida
Cláusula Where con múltiples condiciones
String Address =»Mumbai»;
String query = «select * from userinfo where userId='» + 2 + «‘ and userAddress='»+Address+»‘»;
ResultSet res = stmt.executeQuery (query);
Salida:
2 shrivastava 55 Mumbai
Display userId
String query = «select userId from userinfo»;
ResultSet res = stmt.executeQuery (query);
Salida:
1
2
Mostrar ID de usuario con la cláusula where
String Address = «Noida»;
String query = «seleccione ID de usuario,nombre de usuario de userinfo where userAddress='»+Address+»‘»;
ResultSet res = stmt.executeQuery (query);
Salida:
2
shrivastava
Por lo tanto, de la misma manera el usuario puede ejecutar varias consultas en la base de datos.
Con esto, vamos a arrojar algo de luz sobre los métodos de accesibilidad de resultados también.
Métodos de accesibilidad de resultados:
nombre de Método | Descripción |
---|---|
String getString() | Método se utiliza para buscar el tipo de cadena de datos del conjunto de resultados |
int getInt() | Método se utiliza para buscar el tipo de entero de datos del conjunto de resultados |
boolean getBoolean() | Método se utiliza para obtener el valor booleano del conjunto de resultados |
float getFloat() | Método se utiliza para recuperar el flotador tipo de datos del conjunto de resultados |
largo El método getLong () | se utiliza para obtener los datos de tipo largo del conjunto de resultados |
el método short getShort () | se utiliza para obtener los datos de tipo corto del conjunto de resultados |
el método double getDouble() | se utiliza para obtener los datos de tipo doble del conjunto de resultados |
Date getDate() | El método se utiliza para obtener el objeto de tipo de fecha del conjunto de resultados |
Métodos de Navegación de Resultados:
nombre de Método | Descripción |
---|---|
boolean next() | Método se utiliza para desplazarse al siguiente registro en el conjunto de resultados |
boolean anterior() | Método se utiliza para mover al registro anterior en el conjunto de resultados |
booleano (primer) | Método se utiliza para mover al primer registro en el conjunto de resultados |
boolean last() | Método se utiliza para mover al último registro del conjunto de resultados |
boolean el método absoluto (número de fila int) |
se utiliza para moverse al registro específico en el conjunto de resultados |
Conclusión
A través de este tutorial, tratamos de familiarizarlo con el concepto de Pruebas Automatizadas de Bases de datos. Pusimos claramente énfasis en las implicaciones y necesidades técnicas de las pruebas de bases de datos.
Como toda nuestra serie se centró en Selenium, el lector puede ser engañado y puede crear la impresión de que este tutorial enseñaría a realizar pruebas de base de datos usando Selenium, pero como mencioné varias veces antes, cualquier cosa que se encuentre fuera de la periferia de las pruebas de interfaz de usuario, no puede ser manejada por Selenium. Por lo tanto, introducimos la API de Conectividad de base de datos Java (JDBC) para realizar pruebas de base de datos incrustando el código dentro de los scripts de Selenium WebDriver.
JDBC hace posible que la clase java se conecte a la base de datos, recupere datos de la base de datos o, de hecho, realice cualquiera de las operaciones CRUD, manipule los datos resultantes y cierre la conexión.
Por lo tanto, el tutorial constituye la implementación de muestra básica del proceso mencionado anteriormente.
Siguiente Tutorial # 29: Avanzaremos con temas avanzados de Selenio. En el siguiente tutorial, cubriremos la CUADRÍCULA de Selenio, que se usa cuando tiene que realizar pruebas de múltiples navegadores y tiene una gran cantidad de casos de prueba.
Última actualización: 29 de noviembre de 2021