Esse projeto tem 9 metas propostas e faz parte do Desafio Web: Selenium WebDriver da Base2.
O sistema escolhido para a realização dos testes será o Mantis Bug Tracker.
- Docker - Ferramenta para levantar containers através de imagens
- Azure - Ferramenta para realizar a integracão contínua do projeto na pipeline
- C# - Linguagem utilizada para o projeto
- .NET Core 3.1 - Plataforma de desenvolvimento
- NUnit - Framework .NET que auxilia na construção de testes
- ExtentReports - Biblioteca de relatórios de código aberto
Serão necessárias as seguintes configurações para iniciar o projeto:
No repositório do projeto existe um arquivo chamado docker-compose.yml, este arquivo contém um grupo de imagens do Mantis Crie o diretório local "C:\mantis", baixe o arquivo docker-compose.yml e cole neste diretório criado.
- Instalar Docker Desktop e reiniciar a máquina
- Caso apresente o erro "WSL 2 installation is incomplete", baixe e instale o WSL2 Kernel e clique em Restart
- Abra o aplicativo Docker Desktop
- Deverá ser apresentado o tutorial, basta dar skip que você terá esta tela
-
Abra um terminal e acesse o diretório recém criado: "C:/mantis"
-
No diretório haverá o arquivo docker-compose.yml
-
Execute o comando>
docker-compose.exe up -d
-
Após o processamento se tudo correr bem, as imagens serão baixadas e novos contêineres criados:
- Para validar a criação e execução dos execute o comando
docker ps -a
e os contêineres estarão disponíveis e executando:
- No aplicativo do Docker Desktop apresentará os containeres ativos conforme imagem:
Faça o seu primeiro acesso ao Mantis pelo endereço http://127.0.0.1:8989
Após acessar será necessário configurar o banco de dados conforme tabela e valores abaixo:
Variável | Valor |
---|---|
Type of Database | MySQL Improved |
Hostname (for Database Server) | mantis_db_1 |
Username (for Database) | mantisbt |
Password (for Database) | mantisbt |
Database name (for Database) | bugtracker |
Admin Username (to create Database if required) | root |
Admin Password (to create Database if required) | root |
Após preencher, clicar em Login/Continue e aguardar o processamento.
O primeiro acesso deverá ser feito utilizando as credenciais administrator/root. Redefinir a senha para o valor elvercioneto para rodar os testes.
Para acessar ao banco de dados do Mantis (MariaDB) siga os passos abaixo:
-
Baixe e instale o software HeidiSQL
-
Ao abrir o Gerenciador de sessões, preencha com os valores abaixo:
- Abra a conexão e será possível verificar todas as tabelas e registros:
Para esse setup, utilizei como referência o Github do Saymon [Mantis4Testers-Docker]https://github.com/saymowan/Mantis4Testers-Docker
Diretório | Funcionalidade |
---|---|
Bases | Contém as classes PageBase.cs e TestBase.cs, classes de apoio, com objetos de suporte e criação de Relatórios. |
DataBaseSteps | Contém os métdos de manipulação do banco de dados que serão usados durante o fluxo dos casos de testes. |
DataDriven | Em DataDriven/Files existe o arquivo Issues.csv. que serve como massa de dados para a execução de testes com Data Driven |
Flows | Classes que contém os métodos que agrupam as ações em um fluxo que pode ser exercitado em vários casos de teste. |
Helpers | Classes de apoio para a execução de comandos e uso do WebDriver/RemoteDriver, além de configurações do projeto. |
Pages | Classes quem contém o mapeamento dos elementos e ações correspondentes à uma página/tela do sistema. |
Queries | Classes e arquivos quem contém consultas ao banco de dados que retornam parâmetros da base para executar o fluxo dos casos de testes. |
Tests | Classes quem contémos métodos correspondentes aos testes de uma funcionalidade. |
6. Fazer qualquer alteração no código para a pipeline rodar automaticamente e verificar os resultados
Execucao_Pipeline.mp4
- 1) Implementar 50 scripts de testes que manipulem uma aplicação web (sugestões: Mantis ou TestLink) com Page Objects.
Foram implementados as seguintes classes de teste:
IssueTests
,LoginTests
,ManageProjectsTests
,ManageTagsTests
,ManageUserTests
. Utilizando algumas estratégias, como por exemplo, validação de CRUD, validação de parâmetros obrigatórios, parâmetros de entrada válidos, parâmetros de entrada inválidos, e também a validação de dados enviados com o que foi inserido no banco de dados.
- 2) Alguns scripts devem ler dados de uma planilha Excel para implementar Data-Driven.
- Quem utilizar Cucumber, SpecFlow ou outra ferramenta de BDD não precisa implementar lendo de uma planilha Excel. Pode ser a implementação de um Scenario Outline.
- 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
DataDrivenTests
implementa a criação de um cenário lendo dados da planilhaIssues.csv
para testes Data-Driven.
- 4) Os casos de testes precisam ser executados em no mínimo três navegadores. Utilizando o Selenium Grid.
- Não é necessário executar em paralelo. Pode ser demonstrada a execução dos browsers separadamente.
As chaves
Browser
eExecution
presentes no arquivoappsettings.json
controlam as configurações de navegador utilizado na execução dos testes e se é uma execução remota (remota) ou WebDriver (local). A classeBrowsers
dentro deHelpers
possui as configurações tanto para rodar nos 03 navegadores (Chrome, Edge, Firefox) que estão aptos a serem executados, quanto para o controlar se a execução será realizada via Grid ou localmente.
- 5) Gravar screenshots ou vídeo automaticamente dos casos de testes.
O método
GetScreenshot
na classe ExtentReports.cs realiza os screenshots durante a execução de cada step em um cenário de testes.
- 6) O projeto deverá gerar um relatório de testes automaticamente com screenshots ou vídeos embutidos. Sugestões: Allure Report ou ExtentReport.
O relatório de testes é gerado tanto para a execução local quanto remota no formato HTML através dos métodos da classe ExtentReports.cs.
- 7) 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
ResetMantisDatabase()
na classeDatabaseHelper
que realiza o restore do Banco de Dados antes da execução dos testes.
- 8) Um dos scripts deve injetar Javascript para executar alguma operação na tela. O objetivo aqui é exercitar a injeção de Javascript dentro do código do Selenium.
No próprio template da Base2 existe um método
SendKeysJavaScript()
na classe PageBase.cs que realiza o preenchimento de um campo por ação de JavaScript. Na classe LoginPage.cs, o métodoInserirLogin
implementa esse script. O método foi utilizado no cenárioRealizarLoginComSucesso()
dentro da classe LoginTests.cs
- 9) Testes deverão ser agendados pelo Gitlab-CI, Azure DevOps, Jenkins, CircleCI, TFS, TeamCity ou outra ferramenta de CI que preferir
Os testes estão implementados na pipeline do AzureDevOps. Nele tem uma configuração chamada Enable c 5581 ontinuous integration que faz com que a cada push realizado no repositório do GitHub, a Pipeline seja disparada automaticamente.
- Data-Driven Testing (DDT) e o reaproveitamento dos testes automatizados
- Run only specific tests when using dotnet test?
- Docker Selenium
- Azure DevOps
- GitHub da Daniela Pochini
- Meetup Base2(interno) - Implementando pipelines de testes automatizados no Azure DevOps.