LAB – Convertendo relatório do Cypress para mySQL

Estou iniciando uma nova categoria aqui no 4future, a categoria LAB.

Para descrever o processo de tecnologias que estamos testando pela primeira vez e descrever a jornada de aprendizado.

No time de testes, usamos Cypress para os testes de ponta a ponta (e2e). Porém o resultado dos testes ficam isolados com time de desenvolvimento. Não temos integração com os demais times.

Nossa ideia é democratizar os resultados dos testes e2e para o time de monitoração.

Quais são os requisitos:

  • Rodar os testes sob demanda
  • Coletar os resultados de maneira clara
  • Transferir os resultados para uma base de dados mySQL
  • A rotina deve ser facilmente parametrizada e escalável

Mãos a obra

Dwight Office Tv GIF by The Office - Find & Share on GIPHY

Criei um projeto simples em typescript que será responsável pelas duas funcionalidades, rodar o Cypress e enviar os dados para o mysql.

Instalei a lib mysql2 para gerenciar a comunicação com a base de dados. Por se tratar de um projeto simples, não há necessidade de uma camada ORM ou algo similar.

Também instalei o mochawesome para melhorar o relatório do Cypress. Desabilitei as opções de “gravação de vídeo” e do relatório em “HTML”. Aqui o objetivo é que nosso relatório seja consumido por computadores, não por humanos.

[gist id=”1f6f58da5237d7a10d180684a9e0eb0a”]

Antes de mais nada, vamos dar uma olhada em um exemplo de relatório gerado pelo mochawesome, pra gente ter uma ideia do que podemos consumir.

Aqui consegui entender que a propriedade “stats” guarda um resumo de como foi todo o teste. Seguindo pelo relatório, temos o array “results” que armazena os testes de forma recursiva.

Acho que já temos um bom ponto de partida 😀

Criei um módulo para configurar o setup inicial das tabelas que receberão os dados do mochawesome chamado database.config.ts.

Aqui vou incluir o comando para criar o database e mais duas tabelas.

RUNS, para registrar o resumo de cada execução do Cypress.
RESULTS, para registrar o resultado dos testes.

[gist id=”6c640c679d70ebc39b79f5d521932341″]

Adicionei mais alguns arquivos de testes de exemplo e rodei o relatório novamente.

Para minha surpresa, o mochawesome gera um relatório por teste.

O ideal seria ler de apenas UM arquivo de relatório. Só de pensar que preciso juntar todos os dados de maneira consistente, independente de quantos testes o time de qualidade precise escrever… Uhhh.

Baby Facepalm GIF by MOODMAN - Find & Share on GIPHY

Round 2

Não é possível que eu seja o primeiro desenvolvedor a pensar nisso. Alguém com certeza já precisou atender esses requisitos antes de mim.

Motivate Good Vibes GIF by Onbo - Find & Share on GIPHY

Dei mais uma olhada (com calma) na documentação do Cypress e eis que!!!

Existe uma ferramenta 3rd party do mochawesome para mesclar os relatórios.


Instalei o mochawesome-merge e configurei o comando de merge

"cy:merge": "mochawesome-merge ./mochawesome-report/*.json > ./report/output.json"

Agora vem a parte divertida!

Codei o módulo extract.report.ts que se conecta na base mysql, lê o relatório unificado e grava os resultados dos testes.

Et voilà

Well Done Reaction GIF - Find & Share on GIPHY

O link para o projeto completo está no meu GitHub
https://github.com/quatoo/cypress-mochawesome-to-mysql

Abraços galera e até a próxima 👋🏻

Sobre Filipe Borges 15 Artigos
Coordenador do time de desenvolvimento na BNP Soluções em TI. Ex-treinador de overwatch. Viciado em resolução de problemas. Sommelier de café não-oficial e pai do Heitor

Seja o primeiro a comentar

Faça um comentário

Seu e-mail não será divulgado.


*