Como integrei testes e2e do Cypress em pipeline do Jenkins

Como integrei testes e2e do Cypress em pipeline do Jenkins

Índice

  1. Motivação

  2. Configurando o Jenkins

  3. Criando a pipeline

  4. Integrando os testes do Cypress

  5. Plugin de relatório (Test Results Analyser)

  6. Execução automática (Build triggers)


Motivação

A utilização de pipelines do Jenkins para executar testes end-to-end (E2E) do Cypress traz vantagens significativas:

  1. Automatização eficiente:

    • Permite a automação consistente e contínua dos testes E2E do Cypress, melhorando a eficiência do processo de teste.
  2. Detecção rápida de problemas:

    • Identifica rapidamente falhas e regressões, possibilitando correções imediatas antes da integração no ambiente de produção.
  3. Integração contínua:

    • Facilita a integração contínua, permitindo que as equipes incorporem alterações de código regularmente.
  4. Padronização e redução de erros:

    • Padroniza a execução dos testes E2E, reduzindo erros humanos e mantendo consistência no processo.
  5. Rastreabilidade e relatórios eficientes:

    • Oferece rastreabilidade completa e gera relatórios automáticos para análise rápida dos resultados.
  6. Economia de tempo e recursos:

    • Automatiza as execuções, economizando tempo e recursos, permitindo que a equipe se concentre em tarefas críticas.

Por que Cypress e Jenkins?

Essa integração oferece execução automática de testes, relatórios centralizados, notificações e flexibilidade de configuração. A união dessas ferramentas promove eficiência, qualidade e velocidade no ciclo de automação de testes.

Configurando o Jenkins

Para executar o Cypress, precisaremos do NodeJS. Nesta parte do tutorial Jenkins e Cypress, vamos aprender como instalar o NodeJS no nosso ambiente do Jenkins. No entanto, antes de prosseguir, é necessário instalar o Cypress.

Agora, no Jenkins, siga para "Gerenciar Jenkins" > "Gerenciar plug-ins" > "Plug-ins disponíveis". Pesquise pelo plug-in NodeJS e faça a instalação.

Essa sequência de passos facilitará a configuração do ambiente necessário para a execução do Cypress no Jenkins.

Após a instalação do plug-in NodeJS, agora precisamos configurar o NodeJS no Jenkins. Siga estes passos:

  1. Acesse "Gerenciar Jenkins" > "Configuração de ferramenta global (Tools)".

  2. Clique em "Adicionar NodeJS (NodeJS instalações)".

  3. Forneça um nome para a sua instalação do NodeJS, por exemplo, "Node16".

  4. Marque a opção "Instalar automaticamente".

  5. Escolha uma versão do NodeJS compatível com o Cypress.

  6. Adicione os pacotes Cypress para Global npm que deseja instalar.

  7. Mantenha as outras configurações como estão.

Esses passos ajudarão a integrar o NodeJS ao Jenkins, proporcionando um ambiente adequado para a execução do Cypress.

Criando a pipeline

Vamos criar um novo projeto de pipeline. Siga estes passos:

  1. Acesse o Jenkins e clique em "Novo tarefa".

  2. Escolha a opção "Pipeline" na lista.

  3. Continue configurando o seu pipeline conforme necessário.

Desça a página até encontrar as opções de Pipeline e faça as atualizações de acordo com o seu repositório Git. Certifique-se de ajustar as configurações conforme necessário para refletir as especificidades do seu projeto.

Integrando os testes do Cypress

Nesta etapa, iremos criar o arquivo "Jenkinsfile", que servirá como o executor da pipeline no Jenkins. Além disso, vamos definir o script de comando para execução.

  1. Criando o arquivo Jenkinsfile
pipeline {
    agent any

    tools { nodejs 'Node16' }

    stages {
        stage('Install dependencies') {
            steps {
                sh 'npm i'
            }
        }
        stage('Running production backtests') {
            steps {
                sh 'npm run prod:regress'
            }
        }
    }
    post {
        always {
            junit 'results/*.xml'
        }
    }
}

O script de pipeline acima descreve um processo simples de construção, teste e relatório usando o Jenkins:

  • Agente e Ferramentas:

    • O pipeline é configurado para ser executado em qualquer agente disponível.

    • Utiliza a ferramenta NodeJS na versão 'Node16'.

  • Estágios:

    1. Install dependencies:

      • Instala as dependências do projeto usando o comando npm i.
    2. Running production backtests:

      • Executa os testes de regressão em ambiente de produção usando o comando npm run prod:regress.
  • Pós-processamento:

    • Independentemente do resultado, o pipeline sempre executa a etapa post, que neste caso inclui a coleta de resultados de teste usando o JUnit ('results/*.xml').

Este pipeline é uma estrutura básica que pode ser expandida para atender às necessidades específicas do seu projeto.

Plugin de relatório (Test Results Analyser)

Este plugin no Jenkins reúne os resultados de testes de todos os builds em um job, em formato de tabela. Os cenários de teste são listados nas linhas, enquanto os builds ficam nas colunas, exibindo os resultados como PASS, FAILED, SKIP, etc.

É um componente crucial em minha abordagem para analisar falhas. Facilita a identificação rápida de testes instáveis (alternando entre passar e falhar) ou quando um teste começa a falhar de maneira constante, incluindo a data exata. Sem ele, seria necessário revisar manualmente build por build, o que consumiria considerável tempo.

Referência: https://plugins.jenkins.io/test-results-analyzer/

Execução automática (Build triggers)

O Jenkins oferece um recurso nativo de agendamento que permite executar um job em horários específicos de forma recorrente. Isso é útil para agendar a execução de suites de testes em momentos convenientes, como à noite. Dessa forma, ao chegar pela manhã, você pode analisar os resultados dos testes.

Mesmo se não houver uma execução imediatamente após um deploy ou um pipeline configurado, esse recurso é valioso. Pode ser usado para automatizar processos diários, como a execução de testes críticos em horários específicos. Para configurar, acesse as Configurações do Job > Build Triggers e defina os dias da semana e os horários desejados. Isso oferece flexibilidade para integração contínua.