Pasos BD
Este plugin proporciona una serie de pasos para interactuar con una base de datos vía JDBC, facilitando la carga y validación de datos.
RECUERDA
Debido a los muchos motores existentes de bases de datos, este plugin no incluye ningún driver específico. Esto significa que, para funcionar correctamente, es necesario inluir el módulo con el controlador JDBC adecuado.
- Instalación
-
- Definir conexión
- Cambiar conexión
- Ejecutar script
- Ejecutar script (fichero)
- Seleccionar datos
- Seleccionar datos (fichero)
- Insertar datos
- Insertar datos (fichero)
- Eliminar datos
- Eliminar datos (columna)
- Eliminar datos (where)
- Eliminar datos (fichero)
- Vaciar tabla
- Comprobar existencia de datos
- Comprobar existencia de datos (id)
- Comprobar existencia de datos (columna)
- Comprobar existencia de datos (where)
- Comprobar existencia de datos (fichero)
- Comprobar número de datos (tabla)
- Comprobar número de datos (columna)
- Comprobar número de datos (where)
- Comprobar contenido de tabla
Instalación
Incluye el módulo y el controlador(es) JDBC en la sección correspondiente.
es.iti.wakamiti:db-wakamiti-plugin:3.2.0
es.iti.wakamiti:db-wakamiti-plugin:3.2.0
<dependency> <groupId>es.iti.wakamiti</groupId> <artifactId>db-wakamiti-plugin</artifactId> <version>3.2.0</version> </dependency>
<dependency> <groupId>es.iti.wakamiti</groupId> <artifactId>db-wakamiti-plugin</artifactId> <version>3.2.0</version> </dependency>
Configuración
database.connection.url
- Tipo:
string
requerido
Establece la URL de conexión a la base de datos por defecto con esquema JDBC. El driver usado para acceder a la base de datos se determinará a partir del formato de URL indicado.
Ejemplo:
database: connection: url: jdbc:h2:tcp://localhost:9092/~/test
database.connection.username
- Tipo:
string
requerido
Establece el nombre de usuario requerido para conectar a la base de datos por defecto.
Ejemplo:
database: connection: username: test
database.connection.password
- Tipo:
string
requerido
Establece la contraseña requerida para conectar a la base de datos por defecto.
Ejemplo:
database: connection: password: test
database.metadata.schema
- Tipo:
string
Establece manualmente el esquema de base de datos que se usará para recuperar metadatos como claves privadas y/o nulabilidad. Si no se indica, se usará el esquema por defecto que retorne la conexión.
Ejemplo:
database: metadata: schema: TESTDB
database.metadata.catalog
- Tipo:
string
Establece manualmente el catálogo de base de datos (si el motor soporta esta característica) que se usará para recuperar metadatos como claves privadas y/o nulabilidad. Si no se indica, se usará el esquema por defecto que retorne la conexión.
Ejemplo:
database: metadata: catalog: TESTCAT
database.autotrim
- Tipo:
boolean
- Por defecto:
false
Establece si se ignoran los espacios en las comparaciones.
Ejemplo:
database: autotrim: true
database.{alias}...
Establece los prámetros de conexión JDBC y/o los metadatos de una base de datos identificada por un alias. Se pueden establecer tantas conexiones como se desée. La primera base de datos configurada será tomada como la configuración por defecto.
Ejemplo:
database: datasource: db1: connection: url: jdbc:h2:tcp://localhost:9092/~/test username: test1 password: test1 metadata: schema: TESTDB1 catalog: TESTCAT1 autotrim: true db2: connection: url: jdbc:mysql://other.host:3306/test username: test2 password: test2 metadata: schema: TESTDB2 catalog: TESTCAT2
database.csv.format
- Tipo:
string
- Por defecto
DEFAULT
Establece la variante de formato usado a la hora de leer ficheros CSV. Los valores aceptados son directamente los usados por el proyecto Commons CSV (consultar el enlace para una explicación exhaustiva de cada variante). Los posibles valores son:
DEFAULT
INFORMIX_UNLOAD
INFORMIX_UNLOAD_CSV
MYSQL
ORACLE
POSTGRESQL_CSV
POSTGRESQL_TEXT
RFC4180
Ejemplo:
database: csv: format: ORACLE
database.xls.ignoreSheetPattern
- Tipo:
regex
- Por defecto
#.*
Establece la expresión regular usada para determinar qué hojas se deberían ignorar cuando se cargan datos de un fichero XLSX.
Ejemplo:
database: xls: ignoreSheetPattern: //.*
database.nullSymbol
- Tipo:
string
- Por defecto
<null>
Establece el literal usado para marcar una celda específica con el valor correspondiente al NULL
de SQL. Se usa en
cualquier origen de datos (ficheros CSV, XLSX, y tablas embebidas en la definición del test).
Ejemplo:
database: nullSymbol: (null)
database.enableCleanupUponCompletion
- Tipo:
boolean
- Por defecto
false
El comportamiento por defecto del plugin no realiza ninguna operación de limpieza de la base de datos al acabar la ejecución de los tests. Esto es así para poder comprobar resultados manualmente y depurar errores. Los posibles valores son:
false
: no se realizará ninguna acción de limpieza.true
: se forzará a limpiar la base de datos borrando los datos de prueba introducidos durante la ejecución.
Ejemplo:
database: enableCleanupUponCompletion: "true"
Pasos
Definir conexión
la URL de conexión a BBDD {url} usando el usuario {username} y la contraseña {password} (como {alias})
la URL de conexión a BBDD {url} usando el usuario {username} y la contraseña {password} (como {alias})
Configura los parámetros de conexión a la base de datos con el alias especificado. Si no se incluye como {alias}
, se
establecerá como conexión por defecto.
Este paso es equivalente a configurar las propiedades
database.connection.url
, database.connection.username
,
database.connection.password
, database.{alias}...
.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
url |
text obligatorio |
La URL de conexión |
username |
text obligatorio |
Nombre de usuario |
password |
text obligatorio |
Contraseña de usuario |
alias |
text |
Nombre de la conexión |
Ejemplos:
Dada la URL de conexión a BBDD 'jdbc:h2:tcp://localhost:9092/~/TESTDB' usando el usuario 'test' y la contraseña 'test'
Dada la URL de conexión a BBDD 'jdbc:mysql://other.host:3306/test' usando el usuario 'test' y la contraseña 'test' como 'db1'
Cambiar conexión
(que) se usa la conexión ({alias:text}|por defecto)
(que) se usa la conexión ({alias:text}|por defecto)
Cambiar la conexión de base de datos activa a la especificada, o la predeterminada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
alias |
text |
El nombre de la conexión |
Ejemplos:
Cuando se usa la conexión por defecto
Cuando se usa la conexión 'db1'
Ejecutar script
(que) se (ha) ejecuta(do) el siguiente (script|procedimiento) SQL: {script}
(que) se (ha) ejecuta(do) el siguiente (script|procedimiento) SQL: {script}
Ejecuta las sentencias SQL o el procedimiento indicado y recupera los datos insertados o seleccionados como un objeto JSON.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
script |
document obligatorio |
El contenido del script |
Ejemplos:
Cuando se ejecuta el siguiente script SQL:
"""sql
INSERT INTO users (id, first_name) VALUES (1, 'Rosa');
INSERT INTO users (id, first_name) VALUES (2, 'Pepe');
"""
Podría devolver el siguiente resultado:
[ { "id": 1, "first_name": "Rosa" }, { "id": 2, "first_name": "Pepe" } ]
Ejecutar script (fichero)
(que) se (ha) ejecuta(do) el (script|procedimiento) SQL del fichero {script}
(que) se (ha) ejecuta(do) el (script|procedimiento) SQL del fichero {script}
Ejecuta las sentencias SQL o el procedimiento indicado y recupera los datos insertados o seleccionados como un objeto JSON.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
script |
file obligatorio |
Ruta del script |
Ejemplos:
Cuando se ejecuta el script SQL del fichero 'data/script.sql'
Cuando se ejecuta el procedimiento SQL del fichero 'data/procedure.sql'
Seleccionar datos
(se recupera) (el|los) valor(es) de la siguiente consulta SQL: {script}
(se recupera) (el|los) valor(es) de la siguiente consulta SQL: {script}
Recupera los datos de la sentencia SQL especificada como un objeto JSON.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
script |
document obligatorio |
Contenido del script |
Ejemplos:
Dado los valores de la siguiente consulta SQL:
"""
SELECT id, first_name FROM users
"""
Podría devolver el siguiente resultado:
[ { "id": 1, "first_name": "Rosa" }, { "id": 2, "first_name": "Pepe" } ]
Seleccionar datos (fichero)
(se recupera) (el|los) valor(es) de la consulta SQL del fichero {sql}
(se recupera) (el|los) valor(es) de la consulta SQL del fichero {sql}
Recupera los datos de la sentencia SQL especificada como un objeto JSON.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
sql |
file |
Fichero SQL |
Ejemplos:
Dado los valores de la consulta SQL del fichero 'data/select-users.sql'
Insertar datos
se (ha) inserta(do) (lo|el|la|los|las) siguiente(s) * en la tabla de BBDD {word}: {data}
se (ha) inserta(do) (lo|el|la|los|las) siguiente(s) * en la tabla de BBDD {word}: {data}
Inserta las filas indicadas en la tabla y recupera los datos insertados como un objeto JSON.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
word |
word obligatorio |
Nombre de la tabla |
data |
table obligatorio |
Tabla con los datos |
Ejemplos:
Cuando se inserta lo siguiente en la tabla de BBDD USER: | USER | STATE | BLOCKING_DATE | | user1 | 2 | <null> | | user2 | 3 | 2020-02-13 |
Podría devolver el siguiente resultado:
[ { "id": 1, "first_name": "Rosa" }, { "id": 2, "first_name": "Pepe" } ]
Insertar datos (fichero)
se (ha) inserta(do) el contenido del fichero XLS {file} en la base de datos
se (ha) inserta(do) el contenido del fichero XLS {file} en la base de datos
se (ha) inserta(do) el contenido del fichero CSV {file} en la tabla (de BBDD) {table}
se (ha) inserta(do) el contenido del fichero CSV {file} en la tabla (de BBDD) {table}
Inserta las filas contenidas en el fichero XLS o CSV indicado y recupera los datos insertados como un objeto JSON. Si se trata de un fichero XLS, cada hoja representará una tabla y deberá llamarse como tal. Si se trata de un fichero CSV, se deberá indicar el nombre de la tabla en la que se insertarán los datos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
file |
file obligatorio |
Ruta del fichero |
table |
word |
Nombre de la tabla |
Ejemplos:
Cuando se inserta el contenido del fichero XLS 'data/users.xls' en la BBDD
Cuando se ha insertado el contenido del fichero CSV 'data/users.csv' en la tabla USER
Eliminar datos
se (ha) elimina(n|do) (lo|el|la|los|las) siguiente(s) * de la tabla (de BBDD) {table}: {data}
se (ha) elimina(n|do) (lo|el|la|los|las) siguiente(s) * de la tabla (de BBDD) {table}: {data}
Elimina las filas indicadas en la tabla.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word obligatorio |
Nombre de la tabla |
data |
table obligatorio |
Tabla con los datos |
Ejemplos:
Cuando se eliminan los siguientes usuarios de la tabla USER: | USER | STATE | BLOCKING_DATE | | user1 | 2 | <null> | | user2 | 3 | 2020-02-13 |
Eliminar datos (columna)
se (ha) elimina(n|do) * con {column} = {value} de la tabla (de BBDD) {table}
se (ha) elimina(n|do) * con {column} = {value} de la tabla (de BBDD) {table}
Elimina de la tabla las filas que satisfagan la comparación indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
column |
word obligatorio |
Nombre de la columna |
value |
text obligatorio |
Valor de la columna |
table |
word obligatorio |
Nombre de la tabla |
Ejemplos:
Cuando se eliminan los usuarios con STATE = '2' de la tabla USER
Eliminar datos (where)
(que) se (ha) elimina(n|do) * que satisfacen la siguiente cláusula SQL en la tabla (de BBDD) {table}: {where}
(que) se (ha) elimina(n|do) * que satisfacen la siguiente cláusula SQL en la tabla (de BBDD) {table}: {where}
Elimina los registros de la tabla que satisfacen la cláusula WHERE indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word obligatorio |
Nombre de la tabla |
where |
document obligatorio |
Cláusula where |
Ejemplos:
Cuando se eliminan los usuarios que satisfacen la siguiente cláusula SQL en la tabla client:
"""
birth_date < date '2000-01-01'
"""
Eliminar datos (fichero)
se (ha) elimina(do) el contenido del fichero XLS {file} de la base de datos
se (ha) elimina(do) el contenido del fichero XLS {file} de la base de datos
se (ha) elimina(do) el contenido del fichero CSV {file} de la tabla (de BBDD) {table}
se (ha) elimina(do) el contenido del fichero CSV {file} de la tabla (de BBDD) {table}
Elimina las filas contenidas en el fichero XLS o CSV indicado. Si se trata de un fichero XLS, cada hoja representará una tabla y deberá llamarse como tal. Si se trata de un fichero CSV, se deberá indicar el nombre de la tabla en la que se eliminarán los datos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
file |
file obligatorio |
Ruta del fichero |
table |
word |
Nombre de la tabla |
Ejemplos:
Cuando se elimina el contenido del fichero XLS 'data/users.xls' de la BBDD
Cuando se ha eliminado el contenido del fichero CSV 'data/users.csv' de la tabla USER
Vaciar tabla
se limpia la tabla (de BBDD) {word}
se limpia la tabla (de BBDD) {word}
Elimina todos los registros de la tabla.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
word |
word ôbligatorio |
Nombre de la tabla |
Ejemplos:
Cuando se limpia la tabla USERS
Comprobar existencia de datos
(el|los) siguiente(s) registro(s) (no) existe(n) en la tabla (de BBDD) {table}: {data}
(el|los) siguiente(s) registro(s) (no) existe(n) en la tabla (de BBDD) {table}: {data}
Comprueba que todas las filas siguientes existen, o no, en la tabla indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word obligatorio |
Nombre de la tabla |
data |
table obligatorio |
Tabla con los datos |
Ejemplos:
Entonces el siguiente registro existe en la tabla USER: | USER | STATE | BLOCKING_DATE | | user2 | 3 | 2020-02-13 |
Entonces los siguientes registros no existen en la tabla USER: | USER | STATE | BLOCKING_DATE | | user1 | 2 | <null> | | user2 | 3 | 2020-02-13 |
Comprobar existencia de datos (id)
* identificad(o|a|os|as) por {id} (no) existe(n) en la tabla (de BBDD) {table}
* identificad(o|a|os|as) por {id} (no) existe(n) en la tabla (de BBDD) {table}
Comprueba que una fila de la tabla indicada tiene, o no, una clave primaria que coincide con el valor especificado. La tabla debe tener una clave primaria de una sola columna accesible desde los metadatos de la base de datos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
id |
text obligatorio |
Valor de la clave primaria |
table |
word obligatorio |
Nombre de la tabla |
Ejemplos:
Entonces el usuario identificado por 'user1' existe en la tabla USER
Entonces el usuario identificados por 'algo' no existe en la tabla USER
Comprobar existencia de datos (columna)
* con {column} = {value} (no) existe(n) en la tabla (de BBDD) {table}
* con {column} = {value} (no) existe(n) en la tabla (de BBDD) {table}
Comprueba que las filas con el valor especificado en la columna dada existen, o no, en la tabla indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
column |
word obligatorio |
Nombre de la columna |
value |
text obligatorio |
Valor de la columna |
table |
word obligatorio |
Nombre de la tabla |
Ejemplos:
Entonces varios usuarios con STATE = '1' existen en la tabla USER
Entonces los usuarios con STATE = '1' no existen en la tabla USER
Comprobar existencia de datos (where)
* que satisface(n) la siguiente cláusula SQL (no) existe(n) en la tabla de BBDD {table}: {where}
* que satisface(n) la siguiente cláusula SQL (no) existe(n) en la tabla de BBDD {table}: {where}
Comprueba que las filas con los valores especificados en la cláusula dada existen, o no, en la tabla.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word obligatorio |
Nombre de la tabla |
where |
document obligatorio |
Cláusula where |
Ejemplos:
Entonces al menos un usuario que satisface la siguiente cláusula SQL existe en la tabla USER:
"""
STATE IN (2,3) OR BLOCKING_DATE IS NULL
"""
Entonces el usuario que satisface la siguiente cláusula SQL no existe en la tabla USER:
"""
STATE IN (2,3) OR BLOCKING_DATE IS NULL
"""
Comprobar existencia de datos (fichero)
el contenido del fichero XLS {file} existe en la base de datos
el contenido del fichero XLS {file} existe en la base de datos
el contenido del fichero CSV {file} existe en la table (de BBDD) {table}
el contenido del fichero CSV {file} existe en la table (de BBDD) {table}
Comprueba que las filas del archivo XLS o CSV proporcionado existen, o no, en la base de datos. Si se trata de un fichero XLS, cada hoja representará una tabla y deberá nombrarse como tal. Si se trata de un fichero CSV, se indicará el nombre de la tabla donde se comprobarán los datos.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
file |
file obligatorio |
Ruta del fichero |
table |
word |
Nombre de la tabla |
Ejemplos:
Entonces el contenido del fichero XLS 'data/example.xls' existe en la base de datos
Entonces el contenido del fichero CSV 'data/users.csv' no existe en la tabla USER
Comprobar número de datos (tabla)
el número de * que satisfacen (lo|la) siguiente (información) en la tabla de BBDD {table} {matcher}: {data}
el número de * que satisfacen (lo|la) siguiente (información) en la tabla de BBDD {table} {matcher}: {data}
Comprueba que el número de filas que satisfacen los valores indicados en la tabla cumple la comparación numérica indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word obligatorio |
Nombre de la tabla |
matcher |
long-assertion obligatorio |
Comparador numérico |
data |
table obligatorio |
Tabla con los datos |
Ejemplos:
Entonces el número de usuarios que satisfacen lo siguiente en la tabla de BBDD USER es 0: | USER | STATE | BLOCKING_DATE | | user1 | 2 | <null> |
Entonces el número de registros que satisfacen la siguiente información en la tabla USER es mayor que 0: | USER | STATE | BLOCKING_DATE | | user1 | 2 | <null> |
Comprobar número de datos (columna)
el número de * con {column} = {value} en la tabla (de BBDD) {table} {matcher}
el número de * con {column} = {value} en la tabla (de BBDD) {table} {matcher}
Comprueba que el número de filas que satisfacen la condición cumple la comparación numérica indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
column |
word obligatorio |
Nombre de la columna |
value |
text obligatorio |
Valor de la columna |
table |
word obligatorio |
Nombre de la tabla |
matcher |
long-assertion obligatorio |
Comparador numérico |
Ejemplos:
Entonces el número de usuarios con STATE = '1' en la tabla USER es mayor que 5
Comprobar número de datos (where)
el número de * que satisfacen la siguiente cláusula SQL en la tabla (de BBDD) {table} {matcher}: {where}
el número de * que satisfacen la siguiente cláusula SQL en la tabla (de BBDD) {table} {matcher}: {where}
Comprueba que el número de filas que satisfacen la condición cumple la comparación numérica indicada.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
table |
word |
Nombre de la tabla |
matcher |
long-assertion |
Comparador numérico |
where |
document |
Cláusula where |
Ejemplos:
Entonces el número de usuarios que satisfacen la siguiente cláusula SQL en la tabla USER es menor que 3:
"""
STATE IN (2,3) OR BLOCKING_DATE IS NULL
"""
Comprobar contenido de tabla
la tabla (de BBDD) {word} (no) está vacía
la tabla (de BBDD) {word} (no) está vacía
Comprueba que la tabla indicada está vacía, o no.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
word |
word obligatorio |
Nombre de la tabla |
Ejemplos:
Entonces la tabla USER está vacía
Entonces la tabla USER no está vacía
Modos especiales
Algunos pasos pueden ejecutarse con un comportamiento diferente si se definen de las siguientes maneras:
Modo post-ejecución
Al finalizar, * (usando la conexión {alias})
Al finalizar, * (usando la conexión {alias})
El paso se ejecutará una vez finalizado el escenario, independientemente del resultado de la ejecución. Si no se incluye el alias, se utilizará la conexión por defecto.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
alias |
text |
Nombre de la conexión |
Ejemplos:
Al finalizar, se ejecuta el script SQL del fichero 'data/sript.sql'
Al finalizar, se ejecuta el siguiente script SQL usando la conexión 'db1': """ UPDATE AAAA SET STATE = 2 WHERE ID = 1; DELETE FROM BBBB WHERE ID = 2; """
Modo async
* en {duration}
* en {duration}
El paso espera un máximo de la duración indicada hasta que se cumple la condición indicada en el paso para continuar.
Parámetros:
Nombre | Wakamiti type | Descripción |
---|---|---|
duration |
duration obligatorio | Tiempo máximo |
Ejemplos:
Entonces un usuario identificado por '1' existe en la tabla USERS en 10 segundos