Testcontainers è un framework Open Source che permette di generare istanze di database, Web server, Web browser, moduli message broker e qualsiasi altra applicazione o sistema sia eseguibile all'interno di un container Docker. Da MySQL a PostgreSQL, da MongoDB a Cassandra, da NGINX a Selenium, la piattaforma permette di testare qualsiasi soluzione possa essere containerizzata. Con oltre 50 moduli pronti all'uso che comprendono anche servizi Cloud based come Azure e Google Cloud.
Testcontainers e linguaggi di programmazione
Il framework supporta diversi linguaggi di programmazione tra cui Go, Java, .NET, Rust e Python. Senza contare la compatibilità con Node.JS. Ciò si traduce nella possibilità di effettuare dei test senza configurazioni d'ambiante particolarmente complesse. A questo proposito, tra i maggiori vantaggi di Testcontainers vi è quello di poter definire test di dipendenze sotto forma di codice, secondo il paradigma del "Test dependencies as code".
Tale approccio permette di eseguire i propri test con poche linee di codice. Il container viene creato così automaticamente e, una volta terminato il test, cancellato senza la necessità di un intervento da parte dell'utilizzatore. Non servono altri strumenti di terze parti, basta utilizzare un linguaggio di programmazione e Docker. In Python, ad esempio, si potrebbe eseguire un test tramite la seguente espressione:
redis = (
DockerContainer("redis:5.0.3-alpine")
.with_exposed_ports(6379)
)
redis.start()
wait_for_logs(redis, "Ready to accept connections")
Nello stesso modo in Rust sono sufficienti le righe proposte di seguito:
let docker = clients::Cli::default();
let redis = docker.run(redis::Redis::default());
Utilizzo del framework
Testcontainers consente di utilizzare un'istanza containerizzata di un database per effettuare test a livello di accesso, senza richiedere configurazioni complesse dei terminali. In tutti i casi i test inizieranno da uno stato conosciuto.
Il framework permette inoltre di automatizzare i test delle interfacce utente, come nel caso dei browser Web. Ciascun test parte da un'istanza completamente pulita, senza doversi preoccupare dell'effetto di eventuali aggiornamenti o di modifiche a carico delle estensioni.