Postman + Newman: automatizando testes de APIs REST com Azure DevOps e GitHub Actions
Já abordei em outro artigo recente neste blog o uso do Postman e do Newman como soluções para a implementação e execução de testes automatizados de APIs REST:
Automatizando testes de APIs REST com Postman + Newman
Neste novo post dou continuidade ao tema aproveitando como motivação uma live recente no Canal .NET, em que demonstrei com meu amigo Vinicius Moura como implementar a automação dos testes (com Postman + Newman), build e deployment de uma API REST utilizando o Azure DevOps e o GitHub Actions. Além disso, o exemplo em questão envolveu o uso de containers (criados inclusive para os testes da aplicação) e a hospedagem da API REST em um cluster Kubernetes (por meio do uso do Azure Kubernetes Service - AKS).
A gravação desta live está disponível no YouTube e pode ser assistida gratuitamente:
E aproveito este espaço para um convite…
Dia 28/06 (segunda) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.
Ao longo desta live abordarei dicas, truques e alternativas úteis para o desenvolvimento Back-End e de APIs REST com .NET 5, ASP.NET Core, Azure Functions. Ao longo da apresentação será coberto o uso de diferentes frameworks, serviços na nuvem, mensageria, bancos de dados e boas práticas de forma a facilitar e tornar mais dinâmica a implementação de soluções baseadas na plataforma .NET no seu dia a dia.
Teremos também algumas novidades do .NET 6 demonstradas na prática!
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:
Uma visão geral dos testes a serem executados
Todo o processo de configuração dos testes via Postman está detalhado no vídeo já indicado neste artigo. Recomendo fortemente que você assista ao mesmo para ficar por dentro dos ajustes necessários.
Os testes serão executados em uma API REST para cálculo de juros de compostos. Os repositórios (incluindo o projeto da API) já foram disponibilizados no GitHub, bastando apenas clicar nos links seguintes para ter acesso aos mesmos:
Na imagem a seguir estão as variáveis declaradas na Collection CalculoJurosCompostos, a qual foi criada para a execução automatizada dos testes:
A requisição definida dentro da Collection já referencia tais variáveis nos parâmetros da query string:
Temos ainda a seção Pre-request Script, com o código atribuindo os valores de um arquivo JSON com uma massa de testes (objeto iterationData) às variáveis da Collection que estão e Variables (objeto collectionVariables):
Na listagem a seguir temos o código para Pre-request Script:
E a seção Tests com as validações para a Collection :
O código para a seção Tests está na próxima listagem:
Utilizando Postman e Newman em um pipeline do Azure DevOps
O Newman é um pacote npm voltado à execução na linha de comando de testes criados com Postman. Podemos com esta ferramenta inclusive gerar relatórios HTML com o resultado dos testes. Já para a publicação de tais relatórios devemos instalar a extensão Postman Report, disponibilizada gratuitamente no Marketplace do Azure DevOps:
Na listagem a seguir temos o código para o pipeline do Azure DevOps:
- Antes de acionarmos os testes será gerada uma imagem Docker para a versão da aplicação que passará por validações. Um container executando a API REST na porta 5000 é então gerado (linha 44);
- Os testes serão então executados via Newman (linha 50), com a exibição dos resultados nos próprios logs de execução do Azure Pipelines/Azure DevOps. É importante ressaltar que o Newman já vem pré-instalado nos virtual environments do Azure DevOps e do GitHub Actions;
- A geração do relatório HTML com os resultados depende do pacote npm newman-reporter-htmlextra, porém o mesmo é incompatível com a versão do Newman pré-instalada nos virtual environments. A solução encontrada aqui foi instalar uma versão anterior do Newman e o próprio newman-reporter-htmlextra localmente, com a execução desta versão legada do Newman indicando a exportação dos resultados para o formato HTML via comando npx (tudo isso acontecendo entre as linhas 53 a 66);
- Na linha 69 podemos observar a utilização da task UploadPostmanHtmlReport, disponibilizada graças à instalação da extensão Postman Report;
- Na sequência teremos o push das imagens para o Azure Container Registry, além do deployment no stage subsequente para o Azure Kubernetes Service.
Na próxima imagem está o resultado dos testes via Postman + Newman nos logs execução do Azure Pipelines:
E na imagem seguinte o relatório HTML nos resultados de uma execução do pipeline:
Utilizando Postman e Newman em um workflow do GitHub Actions
O workflow do GitHub Actions envolvendo a automação do processo descrito na seção anterior é bastante semelhante, diferindo apenas pela inexistência neste momento de um mecanismo de publicação dos relatórios HTML. Na listagem a seguir temos o código que implementa tal workflow; a solução desta limitação passou pela publicação do relatório como um Artifact (linhas 57 a 65):
Na próxima imagem podemos observar uma execução com sucesso deste workflow, incluindo o Artifact gerado destacado em vermelho (como um arquivo .zip):
Já a imagem seguinte traz o resultado nos testes nos logs de execução do GitHub Actions: