Duvida sobre infra de testes automáticos
Procuro ajuda pra resolver um problema que tenho hoje no meu ambiente de testes de integração.
-
Ambiente: PHP 7.2
-
Ambiente dos testes: PHPunit
-
Contexto: Atualmente, para cada cenário eu subo um banco de dados de teste, rodo as instruções do meu cenário e dropo o banco. Essa estrutura foi boa pois permitiu a execução paralela dos cenários de teste.
Os cenários de teste basicamente estão validando o comportamento do sistema a partir de chamadas de API. Exemplo, eu chamo o endpoint de cadastrar cobranças, passando seus parametros e valido se a cobrança foi criada com sucesso. -
Problema: O problema atual é que restaurar e dropar um banco a cada cenário custa muito tempo. Atualmente o banco sobe e dropa em torno de 15s e o cenário executa em apróximadamente 2 a 4 segundos. Sim, é necessário ter a instancia do banco de dados por causa da estrutura legado do sistema.
Venho testando algumas soluções mas parece que nada consegue resolver este problema.
- Tentei converter o banco para sqlite. Não funciona pois a estrutura do banco possui alguns comandos que não existem no sqlite.
- Tentei mockar os models. Não foi possível por causa da estrutura legado do sistema. Para isso precisaria refatorar muita estrutura do sistema, o que não é viável no momento.
- Tentei rodar os cenários dentro de transactions porém também não obtive sucesso. Como os cenários são chamadas na API do sistema, os dados são salvos e eu não consigo fazer o rollback pelo phpunit.
- Ouvi falar de snapshot do banco mas até onde eu pesquisei sobre acaba sendo algo similar ao que tenho hoje, todo cenário irá restaurar um estado do banco para executar o cenário.