Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Cómo ejecutar unit test con Azure usando Integración continua

En posts anteriores vimos cómo trabajar con entrega continua en Azure y cómo personalizar el build con Kudu. Vamos a utilizar esta combinación para ejecutar nuestras pruebas unitarias automáticamente cuando hacemos push en nuestro repositorio y si fallan evitar que se despliegue la aplicación.

Paso a paso

Primero necesitamos un repositorio, en este caso he utilizado github, y después creamos un sitio web en Azure y lo conectamos al repositorio (estos pasos están mejor detallados en este post)

image

Una vez conectado y con nuestro proyecto de test listo (en este caso utilicé MSTest, es decir el que viene incluído en Visual Studio) lo que tenemos que hacer es crear el archivo .deployment para personalizar el build.

El archivo .deployment

En este archivo no hacemos más que indicar que el comando a ejecutar va a estar en un .bat (podemos usar powebshell también), de este modo

[config] 
command = deploy.cmd 

Luego, en el archivo "deploy.cmd" indicamos lo siguiente

REM restauramos los paquetes nuget
cd webapp1
nuget restore
REM Compilamos el proyecto web
"%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\WebApp1\WebApp1\WebApp1.csproj"
REM Compilamos el proyecto de test
"%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\WebApp1\WebApp1.Tests\WebApp1.Tests.csproj"
REM ejecutamos los test
vstest.console.exe "%DEPLOYMENT_SOURCE%\WebApp1\WebApp1.Tests\bin\Debug\WebApp1.Tests.dll"

Esto es muy sencillo, Kudu nos permite acceder a variables propias para acceder, por ejemplo, al directorio de MSBuild (%MSBUILD_PATH%) y del proyecto (%DEPLOYMENT_SOURCE%), después sólo indicamos la ubicación de los .csproj y listo.

El truco está en la línea final vstest.console.exe es el ejecutable incluído desde Visual Studio 2012 que nos permite correr los test desde la consola, entonces simplemente lo ejecutamos.

Viendo los resultados en Azure

image

Y si hacemos click en “View Log” podemos ver el resultado de los tests

image

Y por supuesto, hacemos fallar un test y esto es lo que ocurre

image

Falla, y el log nos indica que fue el test que modificamos

image

Mágico, nos leemos

Loading