Automatizando testes de APIs REST com Postman + Newman

Renato Groffe
6 min readApr 19, 2021

--

Em um artigo anterior abordei a implementação de testes automatizados de APIs REST, fazendo uso para isto do .NET 5 e de frameworks como xUnit, Refit e Fluent Assertions:

Testes de APIs REST com .NET 5, xUnit, Refit e Fluent Assertions

Embora totalmente funcional, a abordagem que adotei neste post permaneceu presa à plataforma .NET e a todo ferramental concebido para a mesma. E se pudéssemos então ir além disso?

O Postman é hoje uma das principais ferramentas gráficas quando lembramos de testar nossas APIs. Multiplataforma, gratuito e com uma interface fácil de utilizar, conta ainda com recursos sofisticados como Collections para a criação de roteiros para testes automatizados.

Dentro de uma Collection podemos definir uma sequência com diferentes requisições HTTP, manipular tokens de acesso, declarar variáveis e nos valer até mesmo de arquivos de dados contendo conjuntos de valores representando diferentes casos de validações. A codificação dos testes será feita em JavaScript, com o próprio Postman oferecendo um conjunto de funcionalidades equiparáveis a frameworks de testes como xUnit em .NET e JUnit em Java (porém com muito mais simplicidade!).

Diante de todas essas possibilidades chegamos a um novo questionamento… E se fosse possível executar testes criados com o Postman na linha de comando, abrindo assim caminho para a utilização dos mesmos em processos de CI/CD dentro de soluções como Azure DevOps e GitHub Actions?

A resposta a essa nova pergunta está na ferramenta conhecida como Newman, uma alternativa oferecida pelo próprio Postman para a execução de Collections a partir da linha de comando. Virtual environments do Azure DevOps e do GitHub Actions já contam com o Newman pré-instalado, o que em muito facilita a implementação/execução de pipelines/workflows de automação.

Neste novo post trago um exemplo de implementação e execução automatizados de testes de APIs REST com Postman + Newman, partindo de uma API REST criada com .NET 5 + ASP.NET Core e de um workflow do GitHub Actions para build/deployment com containers + Azure App Service.

E aproveito este espaço para um convite…

No dia 28/04/2021 (quarta) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no Canal .NET.

Nesta live será demonstrado como podemos construir testes de integração sem grandes adversidades, automatizando ainda a execução destes em processos de CI/CD com Azure DevOps e GitHub Actions. Ao longo da apresentação está previsto o uso de tecnologias como .NET, xUnit, Visual Studio 2019, Apache Kafka, MongoDB, Kubernetes e serviços do Microsoft Azure.

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-automacao-testes-integracao

Vídeo e exemplo utilizado

Em uma live recente do Canal .NET abordei o uso do Postman e do Newman no teste de APIs, com a gravação já disponível para ser assistida gratuitamente no YouTube:

Recomendo fortemente a você que está lendo esse artigo para que veja o conteúdo da live, já que expliquei em detalhes o uso dos diferentes recursos aqui indicados.

O projeto que serviu de exemplo foi disponibilizado como um repositório no GitHub:

.NET 5 + ASP.NET Core + Dockerfile + Testes em Postman + API REST para conversão de temperaturas

Constam neste repositório os diretórios:

  • APITemperatura, com a API REST criada em .NET 5 + ASP.NET Core de conversão de temperaturas de Fahrenheint para os valores equivalentes nas escalas Celsius e Kelvin;
  • Tests, com os arquivos ConversaoTemperaturas.postman_collection.json (contendo o script corresponde à Collection criada com o Postman) e testes.json (valores possíveis para cada caso de teste a ser executado através do Newman).

Alguns detalhes sobre a montagem da Collection no Postman

Na imagem a seguir podemos observar a Collection ConversaoTemperaturas já criada no Postman:

Em Variables estão as variáveis que servirão de base para a execução da Collection.

As diferentes validações foram definidas em Tests, por meio do código indicado na seguinte listagem:

O objeto indicado por pm conta com o método test, em que são especificadas as validações. A manipulação de dados devolvidos por uma API é possível através da propriedade response em pm.

Para associar os dados de um arquivo às variáveis da Collection incluí o código da próxima listagem em Pre-request Script:

Cada caso de teste do arquivo testes.json será associado à propriedade iterationData do objeto pm. Assim, faz-se necessária a atribuição destes valores às variáveis associadas a pm.collectionVariables.

Esta Collection parte do pressuposto de que a API REST será executada a partir da porta 5000:

Todo o código detalhado nesta seção foi disponibilizado no seguinte repositório do GitHub:

Postman + Newman + Testes de API de conversão de temperaturas

Execução dos testes com Newman

A instalação do Newman será feita via npm com a instrução:

npm install -g newman

Para executar as validações no diretório Tests utilizar a linha de comando:

newman run ConversaoTemperaturas.postman_collection.json -d testes.json

O Newman exibirá detalhes da execução dos testes, com o sumário a seguir indicando falhas na execução dos mesmos:

Uma segunda execução após correções na API mostrará agora que os testes tiveram sucesso:

Testes, build e deployment automatizados com GitHub Actions

Na próxima listagem temos um workflow do GitHub Actions para testes, build e deployment automatizados num ambiente Linux utilizando containers em conjunto com o Azure Container Registry e o Azure App Service. Vale destacar neste código os seguintes pontos:

  • Um container da aplicação foi criado na linha 30, com o acesso ao mesmo acontecendo a partir da porta 5000;
  • O Newman será executado na linha 36. Teremos a interrupção do workflow neste ponto caso ocorram falhas durante os testes da API REST.

Na próxima imagem podemos observar um exemplo de execução com falhas deste workflow, com o sumário de resultados do Newman em destaque:

Para a configuração do Secret AZURE_CREDENTIALS executei a seguinte instrução baseada no Azure CLI:

az ad sp create-for-rbac --name "GroffeGitHubActionsApiTemperatura" --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<WEB APP> --sdk-auth

O código configurando este workflow foi também disponibilizado em um repositório do GitHub:

GitHub Actions + Newman + Postman (REST API Tests) + Docker + Azure Container Registry + Azure CLI + Azure App Service + Jobs + Variables + Secrets

Para conhecer mais sobre o GitHub Actions acesse o link:

MasterClass GitHub Actions: saiba como foi, participe gratuitamente e receba um certificado

Gerando relatórios HTML com o resultado dos testes

Podemos instalar também via npm o complemento newman-reporter-htmlextra, que permitirá a geração de um relatório HTML com os resultados da execução do Newman:

npm install -g newman-reporter-htmlextra

Executando a instrução a seguir em uma versão do código que ainda não tenha sido corrigida:

newman run ConversaoTemperaturas.postman_collection.json -d testes.json -r htmlextra

Teremos como resultado o seguinte relatório (com a possibilidade de navegação entre seus diferentes itens):

E termino este post com um convite…

Que tal participar da Formação Azure DevOps promovida pelo Azure na Prática e aprender em profundidade como melhorar o seu ciclo de desenvolvimento na sua empresa? Trabalhe com seu time de forma colaborativa e ainda utilizando as melhores técnicas e práticas, a fim de garantir a qualidade do software que está sendo desenvolvido!

Acompanhe com comodidade e a qualquer tempo os diversos módulos deste treinamento, em que serão cobertas boas práticas + estratégias de build/deployment e o uso desta solução de automação com tecnologias como a própria combinação Postman + Newman, .NET, Angular, Node.js, Azure Functions, Selenium WebDriver, Docker, Kubernetes, Azure App Service e outros serviços da nuvem Microsoft!

Acesse então o link a seguir para efetuar sua inscrição com um desconto especial de 10% (inclui certificado e grupo para resolução de dúvidas durante e após o curso):

https://bit.ly/anp-azuredevops-desc-blog-groffe

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet