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
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.
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.
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.
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.
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à
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 👋🏻
Seja o primeiro a comentar