10000 GitHub - elvercioneto/desafio-automacao-web: Desafio de Automação Web - Selenium Base2
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

elvercioneto/desafio-automacao-web

Repository files navigation

Desafio de Automação Selenium WebDriver - Base2

Esse projeto tem 9 metas propostas e faz parte do Desafio Web: Selenium WebDriver da Base2.

SUT (Software Under Test)

O sistema escolhido para a realização dos testes será o Mantis Bug Tracker.

Tecnologias Utilizadas

  • 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

Setup

Serão necessárias as seguintes configurações para iniciar o projeto:

1. Preparação do ambiente Mantis

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.

1.1 Setup Docker Mantis

  1. Instalar Docker Desktop e reiniciar a máquina
  2. Caso apresente o erro "WSL 2 installation is incomplete", baixe e instale o WSL2 Kernel e clique em Restart

  1. Abra o aplicativo Docker Desktop

  1. Deverá ser apresentado o tutorial, basta dar skip que você terá esta tela

  1. Abra um terminal e acesse o diretório recém criado: "C:/mantis"

  2. No diretório haverá o arquivo docker-compose.yml

  3. Execute o comando> docker-compose.exe up -d

  4. Após o processamento se tudo correr bem, as imagens serão baixadas e novos contêineres criados:

  1. 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:

  1. No aplicativo do Docker Desktop apresentará os containeres ativos conforme imagem:

docker

1.2 Configuração inicial Mantis

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.

1.3 Acessar banco de dados Mantis/MariaDB

Para acessar ao banco de dados do Mantis (MariaDB) siga os passos abaixo:

  1. Baixe e instale o software HeidiSQL

  2. Ao abrir o Gerenciador de sessões, preencha com os valores abaixo:

  1. 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

Arquitetura do Projeto

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.

Executando os testes na Pipeline do Azure

1. Subir o projeto para o Github

2. Criar a Pipeline no AzureDevOps

pipeline1

3. Alterar o job Test para rodar somente os testes com a categoria TesteCI

jobTest

4. Criar um agent pool pra utilizar a máquina local como runner no Azure

agent

5 Executar o runner

runner

6. Fazer qualquer alteração no código para a pipeline rodar automaticamente e verificar os resultados

Execucao_Pipeline.mp4

Metas

  • 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 planilha Issues.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 e Execution presentes no arquivo appsettings.json controlam as configurações de navegador utilizado na execução dos testes e se é uma execução remota (remota) ou WebDriver (local). A classe Browsers dentro de Helpers 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 classe DatabaseHelper 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étodo InserirLogin implementa esse script. O método foi utilizado no cenário RealizarLoginComSucesso() 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.

Referências

About

Desafio de Automação Web - Selenium Base2

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0