3. Agenda
● Revisar conceptos
○ Pruebas de integración
○ Docker
○ Azure DevOps
● Consideraciones
● Detalles de implementación
4. Meta
Correr las pruebas sobre una base de datos que se crea al iniciar las pruebas, y
que al terminarlas la base de datos se borra.
5. ¿Qué son las pruebas de integración?
Es la fase de pruebas de software en la que módulos individuales de software son
combinados y probados como un grupo.
Controlador => Command/Query (CQRS) => Repositorio => Base de datos
6. ¿Qué es Docker?
Docker es una herramienta diseñada para hacer más fácil la creación, despliegue
(deploy) y ejecución de aplicaciones usando contenedores.
Es como una máquina virtual (VM) pero más ligera. Utiliza virtualización.
7. Diferencias entre Máquina Virtual y Contenedores
Máquina Virtual Contenedor
Pesadas (en cuanto a recursos) Ligeras
Desempeño limitado Desempeño nativo
Cada MV corre en su propio sistema
operativo
Todos los contenedores comparten el
sistema operativo anfitrión (host OS)
Virtualización a nivel de hardware Virtualización a nivel de software
Pueden requerir minutos para iniciar Inician en milisegundos
Asignan la memoria requerida Requieren menos espacio de memoria
Totalmente aislada y más segura Aislamiento a nivel de proceso,
posiblemente menos seguro
8. Ejemplo
docker run -it ubuntu
cat /etc/issue
docker run --name my_sqlserver -d -p 15435:1433 -e
"SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y"
mcr.microsoft.com/mssql/server:2019-latest
9. Dockerfile
Docker puede crear imágenes automáticamente leyendo las instrucciones de un
archivo llamado Dockerfile. Un archivo Dockerfile es un archivo de texto que
contiene todos los comandos que un usuario podría ejecutar en la línea de
comandos para crear una imagen.
10. Ejemplo
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
WORKDIR /src
RUN dotnet restore "Contoso.Web/Contoso.Web.csproj"
COPY /src/Contoso.Web Contoso.Web/
RUN dotnet build "Contoso.Web.csproj" -c Release -o /app
RUN dotnet publish "Contoso.Web.csproj" -c Release -o /app/publish
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Contoso.Web.dll"]
11. ¿Qué es Azure DevOps?
Un ambiente de integración continua y despliegue continuo (CI/CD)
12. Consideraciones de esta implementación
DevOps usa Linux 100% (Ubuntu)
SQL Server es necesario (versión Linux)
Se utiliza Roundhouse (herramienta de migración de base de datos)
13. Configuración del ambiente en Azure DevOps
¿Cuáles son los pasos necesarios para correr pruebas de integración usando
Docker en Azure DevOps?
1) Crear una imagen en base a un Dockerfile
2) Correr un contenedor con la imagen creada
3) Configurar DevOps para que corra las pruebas de integración
14. Azure DevOps
Dockerfile image
Dockerfile
Correr SQL Server
Restaurar base de
datos
Correr migraciones
de base de datos
Docker container
SQL Server
Tarea de Azure corre
las pruebas
Compila
docker
build
Corre
docker
run
dotnet
test
15. Detalles de implementación
docker build -t contoso_sqlserver --file Dockerfile .
docker run --name contoso_sqlserver -d -p 1433:1433 -e
"SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y" contoso_sqlserver
dotnet test
17. Atrás de escenas > compilar la imagen
Instalar .NET Core
Instalar SQL Server
Copiar el script para restaurar la base de datos
Copiar el script para instalar roundhouse
Copiar el script para correr las migraciones de base de datos
18. Atrás de escenas > correr el contenedor
Correr el contenedor exponiendo el puerto 1433
Esperar uno o dos minutos antes de continuar con la restauración de BD
Se ejecutan los siguientes scripts:
● para restaurar la base de datos
● para instalar Roundhouse
● para correr migraciones de base de datos
19. Atrás de escenas > pruebas de integración
Existen 2 opciones:
● dotnet test
● dotnet vstest