Java™ 機能テスト
AEM as a Cloud Service 用の Java™ 機能テストの作成方法を説明します
機能テストの概要 getting-started-functional-tests
Cloud Manager で新しいコードリポジトリを作成すると、サンプルテストケースを含む it.tests フォルダーが自動的に作成されます。
it.tests フォルダーを自動作成する前にリポジトリが作成された場合は、AEM プロジェクトアーキタイプを使用して最新バージョンを生成することもできます。it.tests フォルダーの内容を取得したら、それを自身のテストの基礎として使用し、次の操作を実行できます。
- テストケースを作成します。
- テストをローカルで実行します。
- コードを Cloud Manager リポジトリにコミットし、Cloud Manager パイプラインを実行します。
カスタム機能テストの作成 writing-functional-tests
アドビが製品機能テストの作成に使用するのと同じツールを、カスタム機能テストの作成に使用できます。テストの作成方法の例として、GitHub の製品機能テストを参照してください。
カスタム機能テストのコードは、プロジェクトの it.tests フォルダーにある Java™ コードです。すべての機能テストを含んだ 1 つの JAR が生成されます。ビルドで複数のテスト JAR が生成される場合、どの JAR が選択されるかは非決定的です。テスト JAR がゼロになる場合、テスト手順はデフォルトで合格します。サンプルテストについては、AEM プロジェクトのアーキタイプを参照してください。
テストは、少なくとも 2 つのオーサーインスタンス、2 つのパブリッシュインスタンス、Dispatcher 設定など、アドビが維持管理するテストインフラストラクチャで実行されます。つまり、この設定では、カスタム機能テストは AEM スタック全体に対して実行されます。
機能テストの構造 functional-tests-structure
カスタム機能テストは、AEM にデプロイするアーティファクトと同じ Maven ビルドで生成される個別の JAR ファイルとしてパッケージ化する必要があります。一般に、このビルドは別個の Maven モジュールになります。結果として生成される JAR ファイルには、必要な依存関係がすべて含まれている必要があり、通常は jar-with-dependencies 記述子を使用する maven-assembly-plugin で作成されます。
さらに、この JAR では、Cloud-Manager-TestType マニフェストヘッダーが integration-test に設定されている必要があります。
以下は maven-assembly-plugin の設定例です。
<build>
<plugins>
<!-- Create self-contained jar with dependencies -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifestEntries>
<Cloud-Manager-TestType>integration-test</Cloud-Manager-TestType>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
この JAR ファイル内で、実行する実際のテストのクラス名は IT で終わる必要があります。
例えば、com.myco.tests.aem.it.ExampleIT という名前のクラスは実行されますが、com.myco.tests.aem.it.ExampleTest という名前のクラスは実行されません。
さらに、コードスキャンのカバレッジチェックからテストコードを除外するには、テストコードを it という名前のパッケージの下に置く必要があります(カバレッジ除外フィルターは **/it/**/*.java です)。
テストクラスは、通常の JUnit テストである必要があります。テストインフラストラクチャは、aem-testing-clients テストライブラリで使用される規則との互換性を持つように設計および設定されています。開発者は、このライブラリを使用し、そのライブラリのベストプラクティスに従うことをお勧めします。
詳しくは、aem-testing-clientsGitHub リポジトリを参照してください。
前提条件 prerequisites
- Cloud Manager でのテストは、技術管理者ユーザーを使用して実行されます。
- 機能テストの範囲を定義するコンテナ化されたインフラストラクチャは、次の境界によって制限されます。
依存関係
- aem-cloud-testing-clients:
機能テストを実行するためのコンテナ化されたインフラストラクチャの今後の変更では、カスタム機能テスト内の aem-cloud-testing-clients ライブラリをバージョン 1.2.1 以降にアップデートする必要があります。it.tests/pom.xml ファイル内の依存関係が、それに応じてアップデートされていることを確認します。
<dependency>
<groupId>com.adobe.cq</groupId>
<artifactId>aem-cloud-testing-clients</artifactId>
<version>1.2.1</version>
</dependency>
依存関係ライブラリの更新に失敗すると、「カスタム機能テスト」手順でパイプラインにエラーが発生します。
ローカルテストの実行 local-test-execution
Cloud Manager パイプラインで機能テストをアクティブ化する前に、AEM as a Cloud Service SDK または実際の AEM as a Cloud Service インスタンスを使用して、機能テストをローカルで実行することをお勧めします。
IDE での実行 running-in-an-ide
テストクラスは JUnit テストなので、Eclipse、IntelliJ、NetBeans などの主要な Java ™ IDE から実行できます。製品機能テストとカスタム機能テストはどちらも同じテクノロジーに基づいているので、製品テストをカスタムテストにコピーすることで、両者をローカルで実行できます。
ただし、これらのテストを実行する際は、aem-testing-clients(および基礎となる Sling Testing Client)ライブラリで想定される様々なシステムプロパティを設定する必要があります。
これらのシステムプロパティは次のとおりです。
sling.it.instances2 に設定する必要があります2sling.it.instance.url.1http://localhost:4502sling.it.instance.runmode.1author に設定します。authorsling.it.instance.adminUser.1adminsling.it.instance.adminPassword.1sling.it.instance.url.2http://localhost:4503sling.it.instance.runmode.2publish に設定します。publishsling.it.instance.adminUser.2adminsling.it.instance.adminPassword.2Maven を使用したすべてのテストの実行 using-maven
-
シェルを開き、リポジトリの
it.testsフォルダーに移動します。 -
Maven を使用してテストを開始する上で必要なパラメーターを指定して、次のコマンドを実行します。
mvn verify -Plocal \
-Dit.author.url=https://author-<program-id>-<environment-id>.adobeaemcloud.com \
-Dit.author.user=<user> \
-Dit.author.password=<password> \
-Dit.publish.url=https://publish-<program-id>-<environment-id>.adobeaemcloud.com \
-Dit.publish.user=<user> \
-Dit.publish.password=<password>