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.




