Pruebas con Docker

Mientras se realiza el desarrollo o las pruebas de calidad, sería útil poder comprobar nuestro código en diferentes entornos. Por ejemplo, es posible que necesitemos comprobar nuestro código Python entre diferentes versiones de Python, o en diferentes distribuciones de Linux como Fedora, Ubuntu, CentOS, etc. Para esta receta, utilizaremos Flask, que es un microframework para Python (https://www.palletsprojects.com/p/flask/). Utilizaremos el código de ejemplo del repositorio de GitHub de Flask. Elegí esto para mantener las cosas simples, y es más fácil de usar para otras recetas también.

Para esta receta, crearemos imágenes con un contenedor que tenga Python 2.7 y otro con Python 3.7. Luego, utilizaremos código de prueba de Python de ejemplo para ejecutarlo en cada contenedor.

Preparación

Realice las siguientes preparaciones:

  • Como vamos a utilizar el código de ejemplo del repositorio de GitHub de Flask, clonémoslo:
$ cd /tmp
$ git clone https://github.com/pallets/flask
  • Cree un archivo Dockerfile_2.7 con el siguiente contenido y luego construya una imagen a partir de él:
$ cat /tmp/Dockerfile_2.7
FROM python:2.7
RUN pip install flask pytest
ADD flask/ /flask
WORKDIR /flask/examples/tutorial
RUN pip install -e .
CMD ["/usr/local/bin/pytest"]
  • Para construir la imagen python2.7test, ejecute el siguiente comando:
$ docker image build -t python2.7test -f /tmp/Dockerfile_2.7 .
  • De manera similar, cree un Dockerfile con python:3.7 como imagen base y construya la imagen python3.7test:
$ cat /tmp/Dockerfile_3.7
FROM python:3.7
RUN pip install flask pytest
ADD flask/ /flask
WORKDIR /flask/examples/tutorial
RUN pip install -e .
CMD ["/usr/local/bin/pytest"]
  • Para construir la imagen python3.7test, ejecute el siguiente comando:
$ docker image build -t python3.7test -f /tmp/Dockerfile_3.7 .
  • Asegúrese de que ambas imágenes estén creadas:
$ docker image ls

Diagrama

Cómo hacerlo…

Ahora, utilizando las dos imágenes que creamos, ejecutémoslas para ver los resultados.

Para probar con Python 2.7, ejecute el siguiente comando:

$ docker container run python2.7test

Diagrama

De manera similar, para probar con Python 3.7, ejecute el siguiente comando:

$ docker container run python3.7test

Diagrama

Cómo funciona…

Como puede ver en los dos Dockerfiles, antes de ejecutar el comando CMD, que ejecuta el binario pytest, agregamos el código fuente de Flask a la imagen, cambiamos nuestro directorio de trabajo al directorio de ejemplo de la tutoría, /flask/examples/tutorial, e instalamos la aplicación. Así que, tan pronto como el contenedor se inicie, ejecutará el binario pytest en nuestras pruebas.

Hay más…

  • En esta receta, hemos visto cómo probar nuestro código con diferentes versiones de Python. De manera similar, puede elegir diferentes imágenes base de Fedora, CentOS y Ubuntu, y probarlas en diferentes distribuciones de Linux.

  • Si utiliza Jenkins en su entorno, entonces puede utilizar su plugin de Docker para provisionar dinámicamente un esclavo, ejecutar una compilación y desmantelarlo en el host de Docker.

NOTA

Puede encontrar más detalles sobre esto en https://plugins.jenkins.io/docker-plugin.