分散アプリケーションへの傾向が続くにつれて、Java アプリケーションのテストはますます複雑になってきています。分散システムには多数のマイクロサービスが関与しているため、すべてのコンポーネントにわたる一貫性の確保、障害の管理、データの整合性の検証が不可欠です。アプリケーションが期待どおりに動作することを保証するには、包括的なエンドツーエンドのテストが不可欠です。
動作駆動開発 (BDD) は、アプリケーションの動作を自然言語で定義することでこれらの課題に対処し、分散アプリケーションのテスト ケースの説明と理解を簡素化します。
しかし、BDD を分散 Java アプリケーションのテストに統合すると、独自の一連の課題が生じます。複数のサービスの BDD シナリオの維持、テスト環境の調整、サービスとテスト データの管理は、困難な作業となる場合があります。
このブログ投稿では、Testkube が分散 Java アプリケーションに対して Cucumber を使用して BDD テストを合理化し、プロセスをより効率的かつ管理しやすくする方法を検討します。
Cucumber は、広く使用されている BDD テスト ツールの 1 つです。 Gherkin を使用すると、チームは自然言語を使用してアプリケーション機能を定義できます。 Java を含むさまざまなプログラミング言語のサポートが含まれています。また、一般的な開発フレームワークとうまく統合できるため、一般的な選択肢となっています。最後に、詳細なレポートが生成され、テストに関する洞察が得られます。
Cucumber は BDD を実装するための優れたツールですが、特に Kubernetes 環境で分散アプリケーションをテストする場合には課題があります。
テスト データの処理は、特に Kubernetes のような分散環境では困難な場合があります。 Cucumber では、ステップ間で状態とテスト データを共有する必要があるため、確実な分離は複雑ですが重要です。
コンピューティング、メモリ、ストレージなどのリソースは、Kubernetes で動的にプロビジョニングされます。 Cucumber はこれらのリソースにアクセスする必要があり、これを構成するのは困難です。
分散した Cucumber テスト実行からのテスト結果を集約するのは困難であり、すべての結果を 1 つのダッシュボードにまとめるには追加のセットアップが必要になる場合があります。
Kubernetes はデプロイメント、スケーリング、アプリ管理を自動化しますが、Cucumber と連携するように構成するとともに管理する必要がある抽象化レイヤーを追加します。ここで、Testkube のようなツールが登場します。
Testkube は、テスト プロセス全体を簡素化および合理化するために、Kubernetes 用に構築された統合テスト フレームワークを提供します。テスト チームは、Kubernetes クラスター上でテストを保存、実行、管理できます。テストを Kubernetes CRD として定義し、すべてのテストを管理し、必要に応じてスケーリングするための最新のソリューションを提供します。
Testkube を使用すると、必要なインフラストラクチャ コンポーネントのプロビジョニングから、他のテスト ツールとのシームレスな統合、複雑なテストの調整まで、すべてを含むテスト ワークフローを作成できます。詳細については、テスト ワークフローを参照してください。
BDD テストのために Testkube で Cucumber を使用する方法を見てみましょう。 Gradle を使用してテスト ワークフローを作成し、それに Cucumber テストを統合します。
このリポジトリには、この例に必要なファイルがすべて含まれています。
Testkube アカウントを取得します。
Kubernetes クラスター - ローカルの Minikube クラスターを使用しています。
クラスター上に構成された Testkube エージェント。
前提条件が整ったら、Testkube エージェントが構成されたターゲット Kubernetes クラスターを準備する必要があります。
[テスト ワークフロー] タブに移動し、[新しいテスト ワークフローを追加] をクリックします。
これには 3 つのオプションが表示されます:
最初から作成 - ウィザードを使用してテスト ワークフローを作成します。
例から開始 - 既存の k6、cypress、playwright の例を使用します.
yaml からインポート - 独自のテスト ワークフローをインポートします.
このワークフローを作成するには、「最初から作成」オプションを選択します。
ワークフローの名前を入力し、タイプとして Gradle を選択します。
実行コマンドを指定します。この場合、gradle テストを提供します。
Gradle バージョンを指定します。8.5.0-jdk11 を使用します。
次の画面で、テスト ファイルのソースを指定します。これは、Git リポジトリ、文字列、またはファイルのいずれかです。この場合、Git リポジトリを使用します。
次の画面では、yaml 仕様ファイルが生成され、出力が表示されます。
アーティファクトのステップに「condition: always」を追加して yaml を更新し、ステップが失敗したかどうかに関係なく、ログが常に収集されるようにします。
kind: TestWorkflow apiVersion: testworkflows.testkube.io/v1 metadata: name: gradle-cucumber namespace: testkube labels: test-workflow-templates: "yes" spec: use: - name: official--gradle--beta config: run: gradle test version: 8.5.0-jdk11 content: git: uri:<a href="https://github.com/kubeshop/testkube-examples.git"> https://github.com/kubeshop/testkube-examples.git</a> revision: main paths: - Cucumber Test Using Gradle container: workingDir: /data/repo/Cucumber Test Using Gradle steps: - condition: always artifacts: paths: - '**/*'
YAML ファイルには、YAML で指定した詳細がリストされているため、一目瞭然です。以下は、テスト内容を説明する Cucumber 機能ファイルです。
Feature: Hello World Scenario: Print Hello World Given I have a working hello world example When I run the hello world example Then I should see "Hello World" on the console
リポジトリには、テスト ステップやテスト ランナーなどの他のファイルが含まれており、これらには Cucumber テストを実行するための関連コードが含まれています。
「作成」をクリックしてテスト ワークフローを作成します。
ワークフローの準備が完了すると、新しく作成されたテスト ワークフローが画面に表示されます。それをクリックし、「今すぐ実行」をクリックしてワークフローを開始します。
各ステップのリアルタイム ログとともに、ワークフローの実行が表示されます。
テストの実行に基づいたテスト結果が表示されます。この場合、テストが失敗するように変更したため、失敗が表示されます。
このためにアーティファクトを構成したので、[アーティファクト] タブに移動して、Cucumber によって生成されたレポートを確認できます。 Testkube は実行ごとにこれらのレポートを保存するため、テストの分析が容易になります。
これは、Kubernetes テスト用に Gradle を使用して Cucumber テスト ワークフローを作成する簡単なデモでした。テスト ワークフローをさらに活用するには、カスタム ワークフローを作成し、Testkube にインポートします。
この投稿では、分散 Java アプリケーションをテストするための BDD テストの実行の複雑さをまとめています。人気の BDD テスト ツールである Cucumber と、それを Kubernetes 上で実行する際の複雑さを調べました。
また、テスト ワークフロー全体を 1 つのファイルにまとめ、テストのあらゆる側面を管理できるテスト ワークフローについても説明しました。デモでは、Java アプリケーションの BDD テストに Cucumber を使用する方法を示しました。
統合できる他のテスト ツールの詳細については、Testkube Web サイトにアクセスしてください。何か問題がある場合は、お気軽にアクティブな Slack コミュニティにメモを投稿してください。
以上がTestkube を使用して分散 Java アプリケーションの BDD テストを簡素化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。