Projeto realizado para atingir as metas propostas no Desafio API: API Rest da Base2.
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.
- 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
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 |
- 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
eIssues
. 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
eIssues/CriarIssueDataDrivenTest.cs
estão realizando a leitura dos arquivos .CSV que estão no caminhoUtils/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()
eIsValidUsername()
gerados na classeRegexHelper
retornam através do assertIsMatch
se o parâmetro passado atende ao Regex. Testes criados na classeCriarUsuarioRegexTest
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 scriptscriptDataAleatoria.js
para gerar uma data aleatória em nodeJS utilizando a biblioteca npmMoment.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 pastaallure-report
na raiz do workspace do Jenkins.
- 8) Implementar pelo menos dois ambientes (desenvolvimento / homologação)
Os ambientes de
DEV
eHML
foram implementados no projeto. Há dois arquivos na raiz do projeto,appsettings.DEV.json
eappsettings.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 umwebhook
que a cada push realizado no repositório do GitHub é disparado automaticamente um novo build no Jenkins.
- Estratégia de Testes de API Rest: Mapeamento da estratégia dos testes a serem realizados
- Configuration Files XUnit: Documentação de configuração do runner do XUnit, utilizado para setar os testes em paralelo e em threads.
- Default Config MantisBT: Documentação de configuração do MantisBT, utilizado para entender o padrão de e-mail e username válidos.
- Using Environment Variables in XUnit: Utilização de múltiplas variáveis de ambiente no XUnit.
- .NET SDK Support - Jenkins Plugin: Plugin de apoio para utilização do SDK 5.0 .NET e utilzação de comandos
dotnet
na pipeline - Allure XUnit: Adapter do Allure Reports para execução no XUnit
- Allure Plugin Jenkins: Documentação de configuração do Allure Reports para execução no Jenkins
- Triggering a Jenkins build on push using GitHub webhooks / Jenkins Tutorial: Configure (SCM) Github Triggers and Git Polling using Ngrok: Configuração para que o build do Jenkins realize um trigger a cada push no repositório do projeto.
- Data Driven Test in xUnit Using Custom Attribute: Criação de atributo personalizável para testes data driven utilizando .CSV
- Backing up Database in MySQL using C#: Utilização da ferramenta MySqlBackup.NET para restore do banco de dados
- Process Class / RedirectStandardOutput Property: Utilização de processos em .NET
- Start NodeJS Application from C#: Execução de processos em NodeJs
- Xunit Assembly Fixture / Shared State Between Tests: Fixture compartilhada durante a execução de testes em paralelo.