image

Unlimited bootcamps + English course forever

82
%OFF
Article image
Eduardo Lentz
Eduardo Lentz05/06/2026 20:42
Share

Explorando o ciclo completo de QA 🔎🪲

    Testes manuais, automação, bug report e Pull Request, o que aprendi transformando uma aula prática em portfólio real.

    Tenho explorado QA como forma de evoluir na carreira, entendendo o processo de ponta a ponta. Foi nesse contexto que participei do Workshop de QA da EBAC.

    O que começou como uma tarefa simples terminou com dois repositórios no GitHub, uma Issue aberta em um projeto open source e um Pull Request com a correção de um bug no código-fonte da aplicação que estava testando.

    Esse artigo conta como isso aconteceu, e por que o processo importa tanto quanto o resultado.

    O começo: uma aula, uma aplicação, dez casos de teste

    A proposta do exercício era testar o formulário de cadastro do BugBank, uma aplicação criada para prática de QA, um banco digital fictício cheio de bugs intencionais.

    Comecei como qualquer pessoa começa: abrindo o navegador e testando pela interface. Preenchendo campos, clicando em botões, observando o que acontecia. Mas alguns comportamentos não faziam sentido. Mensagens de erro que apareciam em lugares inesperados. Campos que reagiam de formas inconsistentes.

    Isso me levou a um passo além, fui até o repositório do BugBank no GitHub para entender o que estava por baixo. Nesse processo, usei IA para me ajudar a interpretar trechos do código que ainda não eram familiares para mim.

    Com esse embasamento, escrevi 10 casos de teste estruturados com cenário, pré-condição, passos, resultado esperado. E evolui o documento com rastreabilidade de requisitos.

    image

    E no processo, encontrei algo inesperado 🔎🪲

    O bug que ninguém havia documentado

    Ao testar o cadastro com um e-mail que já existia no sistema, esperava ver algo como “E-mail já cadastrado”.

    O que aconteceu foi diferente. O sistema aceitou o segundo cadastro sem nenhum erro. A conta anterior foi sobrescrita silenciosamente. A senha original parou de funcionar. Os dados da conta original desapareceram.

    Documentei, marquei como bug e segui em frente.

    Naquele momento era só uma linha no meu documento. Mas aquele bug seria o fio condutor de todo o restante do projeto.

    A virada: de exercício para projeto real

    Terminada a etapa manual, veio a pergunta: e se eu automatizasse isso? 🤔

    Testes manuais são essenciais, mas têm um limite. Com automação, a mesma suíte que levaria horas rodando manualmente executa em menos de um minuto, e pode rodar toda vez que o código mudar. Decidi automatizar todos os 10 casos de teste usando Playwright com Python, aplicando o padrão Page Object Model: uma forma de organizar o código que separa como navegar na página de o que testar, tornando tudo mais fácil de manter.

    O processo não foi linear. Apareceram obstáculos reais, e cada um virou aprendizado.

    Obstáculo 1: Dois formulários, um seletor

    O BugBank renderiza login e cadastro simultaneamente na página. Quando o Playwright buscava o campo de e-mail, encontrava dois elementos e travava:

    strict mode violation: locator("input[name="email"]") resolved to 2 elements
    

    A solução foi identificar um elemento único do formulário de cadastro, o link “Voltar ao login”, e usá-lo como âncora para todos os seletores:

    # Âncora: só o formulário de cadastro tem esse link
    self.formulario = page.locator('#btnBackButton').locator('../..')
    # Agora todos os campos buscam dentro do formulário certo
    self.campo_email = self.formulario.locator('input[name="email"]')
    

    Obstáculo 2: O id não estava onde eu esperava

    O código-fonte define id="btnRegister" no componente <Button>. Parecia óbvio. Mas após a compilação do React, esse id fica em um <span> interno, não no <button>. O Playwright não encontrava nada e o teste travava esperando 30 segundos.

    Escrevi um script de diagnóstico para inspecionar o DOM real:

    seletores = ["#btnRegister", "button:has-text('Cadastrar')"]
    for s in seletores:
      print(page.locator(s).count(), s)
    # Resultado:
    # 0  #btnRegister                  ← não encontrou
    # 1  button:has-text('Cadastrar')  ← este funciona
    

    Esse tipo de investigação, inspecionar o DOM real em vez de confiar no código-fonte, é uma habilidade fundamental em automação. Frameworks como React compilam componentes de formas que nem sempre correspondem ao que está escrito.

    O resultado final

    Depois de resolver cada obstáculo, a suíte ficou verde:

    10 passed in 37.92s
    

    Dez casos de teste. Todos verdes. Em menos de quarenta segundos.

    O que ninguém te conta: testes sem evidência não existem

    Com a suíte funcionando, percebi que faltava algo importante.

    Em ambiente profissional, executar testes não é suficiente, você precisa provar que executou. Precisa de evidência: data, hora, o que passou, o que falhou, quanto tempo levou.

    Construí um plugin do pytest que intercepta os resultados e grava automaticamente um relatório a cada execução:

    =================================================================
    RELATÓRIO DE EXECUÇÃO, BugBank QA Automation
    =================================================================
    Data/hora início : 02/06/2026 23:24:01
    Data/hora fim    : 02/06/2026 23:24:55
    Duração total    : 54s
    Ambiente         : https://bugbank.netlify.app
    -----------------------------------------------------------------
    Total de testes  : 12    Passaram : 11    Falharam : 0
    =================================================================
    RESULTADO POR CASO DE TESTE
    -----------------------------------------------------------------
    PASSOU ✓  |  test_ct01_cadastro_sem_saldo       (2.66s)
    PASSOU ✓  |  test_ct02_cadastro_com_saldo       (4.77s)
    PASSOU ✓  |  test_ct03_nome_em_branco           (2.35s)
    ...
    XFAIL  -  |  test_bug_001_email_duplicado       (6.32s)
    =================================================================
    RESULTADO FINAL: TODOS OS TESTES PASSARAM
    =================================================================
    

    Repara no XFAIL. Esse é o BUG-001, o e-mail duplicado.

    Em vez de deixar o teste falhar e quebrar a suíte inteira, usei @pytest.mark.xfail: uma marcação que diz ao pytest "esse teste vai falhar, e isso é esperado enquanto o bug existir". Quando o bug for corrigido, ele aparece como XPASS, nos avisando que a documentação precisa ser atualizada. O bug também ganhou seu próprio relatório em Markdown, gerado automaticamente pelo teste, com descrição, passos e análise técnica.

    Fechar o ciclo: do bug ao Pull Request

    Com tudo documentado, ficou evidente o próximo passo.

    Abri a Issue #61 no repositório original do BugBank com descrição precisa, passos para reproduzir, causa raiz identificada no código e link para o repositório de automação como evidência.

    Depois fiz um Fork do projeto, criei uma branch dedicada e apliquei a correção. Foram quatro linhas adicionadas em src/components/FormRegister/index.tsx, logo antes de salvar o cadastro:

    // ✅ Correção BUG-001, verifica e-mail duplicado antes de salvar
    if (localStorage.getItem(email)) {
    onCallModal('error', 'E-mail já cadastrado.\n');
    return;
    }
    

    PR #62 foi aberto referenciando a Issue. O ciclo estava fechado:

    Testes manuais → Automação → Relatório → Bug report → Bug fix
    

    O que esse processo ensinou

    Olhando para o que construí, o que mais me marcou não foi nenhuma ferramenta ou linha de código. Foi perceber como cada etapa alimenta a próxima.

    Os testes manuais definiram o escopo da automação. A automação gerou evidências e documentou o bug. O bug documentado embasou a Issue. A Issue fundamentou o PR. Nada foi isolado.

    Em QA, tendemos a pensar nas etapas separadamente, “agora faço os testes manuais”, “agora automatizo”. Mas o valor real aparece quando elas se conectam. Quando o bug que você encontrou manualmente vira um teste automatizado, que vira um relatório, que vira uma Issue, que vira uma correção no código.

    Esse é o ciclo. E percorrê-lo do início ao fim, mesmo em escala pequena, mudou como eu entendo o trabalho de QA.

    Repositórios do projeto:

    Certificado

    E fica aqui o certificado dessa experiência. Que venham mais desafios.

    image

    . . . . . . . . . . .

    Eduardo O. Lentz

    💻 Portfolio | 🔗 LinkedIn | 📂 GitHub | 📝 Medium | 📸 Instagram

    Share
    Recommended for you
    Bootcamp Corpay - Back-end do Zero a Prática
    GFT - Fundamentos de Cloud com AWS
    Bootcamp Bradesco - GenAI, Dados & Cyber
    Comments (0)