Solvro Talks - Testowanie integracyjne z Testcontainers
Czym są Testcontainers?
Testcontainers to biblioteka dostępna w różnych językach programowania, która
wykorzystuje Docker do uruchamiania lekkich kontenerów w celu symulowania
zewnętrznych zależności systemowych. Przykładowo, można uruchomić kontenery z bazami
danych, brokerami wiadomości, serwisami sieciowymi i innymi komponentami, z którymi
nasza aplikacja współpracuje.
Jak zacząć pracę z Testcontainers?
Aby rozpocząć pracę z Testcontainers, potrzebujemy:
1. Zainstalowanego Dockera - Docker jest niezbędny do uruchamiania kontenerów.
2. Biblioteki Testcontainers - należy dodać odpowiednią bibliotekę do projektu (np. w
przypadku Javy, dodajemy zależność do Maven lub Gradle).
3. Konfiguracji kontenerów - definiujemy, jakie kontenery będą uruchamiane w
ramach testów i jakie mają mieć konfiguracje.
Przykładowa Struktura Testu
Potrzebujemy zaciągnąc zależności z maven repository:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-bom</artifactId>
<version>1.19.8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Aby uniknąć określania wersji każdej zależności, możesz użyć BOM lub zestawienia
materiałów.
Przykładowy test z użyciem Testcontainers może wyglądać następująco:
public class MyIntegrationTest {
@Rule
public MySQLContainer mysql = new MySQLContainer("mysql:6.0");
@Test
public void testSomething() {
String jdbcUrl = mysql.getJdbcUrl();
//apply any logic related to database connection
}
}
Kontener z bazą danych MySQL jest uruchamiany przed testem i zamykany po jego
zakończeniu. Dzięki temu mamy pewność, że baza danych jest zawsze w stanie
początkowym.
Debugowanie
Debugowanie testów integracyjnych z Testcontainers jest zazwyczaj prostsze, ponieważ
możemy łatwo odtwarzać środowisko testowe. W przypadku problemów, możemy:
● Sprawdzić logi kontenerów - Testcontainers umożliwia dostęp do logów
uruchomionych kontenerów, co pomaga w diagnozowaniu problemów.
● Uruchamiać testy lokalnie - Możemy uruchamiać testy na lokalnych maszynach
deweloperskich, co ułatwia szybkie iterowanie i debugowanie.
Zalety i wady Testcontainers
Zalety:
● Łatwość użycia - Prosta konfiguracja
● Wsparcie dla wielu języków programowania - Dostępność w różnych językach,
takich jak Java, Python, .NET.
● Izolacja testów - Każdy test działa w izolowanym środowisku
● Minimalne wymagania - Wymaga jedynie zainstalowanego Dockera.
● Tworzenie własnych kontenerów - Możliwość definiowania własnych kontenerów
dostosowanych do specyficznych potrzeb.
● Projekt open-source - co umożliwia społeczności udział w rozwoju.
Wady:
● Kompatybilność - Starsze systemy operacyjne mogą nie być kompatybilne z
Dockerem, a co za tym idzie, z Testcontainers.
Podsumowanie
Testcontainers to potężne narzędzie wspomagające testowanie integracyjne poprzez
wykorzystanie kontenerów Docker. Umożliwia tworzenie izolowanych, łatwych do
odtworzenia środowisk testowych, co znacząco podnosi jakość i niezawodność testów.