Utiliza utPLSQL para escribir y ejecutar pruebas unitarias para PL/SQL
El marco utPLSQL de código abierto es la forma más popular de realizar pruebas unitarias de código PL/SQL. Las pruebas son fáciles de escribir, de ejecutar y de automatizar: una combinación convincente que inspira a los miembros del equipo a crear muchas pruebas.
Descarga e instala el marco utPLSQL
Después de descargar el archivo utPLSQL.zip para la última versión de la página de lanzamientos de GitHub de utPLSQL, descomprime y ejecuta el script install_headless.sql como usuario DBA para la instalación más típica.
Esto asegura que el motor de pruebas utPLSQL vive en su propio esquema (UT3), es utilizable por todos los demás esquemas de la base de datos y mantiene una clara separación de los demás objetos del esquema de base de datos y de tu propia aplicación con los objetos propios de utPLSQL. Mira la Guía de instalación para una explicación de otras formas en que se puede instalar.
Define las pruebas utilizando paquetes PL/SQL con comentarios de anotaciones
Un conjunto de pruebas es un grupo de pruebas relacionadas.
Estas se definen creando una especificación de paquete PL/SQL que identifica qué procedimientos son casos de prueba utilizando comentarios especiales como anotaciones. Estos comentarios incluyen un signo de porcentaje (%) justo después del guión doble, seguido inmediatamente por el nombre de la anotación.
Por ejemplo, esta es la anotación para asignar un nombre descriptivo al paquete del conjunto de pruebas. Ten en cuenta que una línea en blanco la sigue. ¡Es importante!
--%suite(APEX Apps Pruebas Persona)
La anotación que precede a un procedimiento para identificarlo como caso de prueba es:
--%test
Otras anotaciones utilizadas con frecuencia incluyen:
- beforeall para la configuración de la suite y afterall para la limpieza de la suite
- beforeach para la configuración de la prueba y aftereach para la limpieza de la prueba
- rollback para definir el comportamiento de reversión de la suite o prueba
La siguiente especificación del paquete PL/SQL define un conjunto de pruebas con dos pruebas:
create or replace package ut_persona_pkg is
--%suite(APEX Apps Pruebas Persona)
--%test
procedure probar_validar_fecha_no_en_el_futuro;
--%test
procedure probar_validar_numero_telefono;
end;
Implementar pruebas en el cuerpo del paquete PL/SQL
Para implementar un conjunto de pruebas, escribiremos los cuerpos de los procedimientos definidos en la especificación del paquete PL/SQL. El cuerpo del paquete que se muestra a continuación exhibe dos procedimientos de prueba definidos por las anotaciones --%test anteriores.
Los procedimientos del caso de prueba usan la función ut.expect() de utPLSQL y las funciones encadenadas to_be_true(), to_be_false() y to_be_null() para afirmar los valores esperados que deberían tener diferentes expresiones.
Estos son sólo tres ejemplos de muchas de estas funciones to_be_*() disponibles.
La prueba tiene éxito si todas sus afirmaciones son verdaderas y falla si alguna es falsa.
procedure probar_validar_fecha_no_en_el_futuro is
v_mañana date: = sysdate + 1;
begin
ut.expect(persona_pkg.validar_fecha_no_en_el_futuro(v_mañana)).to_be_false();
end;
procedure probar_validar_numero_telefono is
begin
ut.expect(persona_pkg.validar_telefono('(123) 456-7899')).to_be_true();
ut.expect(persona_pkg.validar_telefono('1234567890')).to_be_false();
ut.expect(persona_pkg.validar_telefono('')).to_be_null();
ut.expect(persona_pkg.validar_telefono(null)).to_be_null();
end;
end;
Ejecuta pruebas para garantizar que la funcionalidad de la aplicación nunca se vuelva para atrás
Puedes ejecutar todos los conjuntos de pruebas en utPLSQL definidos en el esquema de base de datos actual utilizando el procedimiento ut.run()
Puedes usarlo directamente desde la ventana de comandos SQL de APEX de la siguiente manera:
ut.run();
end;
Alternativamente, desde la línea de comando puedes usar SQLcl para ejecutarlos de esta forma:
SQL> set serveroutput on
SQL> exec ut.run
Los resultados se imprimen en la consola así:
probar_validar_fecha_no_en_el_futuro [.002 seg]
probar_validar_numero_telefono [.002 seg]
Finalizado en .018424 segundos
2 pruebas, 0 fallidas, 0 con errores, 0 deshabilitadas, 0 advertencia(s)
El marco utPLSQL también ofrece una conveniente utilidad de línea de comandos utplsql para ejecutar pruebas.
También proporciona formateadores opcionales para producir los resultados de sus pruebas en un formato popular que varias soluciones de automatización de compilación como Jenkins y Oracle VB Studio pueden convertir en páginas HTML.
El siguiente ejemplo ejecuta las pruebas unitarias y almacena los resultados de las pruebas con formato XML en un archivo results.xml en el directorio actual.
Observa el argumento opcional ut_junit_reporter() que es pasado al procedimiento ut.run()
$ sql username/password@host:puerto/servicio
SQL> set feedback off
SQL> spool results.xml
SQL> exec ut.run(ut_junit_reporter())
SQL> spool off
Mide la cobertura del código para mejorar tus pruebas con el tiempo
El marco utPLSQL viene con un motor de informes de cobertura de código incorporado.
Simplemente usando un formateador de pruebas diferente podemos ver qué tan bien se están ejecutando nuestras pruebas unitarias según las diferentes rutas de código en la lógica de negocios PL/SQL.
En el siguiente ejemplo, el ut_coverage_html_reporter() produce una página HTML que muestra la cobertura del código de las pruebas unitarias.
SQL> set serveroutput on
SQL> set feedback off
SQL> spool coverage.html
SQL> exec ut.run(ut_coverage_html_reporter())
SQL> spool off
El resultado del informe para nuestro sencillo conjunto de dos casos de prueba se parece a la Figura 1.
Figura 1: Informe Resumen de Cobertura de código con utlPLSQL
Al hacer clic en el nombre de una unidad de programa PL/SQL en el informe de cobertura de código, como el paquete person_pkg, podemos ver exactamente qué líneas han ejercido las pruebas unitarias y, lo que es más importante, qué líneas no han sido cubiertas.
Podemos ver por el resaltado gris en la Figura 2 que ninguna prueba unitaria invocó la función validar_integer(). Esto identifica una oportunidad para agregar un nuevo caso de prueba y mejorar la cobertura general del código para nuestra aplicación.
Figura 2: Línea de detalle de cobertura para una unidad de programa con cobertura de codigo con utlPLSQL
En la proxima entrega de la saga veremos cómo realizar pruebas de la interfaz de nuestras aplicaciones APEX utilizando Cypress UI, una herramienta de prueba gratuita y de codigo abierto complementando las pruebas unitarias.
Juntos, creamos las aplicaciones del futuro!
Mi nombre es José Preda.
* José es Analista de Sistemas e Ingeniero de Software con especializaciones en tecnologías de Oracle, Microsoft, redes, infraestructura tecnológica y gestión de recursos humanos. Posee más de 30 años de experiencia en el área de tecnología, es de Paraguay, vive y trabaja en San Luis, Argentina. Fue consultor, capacitador y soporte técnico para Base de Datos y herramientas de Oracle, desde el año 2013 es miembro activo del Grupo de Usuarios Oracle de Argentina del cual es miembro del directorio desde el año 2023. Es CEO de su propia Consultora: Soft San Luis, una startup especializada en brindar formación profesional, consultoría, mentoría y soluciones con tecnología Oracle y Oracle APEX a empresas, equipos de desarrollo de consultoras y a particulares. En 2024 ha sido reconocido como Oracle ACE Associate por la Corporación Oracle por sus contribuciones a la Comunidad de Usuarios de Tecnologías de Oracle
Comentarios
Publicar un comentario