Hoje em “pitadas de Cypress”, aprenda como integrá-lo com o serviço Percy.io para a realização de testes de comparação de snapshots

Essa é pro Pedro Hyvo, que esses dias sugeriu o seguinte tema para a série.

Testes de regressão visual seria uma boa.

Boa mesmo Pedro.

Então vamos lá!

Mas antes deixa eu contextualizar o que são testes de regressão visual.

Testes de regressão visual são aqueles que interagem com a aplicação como um usuário real faria, porém, além de interagir (e as vezes fazer verificações, ou assertions), tais testes também tiram snapshots ao longo da execução, e estas são comparadas com outras previamente aprovadas. Caso haja uma diferença visual, você saberá antes de publicar a nova versão do software para seus usuários.

Em alguns casos, a diferença visual pode ser esperada, devido a adição de uma nova funcionalidade ou uma mudança de layout.

Por outro lado, as vezes a diferença pode ser devido a um bug real. Neste casos, você achou o bug antes de seus tão preciosos clientes (os usuários do software).

Vejamos um exemplo de uma aplicação para a compra de ingressos.

Antes de mais nada, precisamos instalar os pacotes do Cypress e do Percy como dependências de desenvolvimento. Tal processo pode ser realizado com o seguinte comando.

npm i cypress @percy/cypress -D

Depois de tudo instalado e com o Cypress inicializado (ou seja, depois de rodar o comando  npx cypress open pela primeira vez), é hora de fazer alguns ajustes nos arquivos do Cypress, antes de partir pra escrita do teste.

No topo do arquivo cypress/support/commands.js, importe a biblioteca @cypress/percy. Veja como abaixo.

// cypress/support/commands.js

import '@percy/cypress'

Depois disso, atualize o arquivo cypress/plugins/index.js com o seguinte.

// Isso não é mais necessário.
// Leia a atualização no final do conteúdo.
// cypress/plugins/index.js

let percyHealthCheck = require('@percy/cypress/task')

module.exports = (on, config) => {
  on("task", percyHealthCheck)
}

Agora vejamos o teste.

// cypress/integration/ingressos.spec.js

describe('Ingressos', () => {
  beforeEach(() => cy.visit('https://exemplo.com/ingressos'))

  it('habilita o botão "Enviar" após preencher os campos obrigatórios', () => {
    cy.percySnapshot('O teste começou e o formulário está vazio')

    cy.get('#name')
      .should('be.visible')
      .type('Walmyr')
    cy.get('#email')
      .should('be.visible')
      .type('walmyr@exemplo.com')

    cy.contains('Enviar')
      .should('be.visible')
      .and('be.disabled')

    cy.percySnapshot('Chegando no preenchimento do último campo obrigatório')
    cy.get('#i-agree')
      .should('be.visible')
      .check()

    cy.percySnapshot('Todos campos obrigatórios foram preenchidos')
    cy.contains('Enviar')
      .should('be.visible')
      .and('not.be.disabled')
  })
})

Por fim, basta criar uma conta no serviço Percy.io, um projeto no dashboard do Percy, e exportar o project_token como uma variável de ambiente que fique disponível no terminal onde os testes serão executados.

Obs.: Veja abaixo como exportar variáveis de ambiente no Windows e em sistemas baseados em Unix (Linux e OSX).

# Windows
$ set PERCY_TOKEN=<your token here>

# Unix 
$ export PERCY_TOKEN=<your token here>

Além disso, e em vez de rodar npx cypress run para executar os testes, você deve rodar npx percy exec -- cypress run.

Com isso, o teste irá tirar três snapshots durante sua execução. Uma no início, quando o formulário ainda não foi preenchido; outra antes de preencher o último campo obrigatório (onde o botão de enviar ainda deve estar desabilitado); e por fim, uma uma após o preenchimento de todos os campos obrigatórios, onde enfim, o botão de enviar deve estar habilitado para submissão do formulário.

Visite o projeto criado no dashboard do Percy para vizualiar as snapshots tiradas durante a execução dos testes.

Deixo aqui a documentação oficial do serviço Percy.io para integração com o Cypress.

Atualização: O Percy atualizou para a versão 3.x.x e algumas mudanças são necessárias. Segue a documentação para a realização do upgrade.


E aí, gostou?

Deixa um comentário com o que devo escrever em uma próxima “pitada de Cypress“.


Este conteúdo foi traduzido para inglês e pode ser encontrado no DEV Community.


Ficou curioso(a) e quer aprender mais sobre automação de testes com Cypress? Conheça meus cursos no Udemy.


Bons testes! 🎉

Um comentário em “Como realizar testes de regressão visual com Cypress e Percy

Deixe um comentário