Para configurar Pipelines con Azure DevOps nos registramos en el siguiente link
https://azure.microsoft.com/es-es/services/devops/pipelines/
Creamos un nuevo proyecto, elegí público para que este disponible
Seleccionamos GitHub
Seleccionamos el repositorio donde tenemos el código en mi caso es CaducaRest
Seleccionamos la opción: ASP .NET Core (.NET Framework) esta opción te configura el pipeline para generar el build de tu proyecto y luego ejecutar el proyecto de pruebas automáticas
Edita la tarea para indicar la versión de .net por lo general a veces las nuevas versiones de .net tardan un poco en estar en Azure Pipelines, pero esto ya no es tan común. Si ves algún error en el pipeline puedes instalar la versión que necesitas.
- task: [email protected]displayName: "Instalar .NET Core 5.0.x"inputs:version: '5.0.x'performMultiLevelLookup: truepackageType: sdk
La parte de pruebas la cambiamos para agregar el nombre de nuestro proyecto de pruebas unitarias.
Agregamos una tarea de .Net Core
Especificamos las siguientes opciones:
Command: Seleccionamos test de este manera ejecutaremos nuestro proyecto de pruebas unitarias.
Path to projects(s): Tecleamos la ruta de nuestro proyecto de pruebas unitarias en este caso es **/xUnit.CaducaRest/.csproj
Arguments: Tecleamos '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/' con esto indicamos que haga el build en release como esta en las variables al inicio. Con la opción collect "Code Coverage" se revisa la cantidad de código que tenemos con casos de prueba unitarios y nos indica en un porcentaje del 0 al 100 que tanto código tenemos probado.
Test run title: puedes poner un título en mi caso fue Unit Test.
El código queda de la siguiente manera:
- task: [email protected]displayName: Testing Unit Testinputs:command: 'test'projects: '**/xUnit.CaducaRest/*.csproj'arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/'testRunTitle: 'Unit Test'
Agrega otro task Publish Code Coverage Results
Code coverage tool: Selecciona Cobertura
Summary File: Es el archivo generado en el paso anterior. Teclea '$(Build.SourcesDirectory)/**/coverage.cobertura.xml'
Da clic en Add.
El código queda:
- task: [email protected]displayName: 'Publish code coverage report'inputs:codeCoverageTool: 'Cobertura'summaryFileLocation: '$(Build.SourcesDirectory)/**/coverage.cobertura.xml'
Y damos clic en Run
Si todo es correcto vemos esta pantalla
Podemos ver los pasos que se están ejecutando
Si todo es correcto vemos esta pantalla
Puedes dar clic en la sección VSTest y verás el resultado de tus pruebas, te llega un correo con el resultado del build
En la parte de Summary te genera un resumen de los Test que pasaron, y la cobertura de código, la cual te indica el porcentaje de código que contiene pruebas automáticas.En el ejemplo solo el 6.11% del código tiene alguna prueba automática
Da clic en Code Coverage para ver el resumen donde por cada archivo indica cuantas lineas han sido probadas. Un buen porcentaje es el 80%. Te marca el archivo que mas riesgo tiene, en este caso es CustomMySQLException. El Cyclomatic complexity indica que tan complejo es tu código ya que tiene muchos if anidados, while, funciones muy largas, entre mayor sea el número es mas difícil de probar y puede ser una señal de que la clase hace demasiadas cosas a la vez.
Si das clic en un archivo ves el resumen
Te marca en verde el código que incluye al menos un un caso de prueba y en rojo lo que no tiene ningún caso de prueba.
Otra opción importante es el mutating testing. Donde se incluyen variaciones a las pruebas. Ejemplo si debes probar una operación de sumar, incluye tests para probar que si cambias el signo de la función sumar por -,/,* y los test deben fallar. Si no fallan tú test esta mal. Puedes ver mas información https://github.com/stryker-mutator/stryker-net
Cambiamos la función Sumar para que reste, le damos commit para ver el error, de esta forma cada vez que realices un commit se ejecutaran las pruebas con Azure DevOps
Si damos clic vemos el detalle
Este a este momento tiene los siguientes precios
El archivo yaml queda de la siguiente forma
# ASP.NET Core (.NET Framework)# Build and test ASP.NET Core projects targeting the full .NET Framework.# Add steps that publish symbols, save build artifacts, and more:# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-coretrigger:- masterpool:vmImage: 'windows-latest'variables:solution: '**/*.sln'buildPlatform: 'Any CPU'buildConfiguration: 'Release'system.debug: falsesteps:- task: [email protected]displayName: "Instalar .NET Core 5.0.x"inputs:version: '5.0.x'performMultiLevelLookup: truepackageType: sdk- script: dotnet build --configuration $(buildConfiguration)displayName: 'Build Project $(buildConfiguration) '- task: [email protected]displayName: Testing Unit Testinputs:command: 'test'projects: '**/xUnit.CaducaRest/*.csproj'arguments: '--configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/'publishTestResults: truetestRunTitle: 'Unit Test'- task: [email protected]displayName: 'Publish code coverage report'inputs:codeCoverageTool: 'Cobertura'summaryFileLocation: '$(Build.SourcesDirectory)/**/coverage.cobertura.xml'