00:00 / 00:00
Encapsulando pruebas de carga en una Github Action propia
Ahora que ya sabemos como ejecutar una prueba de carga, lo siguiente sería encapsularlo en una Github Action, así, cada vez que necesitemos ejecutarlo no tenemos que repetir manualmente los pasos para compilar la imagen de Docker y crear el contenedor, sino que directamente use la acción que está preparada para ello.
Manos a la obra
Se pueden crear acciones propias de diferente forma:
- Utilizando Docker
- Utilizando Javascript
- A partir de una composición de pasos a ejecutar en una acción.
La documentación oficial la puedes encontrar en el siguiente enlace:
En nuestro caso, vamos a aprovechar el fichero Dockerfile que hemos creado anteriormente y simplemente vamos a proveer los parámetros para ejecutar la prueba desde fuera.
Para ello, crearemos una carpeta llamada load-test-action
y dentro el fichero action.yml
para definir nuestra propia acción que ejecute el fichero Dockerfile:
./load-test-action/action.yml
name: Acción Apache Bench
description: Ejecuta pruebas de carga usando Apache Bench
inputs:
url:
description: 'URL donde realizar las pruebas.'
required: true
number-of-requests:
description: 'Número de peticiones en total.'
required: false
default: '1000'
concurrency:
description: 'Número de peticiones concurrentes.'
required: false
default: '50'
runs:
using: 'docker'
image: 'Dockerfile'
Le añadimos un nombre y una descripción, ambos campos requeridos.
Incluimos los parámetros necesarios para ejecutar las pruebas
Y por último le indicamos que lo ejecute utilizando Docker mediante, el fichero Dockerfile
Antes de actualizar el fichero Dockerfile para recoger los inputs, vamos
a hacer un pequeño inciso. Por defecto, Github crea variables de entorno
por cada input que añadimos a la acción con el formato INPUT<VARIABLE_NAME>_.
Lo que significa que transformará el nombre de tu variable a mayúsculas y los
espacios los transformará en guión bajo (_
), por ejemplo:
url -> $INPUT_URL
concurrency -> $INPUT_CONCURRENCY
Sin embargo, los guiones no los transformará en guión bajo y la variable
number-of-requests
quedaría con el siguiente formato:
number-of-requests -> $INPUT_NUMBER-OF-REQUESTS
Si queremos que todas sigan el mismo formato, podemos crearla nosotros mismos:
./load-test-action/action.yml
...
runs:
using: 'docker'
image: 'Dockerfile'
+ env:
+ INPUT_NUMBER_OF_REQUESTS: ${{ inputs.number-of-requests }}
Por último, movemos el fichero Dockerfile también dentro de la carpeta load-test-action
ya que el fichero anterior necesita encontrarlo en el mismo directorio y lo
actualizamos:
./load-test-action/Dockerfile
FROM alpine:latest
RUN apk add --no-cache apache2-utils
- ENTRYPOINT ab -n 1000 -c 50 https://www.basefactor.com/
+ ENTRYPOINT ab -n $INPUT_NUMBER_OF_REQUESTS -c $INPUT_CONCURRENCY $INPUT_URL
Con estos pasos, hemos encapsulado un proceso para ejecutar pruebas de rendimiento con Apache Bench y Docker en una acción de Github Actions. Ya estamos preparados para poder utilizarla y ejecutarla en un flujo de trabajo de Github.
¿Te gusta el mundo Devops?
En Lemoncode impartimos un Bootcamp Devops Online, en él encontrarás todos los recursos necesarios: clases de los mejores profesionales del sector, tutorías en cuanto las necesites y ejercicios para desarrollar lo aprendido en los distintos módulos. Si quieres saber más puedes pinchar aquí para más información sobre este Bootcamp Devops.