Seu primeiro teste automatizado com Cypress, explicado pra quem nunca programou
Muita gente que trabalha com teste manual trava na hora de começar a automatizar. Parece que precisa saber programar antes. Não precisa: um teste automatizado é só uma lista de passos, igual ao que você já faz na mão.
Vou mostrar o caminho mais curto até ver um teste rodando sozinho.
Todo teste é feito de 3 coisas
- Seletor: como o robô acha o elemento na tela (o campo, o botão)
- Ação: o que ele faz com o elemento (clicar, digitar)
- Conferência: como ele sabe que deu certo
Sem a conferência, não é teste: é só um robô clicando.
Instalando
Com o Node instalado, numa pasta vazia:
npm init -y
npm install cypress --save-dev
npx cypress open
O Cypress abre uma janela e cria a estrutura de pastas sozinho. Escolha E2E Testing e um navegador.
O teste
Crie o arquivo cypress/e2e/login.cy.js. Vou usar o Sauce Demo, um site feito para treinar automação:
describe('Login', () => {
it('entra com usuário e senha', () => {
cy.visit('https://www.saucedemo.com')
cy.get('[data-test="username"]').type('standard_user')
cy.get('[data-test="password"]').type('secret_sauce')
cy.get('[data-test="login-button"]').click()
cy.get('[data-test="title"]').should('have.text', 'Products')
})
})
Lendo em português:
describe('Login'): junte numa caixa chamada Loginit('entra com usuário e senha'): um teste, e o nome diz o que ele conferecy.visit: abre o sitecy.get('[data-test="username"]'): o seletor, acha o campo de usuário.type(...)e.click(): as ações.should('have.text', 'Products'): a conferência, entrou mesmo na página de produtos?
De onde vem o seletor?
Clique com o botão direito no campo, depois em Inspecionar. O DevTools mostra o HTML do elemento. Se ele tiver um atributo data-test, use esse: ele existe justamente para teste e não muda quando alguém troca a cor ou o texto do botão.
Duas dicas que evitam dor de cabeça
Não use cy.wait(3000). Esperar um tempo fixo deixa o teste lento, e se o site demorar 4 segundos ele quebra igual. O should já tenta de novo sozinho por até 4 segundos até o elemento aparecer.
Teste também o que dá errado. Senha errada mostra a mensagem de erro? Campo vazio avisa? É nesse cenário negativo que mais aparece bug, e quase ninguém testa:
it('mostra erro com senha errada', () => {
cy.visit('https://www.saucedemo.com')
cy.get('[data-test="username"]').type('standard_user')
cy.get('[data-test="password"]').type('errada')
cy.get('[data-test="login-button"]').click()
cy.get('[data-test="error"]').should('contain', 'do not match')
})
Próximos passos
Daqui o caminho natural é: tirar a URL repetida para o baseUrl do cypress.config.js, criar comandos reutilizáveis (cy.login()) e fazer o teste rodar sozinho a cada push no GitHub Actions.
Eu gravei esse caminho todo, do VS Code até o teste rodando no GitHub Actions, num curso curto na Udemy (nota 4,8). Se ajudar alguém, até 3/12 ele sai por R$ 24,90 com o cupom LANCAMENTO: https://www.udemy.com/course/cypress-para-leigos-testes-automatizados-do-zero/?couponCode=LANCAMENTO
Se tiver dúvida sobre por onde começar em testes, comenta aí que eu respondo.