UI 테스트

UI 테스트는 Java 및 Maven, Node 및 WebDriver.io와 같은 다양한 언어 및 프레임워크(또는 Selenium을 기반으로 구축된 기타 프레임워크 및 기술)를 사용할 수 있도록 Docker 이미지에 패키지된 Selenium 기반 테스트입니다. Docker 이미지는 표준 도구를 사용하여 만들 수 있지만 실행 중에 특정 규칙을 준수해야 합니다. Docker 이미지를 실행할 때 Selenium 서버가 자동으로 프로비저닝됩니다. 아래 설명된 런타임 규칙을 통해 테스트 코드가 Selenium 서버와 테스트 중인 AEM 인스턴스에 모두 액세스할 수 있습니다.

노트

이 페이지에 설명된 대로 UI 테스트를 사용하려면 2021년 2월 10일 이전에 만들어진 단계 및 프로덕션 파이프라인을 업데이트해야 합니다.
파이프라인 구성에 대한 자세한 내용은 CI-CD 파이프라인 구성을 참조하십시오.

UI 테스트 빌드

UI 테스트는 Maven 프로젝트에서 생성된 Docker 빌드 컨텍스트에서 빌드됩니다. Cloud Manager는 Docker 빌드 컨텍스트를 사용하여 실제 UI 테스트가 포함된 Docker 이미지를 생성합니다. 요약하면 Maven 프로젝트가 Docker 빌드 컨텍스트를 생성하고 Docker 빌드 컨텍스트는 UI 테스트가 포함된 Docker 이미지를 만드는 방법을 설명합니다.

이 섹션에서는 리포지토리에 UI 테스트 프로젝트를 추가하는 데 필요한 절차를 안내합니다. 프로그래밍 언어에 대한 특별한 요구 사항이 없거나 급할 경우 AEM Project Archetype에서 UI 테스트 프로젝트를 생성할 수 있습니다.

Docker 빌드 컨텍스트 생성

Docker 빌드 컨텍스트를 생성하려면 다음과 같은 Maven 모듈이 필요합니다.

  • 테스트로 Docker 이미지를 작성하는 데 필요한 모든 다른 파일과 Dockerfile 를 포함하는 아카이브를 만듭니다.
  • ui-test-docker-context 분류자를 사용하여 아카이브에 태그를 지정합니다.

이를 수행하는 가장 간단한 방법은 Maven Assembly Plugin을 구성하여 Docker 빌드 컨텍스트 아카이브를 만들고 해당 폴더에 올바른 분류자를 할당하는 것입니다.

다양한 기술 및 프레임워크를 사용하여 UI 테스트를 작성할 수 있지만, 이 섹션에서는 프로젝트가 다음과 유사한 방식으로 표현된다고 가정합니다.

├── Dockerfile
├── assembly-ui-test-docker-context.xml
├── pom.xml
├── test-module
│   ├── package.json
│   ├── index.js
│   └── wdio.conf.js
└── wait-for-grid.sh

pom.xml 파일은 Maven 빌드를 처리합니다. 다음과 유사한 Maven 어셈블리 플러그인에 실행을 추가합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptors>
            <descriptor>${project.basedir}/assembly-ui-test-docker-context.xml</descriptor>
        </descriptors>
        <tarLongFileMode>gnu</tarLongFileMode>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

이 실행은 Maven 어셈블리 플러그인이 플러그인의 전문에서 "어셈블리 설명자"라고 하는 assembly-ui-test-docker-context.xml에 포함된 지침에 따라 아카이브를 만들도록 지시합니다. 어셈블리 설명자는 아카이브에 속해야 하는 모든 파일을 나열합니다.

<assembly>
    <id>ui-test-docker-context</id>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${basedir}</directory>
            <includes>
                <include>Dockerfile</include>
                <include>wait-for-grid.sh</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${basedir}/test-module</directory>
            <excludes>
                <exclude>node/**</exclude>
                <exclude>node_modules/**</exclude>
                <exclude>reports/**</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</assembly>

어셈블리 설명자는 플러그인에 .tar.gz 유형의 아카이브를 만들고 이 파일에 ui-test-docker-context 분류자를 할당하도록 지시합니다. 또한 아카이브에 포함해야 하는 파일이 나열됩니다.

  • Dockerfile, Docker 이미지를 작성하는 데 필수입니다.
  • wait-for-grid.sh 스크립트. 그 목적은 아래에 설명되어 있습니다.
  • test-module 폴더에서 Node.js 프로젝트에 의해 구현된 실제 UI 테스트.

또한 어셈블리 설명자는 UI 테스트를 로컬에서 실행하는 동안 생성할 수 있는 일부 파일을 제외합니다. 이를 통해 더 작은 아카이브와 더 빠른 빌드가 보장됩니다.

Docker 빌드 컨텍스트가 포함된 아카이브는 Cloud Manager에 의해 자동으로 선택되며, 이 경우 배포 파이프라인 중에 테스트가 포함된 Docker 이미지가 작성됩니다. 결국 Cloud Manager는 Docker 이미지를 실행하여 애플리케이션에 대한 UI 테스트를 실행합니다.

UI 테스트 쓰기

이 섹션에서는 UI 테스트가 포함된 Docker 이미지가 따라야 하는 규칙을 설명합니다. Docker 이미지는 이전 섹션에 설명된 Docker 빌드 컨텍스트에서 빌드됩니다.

환경 변수

다음 환경 변수가 런타임에 Docker 이미지에 전달됩니다.

변수 설명
SELENIUM_BASE_URL http://my-ip:4444 Selenium 서버의 URL
SELENIUM_BROWSER chrome, firefox Selenium 서버에서 사용하는 브라우저 구현
AEM_AUTHOR_URL http://my-ip:4502/context-path AEM 작성자 인스턴스의 URL
AEM_AUTHOR_USERNAME admin AEM 작성자 인스턴스에 로그인할 사용자 이름
AEM_AUTHOR_PASSWORD admin AEM 작성자 인스턴스에 로그인할 암호입니다.
AEM_PUBLISH_URL http://my-ip:4503/context-path AEM 게시 인스턴스의 URL
AEM_PUBLISH_USERNAME admin AEM 게시 인스턴스에 로그인할 사용자 이름
AEM_PUBLISH_PASSWORD admin AEM 게시 인스턴스에 로그인할 암호입니다.
REPORTS_PATH /usr/src/app/reports 테스트 결과의 XML 보고서를 저장해야 하는 경로입니다
UPLOAD_URL http://upload-host:9090/upload Selenium에서 액세스할 수 있도록 하기 위해 파일을 업로드해야 하는 URL입니다

Selenium이 준비될 때까지 대기 중

테스트가 시작되기 전에 Selenium 서버가 작동 중인지 확인하는 것은 Docker 이미지의 책임입니다. Selenium 서비스를 기다리는 절차는 두 단계로 구성됩니다.

  1. SELENIUM_BASE_URL 환경 변수에서 Selenium 서비스의 URL을 읽습니다.
  2. Selenium API에 의해 노출된 상태 끝점에 대해 정기적으로 폴링합니다.

Selenium의 상태 끝점이 긍정적인 응답으로 응답하면 테스트가 마지막으로 시작될 수 있습니다.

테스트 보고서 생성

Docker 이미지는 JUnit XML 형식으로 테스트 보고서를 생성하고 환경 변수 REPORTS_PATH에 지정된 경로에 저장해야 합니다. JUnit XML 형식은 테스트 결과를 보고하기 위한 광범위한 형식입니다. Docker 이미지가 Java 및 Maven을 사용하는 경우 Maven Suresfire 플러그인Maven Failsafe 플러그인이 모두 사용됩니다. 다른 프로그래밍 언어나 테스트 러너와 함께 Docker 이미지가 구현된 경우 선택한 도구에 대한 설명서를 확인하여 JUnit XML 보고서를 생성하는 방법을 알아보십시오.

파일 업로드(#upload-files)

테스트는 테스트 중인 응용 프로그램에 파일을 업로드해야 하는 경우가 있습니다. 테스트를 기준으로 하여 Selenium의 배포를 유연하게 유지 관리하기 위해 자산을 Selenium에 직접 업로드할 수 없습니다. 대신 파일을 업로드하는 것은 몇 가지 중간 단계를 거칩니다.

  1. UPLOAD_URL 환경 변수로 지정된 URL에 파일을 업로드합니다. 다중 부분 양식이 있는 하나의 POST 요청에서 업로드를 수행해야 합니다. 다중 부분 양식에는 단일 파일 필드가 있어야 합니다. 이는 curl -X POST ${UPLOAD_URL} -F "data=@file.txt"에 해당합니다. 이러한 HTTP 요청을 수행하는 방법을 알아보려면 Docker 이미지에 사용되는 프로그래밍 언어의 설명서 및 라이브러리를 참조하십시오.
  2. 업로드가 성공적으로 수행되면 요청은 text/plain 유형의 200 OK 응답을 반환합니다. 응답의 컨텐츠는 불투명한 파일 핸들입니다. 이 핸들을 <input> 요소의 파일 경로 대신 사용하여 응용 프로그램에서 파일 업로드를 테스트할 수 있습니다.

이 페이지에서는