Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules
test-results
coverage
.DS_Store
.env
44 changes: 44 additions & 0 deletions 02-casos-de-teste/login.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Feature: Login de usuario

Como um usuario do sistema
Quero realizar login na aplicação
Para acessar funcionalidade restritas com segurança

Scenario: Login realizado com sucesso com credenciais válidas
Given que o usuario está na página de login do ParaBank
When Informa um usuário válido
And informa uma senha válida
And clica no botão "Log In"
Then deve visualizar a página "Accounts"
And redirecionar para a página inicial

Scenario: Login com senha inválida
Given que o usuario está na página de login do ParaBank
When Informa um usuário válido
And informa uma senha iválida
And clica no botão "Log In"
Then deve visualizar mensagem de erro

Scenario: Login om usuário inexistentee
Given que o usuario está na página de login do ParaBank
When Informa um usuário inexistente
And informa uma senha válida
And clica no botão "Log In"
Then deve visualizar uma mensagem de erro

Scenario: Login com campos vazios
Given que o usuario está na página de login do ParaBank
When clica no botão "Log In" sem preencher os campos
Then deve visuzlizar mensagem de erro

Scenario: Login somente com usuário
Given que o usuário está na página de login do ParaBank
When ele informa apenas o usuário
And clica no botão "Log In"
Then deve visualizar mensagem de erro

Scenario: Login somente com a senha
Given que o usuário está na página de login do ParaBank
When ele informa apenas a senha
And clica no botão "Log In"
Then deve visualizar mensagem de erro
138 changes: 99 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,74 +1,134 @@
# qa-manual-tests
# 🧪 QA Manual Testing Portfolio
🧪 QA Testing Lab

Este repositório reúne estudos e práticas de *testes manuais de software*, com foco em qualidade, validação de regras de negócio e mitigação de riscos em aplicações web.
Este repositório reúne estudos e práticas de Qualidade de Software, inicialmente focados em testes manuais, evoluindo gradualmente para automação de testes e organização de artefatos de QA.

O objetivo é demonstrar minha atuação como QA, aplicando conceitos aprendidos na prática, simulando cenários reais de sistemas críticos e ambientes corporativos.
O objetivo é demonstrar, na prática, como um QA organiza e executa atividades de validação de software, cobrindo desde a estratégia de testes até a automação de cenários críticos.

O projeto simula um ambiente próximo ao dia a dia de times de tecnologia, incluindo planejamento, execução, registro de bugs e evolução para testes automatizados.

---

## 👩‍💻 Sobre mim
👩‍💻 Sobre mim

Sou formada em *Análise e Desenvolvimento de Sistemas, com experiência prévia como desenvolvedora e atuação prática em **testes manuais*, participando de rotinas de validação, homologação e suporte à implantação de sistemas.
Sou formada em Análise e Desenvolvimento de Sistemas, com experiência prévia como desenvolvedora e atuação prática em testes manuais de software, participando de rotinas de validação, homologação e suporte à implantação de sistemas.

Atuei em ambientes com *metodologias ágeis*, colaborando com times de desenvolvimento, produto e negócios, sempre com foco na entrega de software confiável e de qualidade.
Atuei em ambientes com metodologias ágeis, colaborando com times de desenvolvimento, produto e negócios, sempre com foco na entrega de software confiável e de qualidade.

Atualmente, busco evoluir tecnicamente em *automação de testes*, mantendo uma base sólida em testes manuais.
Atualmente estou aprofundando meus conhecimentos em automação de testes, mantendo uma base sólida em testes manuais e estratégia de qualidade.

---

## 🧩 Contexto do sistema testado
🧩 Contexto do sistema testado

Parte dos testes deste projeto utiliza o ParaBank, uma aplicação web bancária de demonstração amplamente utilizada para prática de testes.

Os testes documentados neste repositório foram aplicados em um *sistema web fictício*, inspirado em plataformas digitais de uso cotidiano, incluindo funcionalidades como:
Ela permite simular cenários reais de aplicações financeiras, como:

- Autenticação (login)
- Cadastro de usuários
- Autenticação de usuários (login)
- Cadastro de contas
- Consulta de extratos
- Operações financeiras simuladas
- Validação de cenários críticos

> Nenhuma informação confidencial ou corporativa é utilizada.
Esses cenários permitem exercitar validações importantes como regras de negócio, fluxos críticos e comportamento do sistema.

«Nenhuma informação confidencial ou corporativa é utilizada neste projeto.»

---

## 🔍 Tipos de testes abordados
🔍 Tipos de testes abordados

Neste repositório são exploradas diferentes abordagens de QA:

- Testes manuais funcionais
- Testes exploratórios
- Testes de regressão
- Validação de regras de negócio
- Análise de cenários críticos e de risco
- Testes manuais funcionais
- Testes exploratórios
- Testes de regressão
- Validação de regras de negócio
- Registro e documentação de bugs
- Início de automação de testes End-to-End

---

## 📂 Estrutura do repositório
🤖 Automação de Testes

Com a evolução do projeto, foi iniciada a automação de testes utilizando Cypress.

A automação começou pelos cenários mais críticos da aplicação, como o fluxo de login, servindo como base para expansão futura da cobertura de testes automatizados.

Essa etapa surgiu após minha participação em um bootcamp de automação de testes, onde tive contato com ferramentas modernas e práticas de QA Engineering.

A automação continuará evoluindo com novos cenários do sistema.

- *Plano de Teste*
Definição de escopo, riscos, tipos de teste e estratégia
---

📂 Estrutura do repositório

O projeto está organizado para refletir um fluxo real de trabalho em QA:

qa-testing-lab
├── 01-plano-de-teste
├── 02-casos-de-teste
├── 03-testes-exploratorios
├── 04-relatorios-de-bugs
├── 05-checklists
├── cypress
│ ├── e2e
│ ├── fixtures
│ └── support
├── scripts
├── test-coverage
├── cypress.config.js
├── package.json
└── README.md

Essa estrutura permite separar claramente documentação de QA, execução de testes e automação.

- *Casos de Teste*
Documentação estruturada de cenários funcionais
---

- *Testes Exploratórios*
Sessões exploratórias focadas em comportamento do sistema
🛠️ Stack e conhecimentos aplicados

- *Relatórios de Bugs*
Registro claro e objetivo de falhas encontradas
Durante o desenvolvimento deste projeto foram aplicados conhecimentos como:

- *Checklists*
Apoio para testes de regressão e validações rápidas
- Testes Manuais de Software
- Testes Exploratórios
- Design de Casos de Teste
- Registro e análise de bugs
- Cypress (Automação E2E)
- JavaScript
- Node.js
- Git e GitHub
- Metodologias Ágeis (Scrum / Kanban)

---

## 🛠️ Conhecimentos aplicados
🚀 Evolução do projeto

Este repositório representa um laboratório de prática em QA, demonstrando a evolução natural de atividades de qualidade de software:

- Testes Manuais de Software
- Metodologias Ágeis (Scrum / Kanban)
- Versionamento com Git
- Documentação técnica
- Comunicação com times de desenvolvimento
Testes Manuais
Estruturação de documentação de QA
Testes exploratórios e registro de bugs
Automação de cenários críticos com Cypress
Expansão gradual da cobertura automatizada

---

## 🌱 Em evolução
🌱 Próximos passos

Entre as evoluções planejadas para o projeto estão:

- ampliar a cobertura de testes automatizados
- automatizar novos fluxos do ParaBank
- melhorar a organização da cobertura de testes
- explorar integração com pipelines de CI/CD

---

Este repositório faz parte da minha transição e evolução contínua na área de *Qualidade de Software, servindo como base para projetos futuros de **automação de testes*, APIs e pipelines de QA.
Este projeto representa um ambiente de aprendizado contínuo em engenharia de qualidade, demonstrando não apenas automação, mas também organização de processos e pensamento crítico sobre qualidade de software.
11 changes: 11 additions & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const { defineConfig } = require("cypress");

module.exports = defineConfig({
allowCypressEnv: false,

e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
});
88 changes: 88 additions & 0 deletions cypress/e2e/login.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
describe('Login - ParaBank', () => {

const url = 'https://parabank.parasoft.com'

beforeEach(() => {
cy.visit(url)
})

// -----------------------------
// LOGIN VÁLIDO
// -----------------------------
it('Deve fazer login com usuário válido', () => {

cy.get('input[name="username"]').type('john')
cy.get('input[name="password"]').type('demo')

cy.get('input[value="Log In"]').click()

cy.contains('Accounts Overview')

})

// -----------------------------
// SENHA INVÁLIDA
// -----------------------------
it('Deve mostrar erro ao usar senha inválida', () => {

cy.get('input[name="username"]').type('john')
cy.get('input[name="password"]').type('senhaerrada')

cy.get('input[value="Log In"]').click()

cy.contains('The username and password could not be verified')

})

// -----------------------------
// USUÁRIO INEXISTENTE
// -----------------------------
it('Deve mostrar erro ao usar usuário inexistente', () => {

cy.get('input[name="username"]').type('usuarioFake123')
cy.get('input[name="password"]').type('qualquerSenha')

cy.get('input[value="Log In"]').click()

cy.contains('The username and password could not be verified')

})

// -----------------------------
// CAMPOS VAZIOS
// -----------------------------
it('Deve mostrar erro ao tentar login com campos vazios', () => {

cy.get('input[value="Log In"]').click()

cy.contains('Please enter a username and password')

})

// -----------------------------
// APENAS USUÁRIO
// -----------------------------
it('Deve mostrar erro ao preencher apenas usuário', () => {

cy.get('input[name="username"]').type('john')

cy.get('input[value="Log In"]').click()

cy.contains('Please enter a username and password')

})

// -----------------------------
// APENAS SENHA
// -----------------------------
it('Deve mostrar erro ao preencher apenas senha', () => {

cy.get('input[name="password"]').type('demo')

cy.get('input[value="Log In"]').click()

cy.contains('Please enter a username and password')

})

})
5 changes: 5 additions & 0 deletions cypress/e2e/spec.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe('template spec', () => {
it('passes', () => {
cy.visit('https://example.cypress.io')
})
})
5 changes: 5 additions & 0 deletions cypress/fixtures/example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}
25 changes: 25 additions & 0 deletions cypress/support/commands.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add('login', (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
17 changes: 17 additions & 0 deletions cypress/support/e2e.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// ***********************************************************
// This example support/e2e.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************

// Import commands.js using ES2015 syntax:
import './commands'
Loading
Loading