danielapochini / desafio-automacao-api

Desafio de Automação API Rest - Base2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Desafio de Automação API Rest - Base2

Projeto realizado para atingir as metas propostas no Desafio API: API Rest da Base2.

SUT (Software Under Test)

Os testes serão realizados na API Rest do Mantis Bug Tracker.

Documentação Postman:

Foi necessário instalar a seguinte Docker Image:

Optei por esta versão pois trata-se de uma imagem Docker mais atualizada do MantisBT e de fácil configuração.

Tecnologias Utilizadas

  • Docker - Ferramenta para levantar containers através de imagens
  • Jenkins - Ferramenta para realizar a integracão contínua do projeto na pipeline
  • C# - Linguagem utilizada para o projeto
  • .NET 5 - Plataforma de desenvolvimento
  • XUnit - Framework .NET que auxilia na construção de testes
  • RestSharp - Framework API Rest
  • RestSharp.Serializers.NewsoftJson - Package que substitui o deserilizador/serilizador padrão e que permite configurações personalizadas
  • FluentAssertions - Extensão de métodos de Assert de forma mais clara e natural
  • Dapper - (Object Relational Mapping) voltado para o desenvolvimento .NET, ou seja, auxilia no mapeamento de objetos a partir de consulta SQL.
  • MySqlBackup.NET - Ferramenta que auxilia na realização do restore do banco de dados
  • Boggus - Biblioteca para gerar dados fakes
  • Allure Reports - Biblioteca para gerar relatórios de testes
  • NodeJs - Realiza a execução de códigos JavaScript
  • Moment.js - Biblioteca JavaScript para manipulação de datas

Arquitetura

Diretório Funcionalidade
Base Framework desenvolvido para as utilização das APIs REST do projeto
Model Representam a estrutura e o modelo esperado do que será enviado/recebido
Tests Classes de testes separadas em pastas e classes de acordo com a funcionalidade e endpoint
Utils Classes de apoio para criação de entidades do banco de dados e queries de consulta, geração de relatórios de testes, classes helpers para a execução dos testes e configurações do projeto

Metas

  • 1) Implementar 50 scripts de testes que manipulem uma aplicação cuja interface é uma API REST.

Foram implementados testes dos seguintes endpoints: Users, Projects, Pages, Langs, Issues, Filters e Issues. Utilizando algumas estratégias, como por exemplo, validação de parâmetros obrigatórios, parâmetros de entrada válidos, parâmetros de entrada inválidos, payload da response, HTTP Status Code e HTTP Status Description e também a validação de dados das requests com o que foi inserido no banco de dados.

  • 2) Alguns scripts devem ler dados de uma planilha Excel para implementar Data-Driven.
  • 3) Notem que 50 scripts podem cobrir mais de 50 casos de testes se usarmos Data-Driven. Em outras palavras, implementar 50 CTs usando data-driven não é a mesma coisa que implementar 50 scripts.

A classe de teste Users/CriarUsuarioDataDrivenTest.cs e Issues/CriarIssueDataDrivenTest.cs estão realizando a leitura dos arquivos .CSV que estão no caminho Utils/Resources/DataDriven/

  • 4) O projeto deve tratar autenticação.

O token para utilização da API é gerado pelo usuário administrador no painel Tokens API em sua conta e este Token é passado no Header da requisição, conforme a documentação da API Mantis

  • 5) Pelo menos um teste deve fazer a validação usando REGEX (Expressões Regulares).

Os métodos IsValidAddress() e IsValidUsername() gerados na classe RegexHelper retornam através do assert IsMatch se o parâmetro passado atende ao Regex. Testes criados na classe CriarUsuarioRegexTest utilizam estes métodos.

  • 6) Pelo menos um script deve usar código Groovy / Node.js ou outra linguagem para fazer scripts.

O método NodeJsHelper.RetornaDataAleatoriaEmTrintaDias() realiza a execução do script scriptDataAleatoria.js para gerar uma data aleatória em nodeJS utilizando a biblioteca npm Moment.js que é baixada através de um processo executado na inicialização do projeto e é deletada após a execução.

  • 7) O projeto deverá gerar um relatório de testes automaticamente.

Após a execução do build na pipeline, o relatório de teste é gerado automaticamente utilizando o plugin de Allure Reports, na pasta allure-report na raiz do workspace do Jenkins.

  • 8) Implementar pelo menos dois ambientes (desenvolvimento / homologação)

Os ambientes de DEV e HML foram implementados no projeto. Há dois arquivos na raiz do projeto, appsettings.DEV.json e appsettings.HML.json que são compilados conforme o ambiente selecionado nas configurações de build.

  • 9) A massa de testes deve ser preparada neste projeto, seja com scripts carregando massa nova no BD ou com restore de banco de dados.

A massa de dados está sendo tratada através do método DatabaseHelper.ResetMantisDatabase() que realiza o restore do BD antes da execução dos testes.

  • 10) Executar testes em paralelo. Pelo menos duas threads (25 testes cada).

O arquivo xunit.runner.json na raiz do projeto está configurado para realizar a execução dos testes em paralelo e em quatro threads.

  • 11) Testes deverão ser agendados pelo Jenkins, CircleCI, TFS ou outra ferramenta de CI que preferir.

Os testes estão implementados na pipeline do Jenkins para o ambiente de DEV, o script de configuração da pipeline está disponível na raiz do projeto. O projeto possui um webhook que a cada push realizado no repositório do GitHub é disparado automaticamente um novo build no Jenkins.

Referências

About

Desafio de Automação API Rest - Base2


Languages

Language:C# 99.7%Language:JavaScript 0.3%