PGDBTEMPLAT – Bancos de dados de teste PostGresql rápido em Go usando modelos
Cansado de esperar que sua suíte de teste crie lentamente e migre os bancos de dados do PostgreSQL repetidamente? Se você está escrevendo aplicativos com uso intensivo de dados, você conhece bem essa dor. Seus testes gastam mais tempo configurando o banco de dados do que realmente testando sua lógica. E se eu lhe dissesse que existe uma maneira de tornar esse processo 1,5x mais rápido, usar 17% menos memória e escalar sem esforço para centenas de bancos de dados de teste? Conheça o PGDBTEMPLAT-Uma biblioteca GO de alto desempenho que aproveita os bancos de dados de modelos nativos do PostGresql para revolucionar seu fluxo de trabalho de teste. O problema: a configuração tradicional do banco de dados é lenta a abordagem clássica para os testes de integração se parece: FUNC TestuserService (t *testing.t) {// 1. Crie um novo banco de dados // 2. Execute todas as migrações (Crie tabela, indicador, FK, FK …) // 3. Execute seu teste // 4. Quanto mais complexo seu esquema, mais lento ele fica. A solução: bancos de dados do modelo PostGresql PostGresql possui um recurso integrado brilhante: bancos de dados de modelos. Você pode criar um banco de dados “dourado” com todas as suas migrações aplicadas uma vez e depois usá -lo como um modelo para criar novos bancos de dados idênticos em milissegundos. O PGDBTemplate automatiza esse processo, fornecendo uma API simples que se encaixa perfeitamente na sua configuração de teste existente. Comece em minutos primeiro, instale a biblioteca: vá obter github.com/andrei-polukhin/pgdbtemplate Digite o modo de tela cheia de tela cheia de tela cheia, aqui está como você o usa no seu suíte de teste: pacote principal (“contexto” “Testing” “Github.com/andrei-polukin/pgdbtemplate”) *testing.m) {ctx: = context.background () // Configure o gerenciador de modelos uma vez ConnstringFunc: = func (dbname string) string {return pgdbtemplate.newfilemigrationRunner (
[]String {“./ Migrações”}, pgdbtemplate.alphabethmigrationfilessorting,) tm, _: = pgdbtemplate.newtemplatemanager (pgdbtemplate.config {ConnectionProvider: provider, migrationRunner: migroTurnner,}) TM.Initialize (CTX) Templatemanager = TM Código: = M.Run () // Limpe o TUDO TM.CLEANUP (CTX) OS.EXIT (Code)} Func testUserRepository (T *testing.t) {Ctx: = Context.background () // Teste recebe seu próprio dado isolado testdb, testdbname, err: = templatemanager.createTeTestDatabase (ctx) se err! = nil {t.fatal (err)} adiar testdb.close () adiar templatemanager.dropTabase (ctxe, testdbname) // execute sua lógica de testes sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica sobre uma lógica de dattone (ctx) / / runpatemation. ERR: = repo.createUser (“test@example.com”) // … suas afirmações} Digite o modo de tela cheia Sair do modo de tela cheia ganhos de desempenho real: os números não mentiram que executamos benchmarks extensos comparando a criação tradicional de banco de dados versus a abordagem do modelo. Os resultados falam por si mesmos: 🚀 Comparação de velocidade (mais baixa é melhor) Complexidade do esquema Modelo de abordagem tradicional Modelo de abordagem Melhoria 1 Tabela 28.9ms 28.2ms 1.03x 3 Tabelas 39,5ms 27,6ms 1,43x 5 tabelas 43.1ms 28ms 20ms 1.50x 📈 escalamento para centenas de dados de contagem de dados de dados TEMPO TEMPO TEMPO TEMPADO DE TEMPO TEMPADO 1,53S 33% 200 DBS 9,21S 5.84S 37% 500 DBS 22,31S 14,82S 34% A abordagem de modelo mantém desempenho consistente, independentemente da complexidade do esquema, enquanto a abordagem tradicional fica progressivamente mais lenta à medida que você adiciona mais tabelas, índices e restrições. Key Features ⚡ Blazing Fast: Create test databases in milliseconds instead of seconds 🔒 Thread-Safe: Perfect for parallel test execution (t.Parallel()) 🔄 Dual Driver Support: Works with both database/sql + pq and pgx 🧹 Automatic Cleanup: Comprehensive cleanup of test databases 🐳 Testcontainers Ready: Easy integration with containerized PostgreSQL 📊 Migration Flexibilidade: Suporte para corredores de migração baseados em arquivos e personalizados Como ele funciona sob a inicialização do capô: cria um banco de dados de modelo e executa todas as migrações depois de testar: para cada teste, cria um novo banco de dados usando o banco de dados Create … Modelo Cleanup: Drops Testes Databases e, finalmente Migrações de SQL repetidamente. Uso avançado usando com testContainers-go func SetUptemplatemanagerWithContainer (CTX context.Context) Erro {pgContainer, _: = PostGres.runcontainer (Ctx, TestContainers.withimage (“PostGres: 15”), PostGres.WithDatAase pgContainer.ConnectionsTring (ctx, “sslmode = desabille”) Provedor: = pgdbtemplate.newstandardConnectionProvider (FULC (DBNAME STRING) String {Return pgdbtemplate.ReplaceDatabaseinconnstring (Connstring, DBName)}) // Opções de pool de conexão de modo Configure suas conexões para desempenho ideal: // Para o provedor de banco de dados/SQL + PQ: = PGDBTemplate.NewStandardConnectionProvider (ConnStringFunc, pgdbtemplate.withmaxopenconns (25), pgdbtemplate.withMaxidLonns (10) (25), PGDBTemplate.WithMaxidLonns (10) (25), PGDBTemplate.WithMaxidLonns (10) (25), PGDBTemplate.WithMaxidLonns (10), PGDBtemplate.WithMaxidLonns (10) (25), PGDBTemplate.WithMaxidLonns (10), PGDBTEMPLATE. pgdbtemplate.newpgxConnectionProvider (ConnstringFunc, pgdbtemplate.withpgxmaxconns (10), pgdbtemplate.withpgxminconns (2),) Digite o modo de tela cheia de tela cheia quando você deve usar o PGDBTEMplate? Você tem> 10 testes de banco de dados em sua suíte, seu esquema possui> 3 tabelas com índices e relacionamentos que você executa testes com frequência durante o desenvolvimento do seu pipeline CI/CD inclui testes de integração de banco de dados Você valoriza feedback rápido sobre quebras de café, experimente! Pronto para acelerar sua suíte de teste? Introdução é fácil: vá obter github.com/andrei-polukhin/pgdbtemplate Digite Modo de tela cheia Modo de tela cheia, confira o repositório do GitHub para documentação completa, exemplos avançados e diretrizes de contribuição. Qual é a sua experiência com os testes PostGresql em Go? Você já tentou outras abordagens para acelerar seu conjunto de testes? Compartilhe seus pensamentos nos comentários abaixo!
Fonte