Java™ 기능 테스트
AEM as a Cloud Service를 위한 Java™ 기능 테스트를 작성하는 방법을 알아봅니다.
기능 테스트 시작하기 getting-started-functional-tests
Cloud Manager에서 새 코드 저장소를 만들면 it.tests
폴더와 샘플 테스트 사례가 자동으로 만들어집니다.
it.tests
폴더를 생성하기 전에 사용자 저장소가 생성되었다면 AEM Project Archetype을 사용해서 최신 버전도 생성할 수 있습니다.it.tests
폴더에 콘텐츠가 생기면 자체 테스트를 위한 기반으로 이를 사용할 수 있으며, 이후 다음과 같은 작업을 수행할 수 있습니다.
- 테스트 사례 개발.
- 로컬에서 테스트 실행.
- Cloud Manager 저장소에 코드를 커밋하고 Cloud Manager 파이프라인을 실행합니다.
사용자 정의 기능 테스트 작성 writing-functional-tests
Adobe가 제품 기능 테스트를 작성하는 데 사용하는 것과 동일한 도구를 사용하여 사용자 정의 기능 테스트를 작성할 수 있습니다. 테스트 작성 방법의 예로 GitHub의 제품 기능 테스트를 사용하십시오.
사용자 정의 기능 테스트를 위한 코드는 프로젝트의 it.tests
폴더에 있는 Java™ 코드입니다. 모든 기능 테스트와 함께 단일 JAR을 생성해야 합니다. 빌드가 둘 이상의 테스트 JAR을 생성하는 경우 선택되는 JAR은 비결정적입니다. 테스트 JAR이 0이면 테스트 단계가 기본적으로 통과합니다. 샘플 테스트는 AEM Project Archetype을 참조하십시오.
테스트는 최소 두 개의 작성자 인스턴스, 두 개의 게시 인스턴스 및 Dispatcher 구성을 포함하여 Adobe에서 유지 관리하는 테스트 인프라에서 실행됩니다. 이렇게 설정하면 사용자 정의 기능 테스트가 전체 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-clients
GitHub 저장소를 참조하십시오.
사전 요구 사항 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 테스트 클라이언트) 라이브러리에서 예상하는 여러 시스템 속성을 설정해야 합니다.
시스템 속성은 다음과 같습니다.
sling.it.instances
2
로 설정해야 합니다.2
sling.it.instance.url.1
http://localhost:4502
sling.it.instance.runmode.1
author
로 설정해야 합니다.author
sling.it.instance.adminUser.1
admin
sling.it.instance.adminPassword.1
sling.it.instance.url.2
http://localhost:4503
sling.it.instance.runmode.2
publish
로 설정해야 합니다.publish
sling.it.instance.adminUser.2
admin
sling.it.instance.adminPassword.2
Maven을 사용하여 모든 테스트 실행 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>