Na imagem abaixo temos um exemplo de execução de um pipeline do Azure DevOps automatizando testes (com Postman + Newman) de uma API REST criada com .NET 7 + ASPNET Core e que faz uso do SQL Server (em um container Docker) + Migrations do Entity Framework Core. Incluí aqui também a geração de um relatório HTML com os resultados dos testes.
Demonstrei esta solução (além de outros 2 exemplos com PostgreSQL e MySQL) em uma live recente do Canal .NET. A gravação pode ser assistida no YouTube:
A versão que faz uso do PostgreSQL foi também tema de outro artigo publicado neste blog (muitos detalhes do pipeline para SQL Server são idênticos):
Automatizando Testes de Integração: um exemplo com Azure DevOps, PostgreSQL, Postman e .NET 7
Vale ressaltar ainda que utilizei um virtual environment baseado em Linux(Ubuntu 22.04), o qual conta com dezenas de ferramentas pré-instaladas (sqlcmd — linha de comando do SQL Server, Newman/Postman e o runtime Docker).
Na listagem a seguir está o código com a implementação deste pipeline:
igger: |
– main |
resources: |
containers: |
– container: sqlserver |
image: mcr.microsoft.com/mssql/server:2022-latest |
networks: |
– testes |
env: |
SA_PASSWORD: SqlServer2022! |
ACCEPT_EULA: Y |
MSSQL_PID: Developer |
ports: |
– 1433:1433 |
variables: |
# Agent VM image name |
vmImageName: ‘ubuntu-latest‘ |
# Variáveis para execução dos testes de integração |
File_Log_Execution_WebApp: ‘log-execution-restapi.log‘ |
Path_Project: ‘./APISuporte‘ |
Dll_Project: ‘APISuporte.dll‘ |
Path_Tests: ‘./Tests‘ |
Collection_Postman: ‘ChamadosSuporte.postman_collection.json‘ |
Iterations: 10 |
BaseSuporteConnectionString: ‘Server=127.0.0.1,1433;Database=BaseSuporte;User Id=sa;Password=SqlServer2022!;TrustServerCertificate=True;‘ |
appsettings_Path: ‘./APISuporte/appsettings.json‘ |
stages: |
– stage: Tests |
displayName: Tests stage |
jobs: |
– job: Tests |
displayName: Tests |
pool: |
vmImage: $(vmImageName) |
services: |
sqlserver: sqlserver |
steps: |
– script: | |
docker images |
docker container ls |
displayName: Exibir imagens e container em execução |
– script: | |
cd /opt/mssql-tools/bin/ |
ls |
sleep 10s |
sqlcmd -S “127.0.0.1,1433” -U sa -P SqlServer2022! -d master -Q “CREATE DATABASE BaseSuporte” |
displayName: Criar banco basesuporte |
– task: replacetokens@5 |
inputs: |
targetFiles: ‘$(appsettings_Path)‘ |
encoding: ‘auto‘ |
tokenPattern: ‘default‘ |
writeBOM: true |
actionOnMissing: ‘warn‘ |
keepToken: false |
actionOnNoFiles: ‘continue‘ |
enableTransforms: false |
enableRecursion: false |
useLegacyPattern: false |
defaultValue: ‘$(BaseSuporteConnectionString)‘ |
enableTelemetry: true |
displayName: Configurar a string de conexão do SQL Server no appsettings.json |
– script: cat $(appsettings_Path) |
displayName: Exibir conteúdo do appsettings.json |
– script: | |
echo ‘*** SDKs do .NET intalados ***’ |
dotnet –list-sdks |
displayName: Exibir versoes instaladas do .NET SDK |
– task: UseDotNet@2 |
inputs: |
packageType: ‘sdk‘ |
version: ‘7.0.400‘ |
displayName: Instalar SDK do .NET 7.0.400 |
– script: | |
echo ‘*** Versão assumida como default para o .NET ***’ |
dotnet –version |
echo ‘*** Instalar EF Core Tools ***’ |
dotnet tool install –global dotnet-ef |
dotnet ef |
displayName: Instalar EF Core Tools |
– script: | |
cd $(Path_Project) |
dotnet ef migrations add IntegrationTests |
dotnet ef database update |
displayName: Executar Migrations criando a tabela de Chamados |
– script: | |
dotnet publish $(Path_Project) -c Release -o app |
cd ./app |
nohup dotnet $(Dll_Project) > $(File_Log_Execution_WebApp) 2>&1 & |
echo ‘Aguardando a inicialização da aplicação a ser testada…’ |
sleep 10s |
displayName: Executar a aplicação a ser testada em background (nohup) |
env: |
ASPNETCORE_URLS: ‘http://localhost:5000’ |
– script: | |
echo “** Versão Global do Newman **” |
newman -v |
npm install newman-reporter-htmlextra@1.22.11 |
npm install newman-reporter-junitfullreport@1.0.4 |
displayName: Instalar packages newman-reporter-htmlextra e newman-reporter-junitfullreport |
condition: always() |
– script: | |
cd $(Path_Tests) |
npx newman run $(Collection_Postman) -n $(Iterations) -r cli,htmlextra,junitfullreport |
displayName: Executar e gerar resultados em HTML e XML dos testes da API REST com Newman |
condition: always() |
– script: | |
cd $(Path_Tests)/newman |
ls |
displayName: Listar arquivos gerados após testes da API REST com Newman |
condition: always() |
– script: | |
cd /opt/mssql-tools/bin/ |
sqlcmd -S “127.0.0.1,1433” -U sa -P SqlServer2022! -d master -Q “USE BaseSuporte; SELECT * FROM dbo.Chamados;” |
condition: always() |
displayName: Exibir registros criados na base de dados |
– task: PublishTestResults@2 |
inputs: |
testResultsFormat: ‘JUnit‘ |
testResultsFiles: ‘**/newman/*.xml‘ |
searchFolder: ‘$(Build.SourcesDirectory)‘ |
displayName: Publicar sumário dos testes com base no XML gerado |
condition: always() |
– task: UploadPostmanHtmlReport@1 |
displayName: Publicar relatório em HTML com resultados dos testes da API REST com Newman |
inputs: |
cwd: ‘$(System.DefaultWorkingDirectory)/$(Path_Tests)‘ |
condition: always() |
– script: | |
cd ./app |
cat $(File_Log_Execution_WebApp) |
displayName: Exibir log de execução da aplicação testada |
condition: Always() |
Merecem destaque os seguintes pontos:
- Nas linhas 4 a 15 estão as configurações para uso do container do SQL Server (ativado para o stage Tests nas linhas 39 e 40);
- No step que inclui as linhas 116 a 120 o sqlcmd foi utilizado, de forma a exibir os registros gerados durante a execução dos testes da API REST (via Collection do Postman).
Este pipeline foi disponibilizado no meu GitHub:
Já o repositório com a aplicação + testes gerados via Postman pode ser acessado por meio do link:
*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.