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.

Alguém sabe se existe alguma outra opção para um cenário como esse?

Alguma forma de otimizar a restauração do banco ou ferramenta que possa ajudar com isso?