Testcontainers は、実際の依存関係を Docker コンテナとして使用して統合テストを記述するための好ましい選択肢です。 この記事では、以下について説明します。
- GitHub Actions CI で Testcontainers ベースのテストを実行する方法。
- Test containers Cloud を使用するように GitHub Actions を構成する方法。
- Testcontainers Cloud ダッシュボードの Testcontainers の使用パターン。
GitHub Actionsを使用して、Spring BootアプリケーションでTestcontainersベースの統合テストを実行する方法を見てみましょう。 この記事では、 testcontainers-showcase アプリケーションを使用して、GitHub Actions を使用してテストを実行する方法を示します。
ローカルマシンにDockerがインストールされている場合は、次のようにリポジトリをクローンしてローカルでテストを実行できます。
git clone https://github.com/testcontainers/testcontainers-showcase.git
cd testcontainers-showcase
./mvnw verify
GitHub Actions CI の構成
次の構成で GitHub Actions 構成ファイル .github/workflows/ci.yml
を追加しましょう。
name: CI Build
on:
push:
branches:
- '**'
jobs:
build:
name: Maven Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Java 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- name: Build with Maven
Testcontainers ライブラリでは、テストを実行するために 有効な Docker 環境が必要です 。 GitHub Actions はデフォルトで Docker 環境を提供するため、有効な Docker 環境を提供するために特別に何も構成する必要はありません。
ここで .github/workflows/ci.yml
ファイルを追加し、変更をコミットしてプッシュすると、GitHub Actions CI パイプラインが自動的にトリガーされ、テストが正常に実行されます。
Testcontainers Cloud を使用するための GitHub Actions の構成
デフォルトの Docker 環境を使用して GitHub Actions で Testcontainers ベースのテストを実行できますが、テストに必要なコンテナの実行の負担を Testcontainers Cloud にオフロードすることで、テストの実行を高速化できます。
Testcontainers Cloudにアクセスし、まだお持ちでない場合は無料アカウントを取得してください。
Testcontainers Cloudにログインしたら、 Webアプリのインストール手順に従って サービストークンを作成できます。 次に、トークンを GitHub シークレットとして TC_CLOUD_TOKEN
という名前で構成します。
次に、 .github/workflows/ci.yml
ファイルを更新して、Testcontainers Cloud Agent を次のように構成しましょう。
name: CI Build
on:
push:
branches:
- '**'
jobs:
build:
name: Maven Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Java 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- name: Setup Testcontainers Cloud Client
uses: atomicjar/testcontainers-cloud-setup-action@v1
with:
token: ${{ secrets.TC_CLOUD_TOKEN }}
- name: Build with Maven
run: ./mvnw verify
atomicjar/testcontainers-cloud-setup-action@v1
を使用して Testcontainers Cloud エージェントを起動する手順を追加しました。また、GitHub Actions Secrets からフェッチされた Service Account Token 値と共に、トークンを引数として渡しました。
ここで、変更をコミットしてプッシュすると、テストが Testcontainers Cloud を使用して実行されていることを示す次のログ ステートメントに気付くはずです。 また、テストはデフォルトのDocker環境よりも高速に実行されることも確認できます。
[testcontainers-lifecycle-0] INFO org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 78+testcontainerscloud
API Version: 1.43
Operating System: Ubuntu 22.04.2 LTS
Total Memory: 15537 MB
Testcontainers Cloud Turbo モードと並行してテストを実行する
Testcontainers Cloud Turbo モードでは、テストを並行して実行できるため、各テストプロセスが独自のクラウド環境を受け取り、テストの並列化をスケーラブルにすることができます。 Testcontainers Cloud Turboモードの詳細については、 ナレッジベースをご覧ください。
CIでターボモードをオンにするには、次のように TC_CLOUD_CONCURRENCY
環境変数を渡すこともできます。
- name: Setup Testcontainers Cloud Client
uses: atomicjar/testcontainers-cloud-setup-action@v1
with:
token: ${{ secrets.TC_CLOUD_TOKEN }}
env:
TC_CLOUD_CONCURRENCY: 2
ターボモードを有効にすると、ビルドツールのテスト並列化機能を活用して、テストを並行して実行できます。 次のように、4つのフォークを使用してテストを実行するように Maven Surefire Plugin を構成できます。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<parallel>classes</parallel>
<forkCount>4</forkCount>
</configuration>
</plugin>
ターボ モードとテスト並列化を使用すると、テストの実行が高速になります。 Testcontainers Cloud がアプリのコンテナ依存関係を処理するため、テストを並列化する場合でも、デフォルトの GitHub アクションワーカーを便利に使用していることに注意してください。
Testcontainers Cloud には、テストの実行を調べるダッシュボードも用意されています。
Testcontainers Cloud からのテスト実行に関するインサイト
Testcontainers Cloud にログインすると、ダッシュボード ページにリダイレクトされ、図 1に示すように、過去 30 日間の Testcontainers アクティビティと上位 10 のイメージを確認できます。
また、特定のユーザーまたはサービス アカウントを選択して、その特定のアカウントのアクティビティを確認することもできます。
図 2に示すように、Testcontainers Cloud テスト実行セッションを確認できます。
データベースやメッセージ ブローカーなど、特定のバージョンのサービスを使用している場合は、同じバージョンのコンテナーでテストを実行することをお勧めします。 ダッシュボードから、実行中のコンテナの概要を取得でき、予期しないバージョンでテストが実行されているかどうかを簡単に把握できます (図 3)。
このスクリーンショットでは、テストがさまざまなバージョン (15-alpine、 15.2-alpine、 15.3-alpine) の postgres
コンテナーを使用して実行されていることがわかりますが、これはおそらく必要なものではありません。 ダッシュボードは、この種の問題を見つけるのにも役立ちます。
また、各コンテナの実行時間も確認できます(図 4)。
このビューを使用すると、別々のテスト クラスに対して複数のコンテナーを実行するかどうか、 またはシングルトン コンテナー パターン を利用して複数のテスト クラスに同じコンテナー セットを使用するかどうかを簡単に評価できます。
JUnit 5 を使用した Testcontainers のライフサイクル管理の詳細については、 こちらのガイドをご覧ください。 また、JUnit 5を使用したTestcontainersコンテナのライフサイクル管理のビデオ版もご覧いただけます。
結論
この記事では、Testcontainers ベースのテストを実行するように GitHub Actions を構成する方法と、Testcontainers Cloud を活用してコンテナー ワークロードをスケールアップする方法について説明しました。 また、ターボ モードの使用方法と、テスト並列化手法を使用してテストを迅速に実行する方法についても検討しました。 最後に、Testcontainers Cloudダッシュボードを使用してTestcontainers Cloudの使用状況に関する洞察を得る方法を見てきました。
Testcontainers Cloudの素晴らしさを自分で体験してみませんか? 今すぐ無料アカウントを作成しましょう。
さらに詳しく
- Docker Newsletter を購読してください。
- 無料アカウントを作成して、Testcontainers Cloud の使用を開始してください。
- Testcontainers Slack で接続します。
- Testcontainers のベスト プラクティスについて説明します。
- Testcontainers ガイドから開始します。