Tutorial sobre pruebas de integración con Bitbucket Pipelines

Aprende a ejecutar pruebas de integración con Bitbucket Pipelines poniendo en marcha varios servicios en contenedores Docker independientes en un canal.

Sten Pittet Sten Pittet

Las pruebas son una parte esencial de la integración y la entrega continuas. Además, si practicas la implementación continua, serán la última línea de defensa contra errores antes de que los cambios se publiquen para el cliente. Las pruebas unitarias que validan métodos y clases individuales son un gran punto de partida para prevenir incidencias, pero también deberás ejecutar pruebas de integración para garantizar que los módulos que utiliza la aplicación (servidor de aplicaciones, base de datos, caché) interactúan correctamente entre sí. En este tutorial, aprenderás a ejecutar pruebas de integración con Bitbucket Pipelines poniendo en marcha varios servicios en contenedores Docker independientes en una canalización.

Requisitos

Paso 1: Ejecuta la aplicación de muestra de forma local

Utilizaremos una aplicación básica Node.js que muestra un mensaje en la página de inicio y registra visitas en una base de datos. Para centrarte en la configuración de Bitbucket Pipelines, puedes clonar la aplicación desde tu terminal.

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

Ahora, ve a tu repositorio local y ejecuta npm install para instalar las dependencias que requiere la aplicación.

cd bitbucket-pipelines-services-tutorial/ npm install

Antes de ejecutar la aplicación, tendremos que iniciar una nueva instancia MongoDB. Gracias a Docker, puedes hacerlo fácilmente desde tu terminal.

docker run --name mongodb -d -p 27017:27017 mongo

A continuación, inicia la aplicación y ve a http://localhost:3000 para verlo en acción.

npm start

Puedes ir a http://localhost:3000/visits para comprobar que se ha registrado una visita en la base de datos.

Finalmente, asegurémonos de que las pruebas se están realizando satisfactoriamente de forma local mediante la prueba de comando npm. Verás dos pruebas completadas tras ejecutar ese comando.

npm test

Esta aplicación de muestra está ejecutando dos pruebas diferentes:

  • Una prueba que verifica que la aplicación muestra Hello World en la página de inicio.
  • Una prueba que comprueba si se registra una nueva visita en la base de datos cada vez que alguien accede a la página de inicio.

La primera prueba se pasa aunque la base de datos esté inactiva, pero la segunda es una prueba de integración que comprueba que la aplicación web interactúa correctamente con el servidor de base de datos. También podría considerarse una prueba funcional, ya que verifica algunos de los requisitos de negocio de la aplicación. Puedes obtener más información sobre los diferentes tipos de pruebas en nuestra guía.

Ahora veremos cómo puedes utilizar Bitbucket Pipelines para automatizar las pruebas de la aplicación y configurarlas para que funcionen bien con una base de datos.

Paso 2: Ejecuta pruebas automáticamente con Bitbucket Pipelines

Para empezar, crea un nuevo repositorio en tu cuenta de Bitbucket y actualiza la URL remota para que el origen apunte a tu repositorio de Bitbucket.

git remote set-url origin git@bitbucket.org:<my account>/<my repository>.git git push origin main 

Ve a la sección [Pipelines] del repositorio y habilita [Bitbucket Pipelines].

Puedes usar la plantilla JavaScript predeterminada de la siguiente pantalla. Ya tendrás los comandos npm test y npm install que necesitas para instalar dependencias y ejecutar el conjunto de pruebas.

No cambies nada en la configuración YML y confirma el archivo bitbucket-pipelines.yml. Falta el servicio de base de datos, pero lo añadiremos más adelante.

Cuando confirmes el archivo, pasarás a la sección [Pipelines] del repositorio, donde verás tu primera canalización en curso. La canalización fallará porque la segunda prueba no se puede ejecutar correctamente sin una conexión a la base de datos. Si haces clic en la canalización, deberías ver una pantalla parecida a la de abajo, que te indicará que una prueba está superada y una ha fallado.

En la siguiente sección, añadiremos una nueva definición de servicio a la configuración de Pipelines para resolver el problema.

Paso 3: Añade una definición de servicio para la base de datos

Con Bitbucket Pipelines puedes ejecutar hasta tres contenedores Docker extra además de la aplicación principal que se ejecute en una canalización. Puedes utilizar estos contenedores para ejecutar servicios como un almacén de datos, una herramienta de análisis o cualquier servicio de terceros que tu aplicación necesite para completar la canalización. En nuestro caso, utilizaremos un contenedor de servicio independiente para ejecutar MongoDB.

Ve a la sección de origen del repositorio para ver la lista de archivos.

Haz clic en el archivo de configuración bitbucket-pipelines.yml para acceder a él. Verás un botón de edición en la esquina superior derecha con el que podrás editar el archivo y confirmar directamente desde el navegador.

Hay que añadir una definición de servicio para nuestra base de datos en la parte inferior del archivo de configuración.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test definitions:   services:     database:       image: mongo  

En el caso de MongoDB, no necesitamos hacer ajustes de configuración extra en la definición de imagen; sin embargo, con algunas imágenes de Docker para almacenes de datos y servicios, puede ser necesario especificar variables de entorno. Puedes encontrar una lista de ejemplos de bases de datos en la documentación de Bitbucket Pipelines.

Antes de confirmar el archivo, añade el nuevo servicio al paso que está ejecutando las pruebas. La configuración final de Pipelines debe ser como la de este código.

bitbucket-pipelines.yml

# This is a sample build configuration for Javascript (Node.js). # Check our guides at https://confluence.atlassian.com/x/14UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: node:4.6.0   pipelines:   default:     - step:         script: # Modify the commands below to build your repository.           - npm install           - npm test         services:           - database definitions:   services:     database:       image: mongo

Ve a la sección [Pipelines] después de confirmar el archivo para ver la canalización en curso. Normalmente, debería completarse correctamente.

Puedes hacer clic en la pestaña de base de datos del panel de registros para ver los registros del contenedor MongoDB.

¡Eso es todo! Ahora ya sabes añadir servicios a tu canalización para ejecutar pruebas de integración. Recuerda leer la documentación para obtener más información sobre cómo utilizar estos servicios.