BugBank

BUG BANK

O projeto Bug Bank foca na análise, escrita e automação de testes para a aplicação de banco online Bug Bank. Os casos de testes, escritos em Gherkin, são fortemente embasados em cima dos requisitos impostos pela aplicação.

A automação dos testes é desenvolvida em Python, utilizando de Selenium com o padrão de design Page Objects para organização e encapsulamento das informações das páginas. Os casos de testes, utilizam do framework Behave para o suporte ao desenvolvimento orientado ao comportamento.

Home do BugBank

APLICAÇÃO SOB TEST (AUT)

O Bug Bank UI é uma aplicação de um banco online, projetado para práticas de planejamento e execução de testes manuais e automatizados. Ele oferece funcionalidades similares a um banco real, como criação de contas, login, transferências e extratos. O objetivo deste projeto é proporcionar um ambiente similar a um ambiente real com bugs e falhas para serem detectadas.

Pensando em uma aplicação que seja semelhante a projetos reais, Bug Bank foi pensado para que você pratique planejamento de testes e automação de testes.

Jhonatas MatosBug Bank CEO

PLANEJAMENTO

Inicialmente, os requisitos da aplicação foram analisados para entender as funcionalidades e as expectativas do sistema. O planejamento do projeto se baseava no processo de entender, compreender, planejar e executar.

Com base nos requisitos estabelecidos pelo BugBank, as funcionalidades foram definidas:

  • 🔒 Login: Autenticação de usuários existentes.
  • 🆕 Cadastro: Permite a criação de novas contas bancárias.
  • 🔁 Transferência entre contas: Realiza a transferência de dinheiro entre contas do BugBank.
  • 📊 Extratos: Exibe o histórico de transações do usuário.

A partir disso foram criados os casos de testes, escritos em Gherkin para que facilitassem a criação de testes automatizados posteriormente.

FEATURES FILES

Os arquivos .feature são a base para a implementação dos testes no BugBank. Esses arquivos, escritos em Gherkin, descrevem os cenários de teste em uma linguagem próxima ao natural, facilitando a compreensão e a comunicação entre diferentes partes interessadas. Cada arquivo .feature contém um ou mais cenários que definem os passos necessários para validar uma funcionalidade específica da aplicação.

Funcionalidade: Transferência entre contas

  Como um usuário do BugBank,
  Eu quero transferir fundos para outra conta,
  Para que eu possa realizar transações financeiras com facilidade.
  
  Contexto: Usuário na tela de Transferência
    Dado que o usuário está na tela de transferência do BugBank

    Cenário: Transferência com sucesso
    E o saldo da conta do usuário é de "R$ 1.500,00"
    Quando o usuário preencher todos os campos corretamente
    E tentar realizar a transferência
    Então o sistema deve debitar o valor transferido da conta do usuário
    E a mensagem "Transferencia realizada com sucesso" deve ser exibida
    E o sistema deve redirecionar o usuário para a página de extrato

Parte do arquivo transferencia.feature

Essa abordagem permite que os testes sejam facilmente compreendidos por desenvolvedores, testadores e stakeholders.

TESTES AUTOMATIZADOS

Os testes automatizados garantem que as funcionalidades do BugBank sejam verificadas de maneira consistente e eficiente. A automação de testes ajuda a identificar rapidamente problemas e regressões, mantendo a qualidade do software. Para atingir esse objetivo, utilizei uma combinação de ferramentas e padrões, que são detalhados a seguir.

Execução da suíte de testes do Bug Bank

VIRTUAL ENVIRONMENT

Para garantir que todas as dependências fossem isoladas e bem gerenciadas, utilizei um ambiente virtual. O uso de ambientes virtuais permite o isolamento de cada projeto, podendo ter suas próprias dependências, evitando conflitos entre bibliotecas e garantindo de que todos que utilizarem do projeto estarão utilizando as mesmas versões das ferramentas e bibliotecas.

SELENIUM + BEHAVE

O Selenium é uma ferramenta amplamente utilizada para automação de testes em aplicações web com suporte a Python e outras linguagens. Ele permite que os desenvolvedores simulem interações humanas com um navegador web, como clicar em botões, preencher formulários e navegar por diferentes páginas. Integrar o Selenium com o Behave melhora ainda mais a estrutura de automação de testes.

Behave é um framework de BDD (Behavior-Driven Development) que permite escrever testes em linguagem natural usando a sintaxe Gherkin. Com o Gherkin, é possível descrever o comportamento esperado da aplicação em termos de cenários de teste, utilizando palavras-chave como "Dado que", "Quando" e "Então". Isso facilita a comunicação entre desenvolvedores, testadores e stakeholders, garantindo que todos tenham uma compreensão clara dos requisitos e comportamentos esperados.

Uma prática recomendada ao usar Selenium é o padrão de design Page Objects. Page Objects é a representação de cada página web que esta sendo testada em sua respectiva classe. Elas encapsulam os elementos específicos da página (como botões, campos de texto) e os comportamentos esperados (como preencher um formulário, clicar em um botão de submissão). Ao adotar Page Objects, os testes se tornam mais modulares, reutilizáveis e fáceis de manter. Isso porque qualquer alteração na interface da aplicação só requer atualizações na Page Object correspondente, em vez de em todos os testes que interagem com essa página.

SIMULAÇÃO DE API

Como o BugBank não utiliza de um banco de dados tradicional, a aplicação armazena os dados do usuário no local storage do navegador. Para simular interações com uma API externa da aplicação, manipulei diretamente os dados no local storage. Isso garante que os testes não sejam dependentes e que apenas a função desejada esteje sendo testada. Esta ação reduziu consideravelmente o tempo total de execução da suite de testes, pois agora não é mais necessário realizar ações na interface para efetuar cadastro/login em cenários de testes que não estavam testando essas funcionalidades.

CONTINOUS INTEGRATION

Foi criada uma pipeline no GitHub Actions para o projeto BugBank, com o objetivo de automatizar a execução dos testes sempre que houver alterações no código. A ideia principal por trás dos testes automatizados é que eles sejam executados de forma automática e contínua, garantindo que a qualidade do software seja mantida a cada modificação realizada.

Pipeline de CI

A pipeline é configurada para rodar os testes toda vez que um push é feito para o repositório. Ela executa os testes de maneira paralela em dois navegadores diferentes: Chrome e Firefox. Isso permite verificar a compatibilidade e o desempenho do sistema em diferentes ambientes de navegação, garantindo que o software funcione corretamente em ambos os casos. Esse processo automatizado ajuda a detectar problemas rapidamente e a manter a qualidade do código ao longo do desenvolvimento.

RESULTADOS

Iniciei o projeto com o objetivo de aprender mais sobre automação de testes, principalmente utilizando python. O uso do padrão Page Objects facilita a manutenção e a escalabilidade dos testes, embora possua uma certa complexidade no seu desenvolvimento inicial.

Ainda há espaço para melhorias no projeto, como a adição de Docstrings. Também seria interessante integrar a geração de relatórios aos bug reports e um sistema de logs para melhor depuração de problemas.