

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Device Farm의 테스트 프레임워크 및 내장 테스트
<a name="test-types"></a>

이 섹션에서는 테스트 프레임워크 및 기본 제공 테스트 유형에 대한 Device Farm 지원을 설명합니다.

Device Farm은 앱과 테스트를 서비스에서 관리하는 안전한 Amazon S3 버킷에 업로드하도록 하여 자동 테스트를 실행합니다. 업로드되면 서비스 관리형 [테스트 호스트](custom-test-environments-hosts.md)를 포함한 기본 인프라를 가동하고 여러 디바이스에서 병렬로 테스트를 실행합니다. 테스트 결과는 서비스 관리형 S3 버킷에 저장됩니다. 이 아키텍처를 **서비스 측 실행**이라고 하며, 테스트 호스트 인프라를 직접 관리할 필요 없이 디바이스에 물리적으로 가까운 호스트에서 테스트를 실행할 수 있는 빠르고 효율적인 방법입니다. 이 접근 방식은 여러 디바이스에서 독립적으로 테스트하고 CI/CD 파이프라인의 컨텍스트에서 테스트하는 데 적합합니다.

Device Farm의 테스트 실행 방법에 관한 자세한 내용은 [AWS Device Farm의 테스트 환경](test-environments.md) 섹션을 참조하세요.

**참고**  
Appium 테스터의 경우 로컬 환경에서 Appium 테스트를 실행하는 것이 좋습니다. [원격 액세스 세션을](remote-access.md) 사용하면 **클라이언트 측** Appium 테스트를 실행할 수 있습니다. 자세한 내용은 [클라이언트 측 Appium 테스트를](appium-endpoint.md) 참조하세요.

## 테스트 프레임워크
<a name="test-types-framework"></a>

Device Farm은 다음과 같은 모바일 자동화 테스트 프레임워크를 지원합니다.

### Android 애플리케이션 테스트 프레임워크
<a name="test-types-framework-android-list"></a>
+ [자동 Appium 테스트Appium 테스트와 통합](test-types-appium.md)
+ [계측](test-types-android-instrumentation.md)

### iOS 애플리케이션 테스트 프레임워크
<a name="test-types-framework-ios-list"></a>
+ [자동 Appium 테스트Appium 테스트와 통합](test-types-appium.md)
+ [XCTest](test-types-ios-xctest.md)
+ [XCTest UI](test-types-ios-xctest-ui.md)

### 웹 애플리케이션 테스트 프레임워크
<a name="test-types-framework-web-app-list"></a>

웹 애플리케이션은 Appium을 사용하여 지원됩니다. 테스트를 Appium으로 가져오는 방법에 대한 자세한 내용은 [Device Farm에서 Appium 테스트 자동 실행Appium 테스트를 Device Farm과 통합](test-types-appium.md) 단원을 참조하세요.

### 사용자 지정 테스트 환경의 프레임워크
<a name="test-types-framework-custom-support"></a>

Device Farm은 XCTests 프레임워크를 위한 테스트 환경의 사용자 지정을 지원하지 않습니다. 자세한 내용은 [AWS Device Farm의 사용자 지정 테스트 환경](custom-test-environments.md) 단원을 참조하십시오.

### Appium 버전 지원
<a name="test-types-framework-appium"></a>

사용자 지정 환경에서 실행되는 테스트의 경우 Device Farm은 Appium 버전 1을 지원합니다. 자세한 내용은 [AWS Device Farm의 테스트 환경](test-environments.md) 단원을 참조하십시오.

## 기본 제공 테스트 유형
<a name="test-types-built-in"></a>

기본 제공 테스트의 경우 테스트 자동화 스크립트를 작성 및 유지 관리하지 않고도 여러 디바이스에서 애플리케이션을 테스트할 수 있습니다. Device Farm은 다음의 두 가지 기본 제공 테스트 유형을 제공합니다. Device Farm은 다음과 같은 한 가지 기본 테스트 유형을 제공합니다.
+ [내장: fuzz (Android 및 iOS)](test-types-built-in-fuzz.md)

# Device Farm에서 Appium 테스트 자동 실행
<a name="test-types-appium"></a><a name="test-types-ios-appium-java-testng"></a><a name="test-types-ios-appium-java-junit"></a><a name="test-types-ios-appium-python"></a><a name="test-types-ios-appium-ruby"></a><a name="test-types-ios-appium-node"></a><a name="test-types-android-appium-java-testng"></a><a name="test-types-android-appium-java-junit"></a><a name="test-types-android-appium-python"></a><a name="test-types-android-appium-ruby"></a><a name="test-types-android-appium-node"></a><a name="test-types-web-app-appium-java-testng"></a><a name="test-types-web-app-appium-java-junit"></a><a name="test-types-web-app-appium-python"></a><a name="test-types-web-app-appium-ruby"></a><a name="test-types-web-app-appium-node"></a>

**참고**  
이 페이지에서는 Device Farm의 관리**형 서버 측** 실행 환경에서 Appium 테스트를 실행하는 방법을 다룹니다. 원격 액세스 세션 중에 로컬 **클라이언트 측** 환경에서 Appium 테스트를 실행하려면 [클라이언트 측 Appium 테스트를](appium-endpoint.md) 참조하세요.

이 섹션에서는 Device Farm의 관리형 서버 측 환경에서 실행하기 위한 Appium 테스트를 구성, 패키징 및 업로드하는 방법을 설명합니다. Appium은 네이티브 애플리케이션 및 모바일 웹 애플리케이션을 자동화하는 오픈 소스 도구입니다. 자세한 정보는 Appium 웹 사이트에서 [Appium 소개](http://appium.io/docs/en/latest/intro)를 참조하세요.

샘플 앱 및 작동 테스트에 대한 링크는 GitHub의 [Android용 Device Farm 샘플 앱](https://github.com/aws-samples/aws-device-farm-sample-app-for-android) 및 [iOS용 Device Farm 샘플 앱](https://github.com/aws-samples/aws-device-farm-sample-app-for-ios)을 참조하세요.

Device Farm에서의 테스트 및 서버 측 작동 방식에 대한 자세한 내용은 섹션을 참조하세요[AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md).

## Appium 버전 선택
<a name="w2aac24c15c41"></a>

**참고**  
 특정 Appium 버전, Appium 드라이버 또는 프로그래밍 SDKs에 대한 지원은 테스트 실행을 위해 선택한 디바이스 및 테스트 호스트에 따라 달라집니다.

 Device Farm 테스트 호스트에는 보다 간단한 사용 사례를 위해 테스트를 더 빠르게 설정할 수 있도록 Appium이 사전 설치되어 있습니다. 그러나 테스트 사양 파일을 사용하면 필요한 경우 다양한 버전의 Appium을 설치할 수 있습니다.

### 시나리오 1: 사전 구성된 Appium 버전
<a name="w2aac24c15c41b7b1"></a>

 Device Farm은 테스트 호스트를 기반으로 다양한 Appium 서버 버전으로 사전 구성되어 제공됩니다. 호스트에는 디바이스 플랫폼의 기본 드라이버(Android의 경우 UiAutomator2, iOS의 경우 XCUITest)를 사용하여 사전 구성된 버전을 활성화하는 도구가 함께 제공됩니다.

```
phases:
  install:
    commands:
      - export APPIUM_VERSION=2
      - devicefarm-cli use appium $APPIUM_VERSION
```

 지원되는 소프트웨어 목록을 보려면의 주제를 참조하세요[사용자 지정 테스트 환경 내에서 지원되는 소프트웨어](custom-test-environments-hosts-software.md).

### 시나리오 2: 사용자 지정 Appium 버전
<a name="w2aac24c15c41b7b3"></a>

 Appium의 사용자 지정 버전을 선택하려면 `npm` 명령을 사용하여 설치합니다. 다음 예제에서는 최신 버전의 Appium 2를 설치하는 방법을 보여줍니다.

```
phases:
  install:
    commands:
      - export APPIUM_VERSION=2
      - npm install -g appium@$APPIUM_VERSION
```

### 시나리오 3: 레거시 iOS 호스트의 Appium
<a name="w2aac24c15c41b7b5"></a>

 에서를 사용하여 특정 Appium 버전을 [레거시 iOS 테스트 호스트](custom-test-environments-hosts-ios.md#legacy-ios-host)선택할 수 있습니다`avm`. 예를 들어 `avm` 명령을 사용하여 Appium 서버 버전을 로 설정하려면 이러한 명령을 테스트 사양 YAML 파일에 `2.1.2`추가합니다.

```
phases:
  install:
    commands:
      - export APPIUM_VERSION=2.1.2
      - avm $APPIUM_VERSION
```

## iOS 테스트를 위한 WebDriverAgent 버전 선택
<a name="test-types-appium-select-wda"></a>

 iOS 디바이스에서 Appium 테스트를 실행하려면 WebDriverAgent를 사용해야 합니다. iOS 디바이스에 설치하려면이 애플리케이션에 서명해야 합니다. Device Farm은 사용자 지정 테스트 환경 실행 중에 사용할 수 있는 WebDriverAgent의 미리 서명된 버전을 제공합니다.

 다음 코드 조각을 사용하여 XCTestUI 드라이버 버전과 호환되는 테스트 사양 파일 내에서 Device Farm의 WebDriverAgent 버전을 선택할 수 있습니다.

```
phases:
  pre_test:
    commands:
      - |-
        APPIUM_DRIVER_VERSION=$(appium driver list --installed --json | jq -r ".xcuitest.version" | cut -d "." -f 1);
        CORRESPONDING_APPIUM_WDA=$(env | grep "DEVICEFARM_APPIUM_WDA_DERIVED_DATA_PATH_V${APPIUM_DRIVER_VERSION}")
        if [[ ! -z "$APPIUM_DRIVER_VERSION" ]] && [[ ! -z "$CORRESPONDING_APPIUM_WDA" ]]; then
          echo "Using Device Farm's prebuilt WDA version ${APPIUM_DRIVER_VERSION}.x, which corresponds with your driver";
          DEVICEFARM_APPIUM_WDA_DERIVED_DATA_PATH=$(echo $CORRESPONDING_APPIUM_WDA | cut -d "=" -f2)
        else
          LATEST_SUPPORTED_WDA_VERSION=$(env | grep "DEVICEFARM_APPIUM_WDA_DERIVED_DATA_PATH_V" | sort -V -r | head -n 1)
          echo "Unknown driver version $APPIUM_DRIVER_VERSION; falling back to the Device Farm default version of $LATEST_SUPPORTED_WDA_VERSION";
          DEVICEFARM_APPIUM_WDA_DERIVED_DATA_PATH=$(echo $LATEST_SUPPORTED_WDA_VERSION | cut -d "=" -f2)
        fi;
```

 WebDriverAgent에 대한 자세한 내용은 Appium 설명서를 참조하세요[https://appium.github.io/appium-xcuitest-driver/9.10/guides/run-prebuilt-wda/](https://appium.github.io/appium-xcuitest-driver/9.10/guides/run-prebuilt-wda/).

# Appium 테스트를 Device Farm과 통합
<a name="test-types-appium-integrate"></a>

다음 지침에 따라 Appium 테스트를 AWS Device Farm과 통합합니다. Device Farm에서 Appium 테스트 사용에 관한 자세한 내용은 [Device Farm에서 Appium 테스트 자동 실행Appium 테스트를 Device Farm과 통합](test-types-appium.md) 섹션을 참조하세요.

## Appium 테스트 패키지 구성
<a name="test-types-appium-prepare"></a>

다음 지침을 사용하여 테스트 패키지를 구성하세요.

------
#### [ Java (JUnit) ]

1. `pom.xml`을 수정하여 패키징을 JAR 파일로 설정하세요.

   ```
   <groupId>com.acme</groupId>
   <artifactId>acme-myApp-appium</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   ```

1. `maven-jar-plugin`을 사용하도록 `pom.xml`을 수정하여 테스트를 JAR 파일에 빌드하세요.

   다음 플러그인은 테스트 소스 코드(`src/test` 디렉터리에 포함된 모든 항목)를 JAR 파일에 빌드하세요.

   ```
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-jar-plugin</artifactId>
     <version>2.6</version>
     <executions>
       <execution>
         <goals>
           <goal>test-jar</goal>
         </goals>
       </execution>
     </executions>
   </plugin>
   ```

1. `maven-dependency-plugin`을 사용하도록 `pom.xml`을 수정하여 종속성을 JAR 파일로 빌드하세요.

   다음 플러그인은 종속 항목을 `dependency-jars` 디렉터리에 복사합니다.

   ```
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <version>2.10</version>
     <executions>
       <execution>
         <id>copy-dependencies</id>
         <phase>package</phase>
         <goals>
           <goal>copy-dependencies</goal>
         </goals>
         <configuration>
           <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
         </configuration>
       </execution>
     </executions>
   </plugin>
   ```

1. 다음 XML 어셈블리를 `src/main/assembly/zip.xml`에 저장하세요.

   다음 XML은 Maven에게 빌드 출력 디렉터리와 `dependency-jars` 디렉터리의 루트에 있는 모든 항목을 포함하는 .zip 파일을 빌드하도록 지시하는 어셈블리 정의입니다(구성된 경우에 해당).

   ```
   <assembly
       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
     <id>zip</id>
     <formats>
       <format>zip</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
     <fileSets>
       <fileSet>
         <directory>${project.build.directory}</directory>
         <outputDirectory>./</outputDirectory>
         <includes>
           <include>*.jar</include>
         </includes>
       </fileSet>
       <fileSet>
         <directory>${project.build.directory}</directory>
         <outputDirectory>./</outputDirectory>
         <includes>
           <include>/dependency-jars/</include>
         </includes>
       </fileSet>
     </fileSets>
   </assembly>
   ```

1. `maven-assembly-plugin`을 사용하도록 `pom.xml`을 수정하여 테스트와 모든 종속성을 하나의 .zip 파일에 패키징합니다.

   다음 플러그인은 앞의 어셈블리를 사용하여 **mvn package**가 실행될 때마다 빌드 출력 디렉터리에 `zip-with-dependencies`이라는 .zip 파일을 만듭니다.

   ```
   <plugin>
     <artifactId>maven-assembly-plugin</artifactId>
     <version>2.5.4</version>
     <executions>
       <execution>
         <phase>package</phase>
         <goals>
           <goal>single</goal>
         </goals>
         <configuration>
           <finalName>zip-with-dependencies</finalName>
           <appendAssemblyId>false</appendAssemblyId>
           <descriptors>
             <descriptor>src/main/assembly/zip.xml</descriptor>
           </descriptors>
         </configuration>
       </execution>
     </executions>
   </plugin>
   ```

**참고**  
1.3에서 주석이 지원되지 않는다는 오류 메시지가 나타나면 `pom.xml`에 다음을 추가하세요.  

```
<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.7</source>
    <target>1.7</target>
  </configuration>
</plugin>
```

------
#### [ Java (TestNG) ]

1. `pom.xml`을 수정하여 패키징을 JAR 파일로 설정하세요.

   ```
   <groupId>com.acme</groupId>
   <artifactId>acme-myApp-appium</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   ```

1. `maven-jar-plugin`을 사용하도록 `pom.xml`을 수정하여 테스트를 JAR 파일에 빌드하세요.

   다음 플러그인은 테스트 소스 코드(`src/test` 디렉터리에 포함된 모든 항목)를 JAR 파일에 빌드하세요.

   ```
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-jar-plugin</artifactId>
     <version>2.6</version>
     <executions>
       <execution>
         <goals>
           <goal>test-jar</goal>
         </goals>
       </execution>
     </executions>
   </plugin>
   ```

1. `maven-dependency-plugin`을 사용하도록 `pom.xml`을 수정하여 종속성을 JAR 파일로 빌드하세요.

   다음 플러그인은 종속 항목을 `dependency-jars` 디렉터리에 복사합니다.

   ```
   <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <version>2.10</version>
     <executions>
       <execution>
         <id>copy-dependencies</id>
         <phase>package</phase>
         <goals>
           <goal>copy-dependencies</goal>
         </goals>
         <configuration>
           <outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
         </configuration>
       </execution>
     </executions>
   </plugin>
   ```

1. 다음 XML 어셈블리를 `src/main/assembly/zip.xml`에 저장하세요.

   다음 XML은 Maven에게 빌드 출력 디렉터리와 `dependency-jars` 디렉터리의 루트에 있는 모든 항목을 포함하는 .zip 파일을 빌드하도록 지시하는 어셈블리 정의입니다(구성된 경우에 해당).

   ```
   <assembly
       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
     <id>zip</id>
     <formats>
       <format>zip</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
     <fileSets>
       <fileSet>
         <directory>${project.build.directory}</directory>
         <outputDirectory>./</outputDirectory>
         <includes>
           <include>*.jar</include>
         </includes>
       </fileSet>
       <fileSet>
         <directory>${project.build.directory}</directory>
         <outputDirectory>./</outputDirectory>
         <includes>
           <include>/dependency-jars/</include>
         </includes>
       </fileSet>
     </fileSets>
   </assembly>
   ```

1. `maven-assembly-plugin`을 사용하도록 `pom.xml`을 수정하여 테스트와 모든 종속성을 하나의 .zip 파일에 패키징합니다.

   다음 플러그인은 앞의 어셈블리를 사용하여 **mvn package**가 실행될 때마다 빌드 출력 디렉터리에 `zip-with-dependencies`이라는 .zip 파일을 만듭니다.

   ```
   <plugin>
     <artifactId>maven-assembly-plugin</artifactId>
     <version>2.5.4</version>
     <executions>
       <execution>
         <phase>package</phase>
         <goals>
           <goal>single</goal>
         </goals>
         <configuration>
           <finalName>zip-with-dependencies</finalName>
           <appendAssemblyId>false</appendAssemblyId>
           <descriptors>
             <descriptor>src/main/assembly/zip.xml</descriptor>
           </descriptors>
         </configuration>
       </execution>
     </executions>
   </plugin>
   ```

**참고**  
1.3에서 주석이 지원되지 않는다는 오류 메시지가 나타나면 `pom.xml`에 다음을 추가하세요.  

```
<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.7</source>
    <target>1.7</target>
  </configuration>
</plugin>
```

------
#### [ Node.JS ]

Appium Node.js 테스트를 패키징하여 Device Farm에 업로드하려면 로컬 컴퓨터에 다음을 설치해야 합니다.
+ [노드 버전 매니저(nvm)](https://github.com/nvm-sh/nvm) 

  불필요한 종속 항목이 테스트 패키지에 포함되지 않도록 테스트를 개발하고 패키징하려면 이 도구를 사용하세요.
+ Node.js
+ npm-bundle(전역 설치됨)

1. nvm이 있는지 확인합니다.

   ```
   command -v nvm
   ```

   출력에 `nvm`이 나타납니다.

   자세한 내용은 GitHub의 [nvm](https://github.com/nvm-sh/nvm)을 참조하세요.

1. 이 명령을 실행하여 Node.js를 설치하세요.

   ```
   nvm install node
   ```

   다음과 같이 Node.js의 특정 버전을 지정할 수 있습니다.

   ```
   nvm install 11.4.0
   ```

1. 올바른 버전의 노드가 사용 중인지 확인합니다.

   ```
   node -v
   ```

1. **npm-bundle** 전 세계 설치

   ```
   npm install -g npm-bundle
   ```

------
#### [ Python ]

1. 불필요한 종속 항목이 앱 패키지에 포함되지 않도록 테스트를 개발하고 패키징하기 위해서는 [Python virtualenv](https://pypi.python.org/pypi/virtualenv)를 설정하는 것이 좋습니다.

   ```
   $ virtualenv workspace
   $ cd workspace
   $ source bin/activate
   ```
**작은 정보**  
`--system-site-packages` 옵션으로 Python virtualenv를 생성하지 마세요. 글로벌 사이트 패키지 디렉터리에서 패키지를 상속하기 때문입니다. 이로 인해 테스트에 필요하지 않은 종속성이 가상 환경에 포함될 수 있습니다.
또한 이러한 테스트가 실행되는 인스턴스에 이러한 기본 라이브러리가 없을 수 있으므로, 테스트가 기본 라이브러리에 종속된 종속성을 사용하지 않음을 확인해야 합니다.

1. 가상 환경에 **py.test**를 설치하세요.

   ```
   $ pip install pytest
   ```

1. 가상 환경에 Appium Python 클라이언트를 설치하세요.

   ```
   $ pip install Appium-Python-Client
   ```

1. 사용자 지정 모드에서 다른 경로를 지정하지 않으면 Device Farmd은 테스트가 `tests/`에 저장될 것으로 예상합니다. `find`를 사용하여 폴더 내의 모든 파일을 표시할 수 있습니다.

   ```
   $ find tests/
   ```

   이러한 파일에 Device Farm에서 실행할 테스트 스위트가 포함되어 있는지 확인합니다.

   ```
   tests/
   tests/my-first-tests.py
   tests/my-second-tests/py
   ```

1. 가상 환경 작업 공간 폴더에서 이 명령을 실행하여 실행 없이도 테스트 목록을 표시합니다.

   ```
   $ py.test --collect-only tests/
   ```

   출력에 Device Farm에서 실행하려는 테스트가 표시되는지 확인하세요.

1. 테스트/폴더 아래의 모든 캐시된 파일을 정리하세요.

   ```
   $ find . -name '__pycache__' -type d -exec rm -r {} +
   $ find . -name '*.pyc' -exec rm -f {} +
   $ find . -name '*.pyo' -exec rm -f {} +
   $ find . -name '*~' -exec rm -f {} +
   ```

1. 작업 공간에서 다음 명령을 실행하여 requirements.txt 파일을 생성하세요.

   ```
   $ pip freeze > requirements.txt
   ```

------
#### [ Ruby ]

Appium Ruby 테스트를 패키징하여 Device Farm에 업로드하려면 로컬 컴퓨터에 다음을 설치해야 합니다.
+ [Ruby 버전 관리자(RVM)](https://rvm.io/rvm/install)

  불필요한 종속 항목이 테스트 패키지에 포함되지 않도록 테스트를 개발하고 패키징하려면 이 명령줄 도구를 사용하세요.
+ Ruby
+ Bundler(이 gem은 일반적으로 Ruby와 함께 설치됩니다.)

1. 필수 키와 RVM 및 Ruby를 설치하세요. 자세한 내용은 RVM 웹 사이트에서 [RVM 설치](https://rvm.io/rvm/install)를 참조하세요.

   설치가 완료되면 로그아웃한 후 다시 로그인하여 터미널을 다시 로드합니다.
**참고**  
RVM이 bash 쉘 전용 함수로 로드됩니다.

1. **rvm**이 올바르게 설치되었는지 확인하세요.

   ```
   command -v rvm
   ```

   출력에 `rvm`이 나타납니다.

1. 특정 버전의 Ruby(예: *2.5.3*)를 설치하려면 다음 명령을 실행하세요.

   ```
   rvm install ruby 2.5.3 --autolibs=0
   ```

   요청된 버전의 Ruby를 사용하고 있는지 확인하세요.

   ```
   ruby -v
   ```

1. 원하는 테스트 플랫폼용 패키지를 컴파일하도록 번들러를 구성하세요.

   ```
   bundle config specific_platform true
   ```

1. .lock 파일을 업데이트하여 테스트를 실행하는 데 필요한 플랫폼을 추가하세요.
   + Android 디바이스에서 실행할 테스트를 컴파일하는 경우 다음 명령어를 실행하여 Android 테스트 호스트의 종속성을 사용하도록 Gemfile을 구성하세요.

     ```
     bundle lock --add-platform x86_64-linux
     ```
   + iOS 디바이스에서 실행할 테스트를 컴파일하는 경우 다음 명령을 실행하여 iOS 테스트 호스트에 대한 종속성을 사용하도록 Gemfile을 구성하세요.

     ```
     bundle lock --add-platform x86_64-darwin
     ```

1. **bundler** gem은 대개 기본적으로 설치됩니다. 설치되어 있지 않다면 다음을 설치하세요.

   ```
   gem install bundler -v 2.3.26
   ```

------

## 압축 테스트 패키지 파일 생성
<a name="test-types-appium-create-a-zip"></a>

**주의**  
Device Farm에서는 압축된 테스트 패키지에 있는 파일의 폴더 구조가 중요하며 일부 아카이브 도구는 ZIP 파일의 구조를 암시적으로 변경합니다. 로컬 데스크톱의 파일 관리자에 내장된 아카이브 유틸리티(예: 파인더 또는 Windows 탐색기)를 사용하는 대신 아래에 지정된 명령줄 유틸리티를 따르는 것이 좋습니다.

이제 Device Farm에 대한 테스트를 번들하세요.

------
#### [ Java (JUnit) ]

테스트 빌드 및 패키징

```
$ mvn clean package -DskipTests=true
```

`zip-with-dependencies.zip` 파일이 결과로 생성됩니다. 이것은 테스트 패키지입니다.

------
#### [ Java (TestNG) ]

테스트 빌드 및 패키징

```
$ mvn clean package -DskipTests=true
```

`zip-with-dependencies.zip` 파일이 결과로 생성됩니다. 이것은 테스트 패키지입니다.

------
#### [ Node.JS ]

1. 프로젝트를 확인하세요.

   프로젝트의 root 디렉터리에 있어야 합니다. root 디렉터리에서 `package.json`을 볼 수 있습니다.

1. 이 명령을 실행하여 로컬 종속 항목을 설치합니다.

   ```
   npm install
   ```

   또한 이 명령은 현재 디렉터리에 `node_modules` 폴더를 만듭니다.
**참고**  
이제 테스트를 로컬로 실행할 수 있습니다.

1. 이 명령을 실행하여 현재 폴더의 파일을 \$1.tgz 파일로 패키징하세요. 이 파일은 `package.json` 파일의 `name` 속성을 사용하여 이름이 지정됩니다.

   ```
   npm-bundle
   ```

   이 tarball(.tgz) 파일에는 모든 코드와 종속 항목이 들어 있습니다.

1. 이 명령을 사용하여, 전 단계에서 생성한 tarball(\$1.tgz 파일)을 하나의 압축 아카이브로 묶어 생성하세요.

   ```
   zip -r MyTests.zip *.tgz
   ```

   이것이 다음 절차에 Device Farm에 업로드하는 `MyTests.zip` 파일입니다.

------
#### [ Python ]

Python 2  
pip를 사용하여 필요한 Python 패키지(“wheelhouse”라고 불림)의 아카이브를 생성하세요.  

```
$ pip wheel --wheel-dir wheelhouse -r requirements.txt
```
wheelhouse, 테스트 및 pip 요구 사항을 Device Farm용 zip 아카이브로 패키징하세요.  

```
$ zip -r test_bundle.zip tests/ wheelhouse/ requirements.txt
```

Python 3  
테스트 및 pip 요구 사항을 zip 파일로 패키징하세요.  

```
$ zip -r test_bundle.zip tests/ requirements.txt
```

------
#### [ Ruby ]

1. 다음 명령을 실행하여 가상 Ruby 환경을 생성하세요.

   ```
   # myGemset is the name of your virtual Ruby environment
   rvm gemset create myGemset
   ```

1. 다음 명령을 실행하여 앞에서 생성한 환경을 사용하세요.

   ```
   rvm gemset use myGemset
   ```

1. 소스 코드를 확인하세요.

   프로젝트의 root 디렉터리에 있어야 합니다. root 디렉터리에서 `Gemfile`을 볼 수 있습니다.

1. 이 명령을 실행하여 `Gemfile`의 로컬 종속 항목과 모든 gem을 설치하세요.

   ```
   bundle install
   ```
**참고**  
이제 테스트를 로컬로 실행할 수 있습니다. 다음 명령을 실행하여 테스트를 로컬로 실행하세요.  

   ```
   bundle exec $test_command
   ```

1. `vendor/cache` 폴더의 gem을 패키징하세요.

   ```
   # This will copy all the .gem files needed to run your tests into the vendor/cache directory
   bundle package --all-platforms
   ```

1. 다음 명령을 실행하여, 소스 코드와 모든 종속 항목을 하나의 압축 아카이브로 묶어 생성하세요.

   ```
   zip -r MyTests.zip Gemfile vendor/ $(any other source code directory files)
   ```

   이것이 다음 절차에 Device Farm에 업로드하는 `MyTests.zip` 파일입니다.

------

## Device Farm에 테스트 패키지 업로드
<a name="test-types-appium-upload"></a>

Device Farm 콘솔을 사용하여 테스트를 업로드할 수 있습니다.

1. [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm)에서 Device Farm 콘솔에 로그인하세요.

1. Device Farm 탐색 패널에서 **모바일 디바이스 테스트**를 선택한 다음 **프로젝트**를 선택하세요.

1. 새 사용자인 경우 **새 프로젝트**를 선택하고 프로젝트 이름을 입력한 다음 **제출**을 선택하세요.

   프로젝트가 이미 있는 경우 해당 프로젝트를 선택하여 테스트를 업로드할 수 있습니다.

1. 프로젝트를 연 후 **실행 생성**을 선택하세요.

1. **실행 설정**에서 테스트에 적절한 이름을 지정합니다. 여기에는 공백이나 구두점 조합이 포함될 수 있습니다.

1.   
기본 Android 및 iOS 테스트의 경우  
**실행 설정**에서 Android(.apk) 애플리케이션을 테스트하는 경우 **Android 앱**을 선택하고 iOS(.ipa) 애플리케이션을 테스트하는 경우 **iOS 앱**을 선택합니다. 그런 다음 **앱 선택**에서 **자체 앱 업로드**를 선택하여 애플리케이션의 배포 가능 패키지를 업로드합니다.  
 파일은 Android `.apk` 또는 iOS `.ipa`여야 합니다. iOS 애플리케이션은 시뮬레이터가 아닌 실제 디바이스용으로 빌드되어야합니다.  
모바일 웹 애플리케이션 테스트의 경우  
**실행 설정**에서 **웹 앱**을 선택합니다.

1. **테스트 구성**의 **테스트 프레임워크 선택** 섹션에서 테스트할 Appium 프레임워크를 선택한 다음 **자체 테스트 패키지 업로드**를 선택합니다.

1. 테스트가 포함된 .zip 파일을 찾아서 선택하세요. 이 .zip 파일은 [Appium 테스트 패키지 구성](#test-types-appium-prepare)에 설명된 형식이어야 합니다.

1. 지침에 따라 디바이스를 선택하고 실행을 시작하세요. 자세한 내용은 [Device Farm에서 테스트 실행 생성](how-to-create-test-run.md) 단원을 참조하십시오.

**참고**  
Device Farm은 Appium 테스트를 수정하지 않습니다.

## 테스트의 스크린샷 캡처(선택 사항)
<a name="test-types-appium-screenshots"></a>

테스트의 일부로 스크린샷을 캡처할 수 있습니다.

Device Farm은 Appium 스크린샷 저장 위치로 예상하는 로컬 파일 시스템의 정규화된 경로로 `DEVICEFARM_SCREENSHOT_PATH` 속성을 설정합니다. 스크린샷이 저장되는 테스트별 디렉터리는 런타임에 정의됩니다. 스크린샷은 Device Farm 보고서에 자동으로 포함됩니다. 스크린샷을 보려면 Device Farm 콘솔에서 **스크린샷** 섹션을 선택하세요.

 Appium 테스트에서 스크린샷을 캡처하는 자세한 방법은 Appium API 설명서의 [스크린샷 캡처](http://appium.io/docs/en/commands/session/screenshot/)을 참조하세요.

# AWS Device Farm에서 Android 테스트
<a name="test-types-android-tests"></a>

Device Farm은 Android 디바이스에 대한 여러 가지 자동화 테스트 유형과 두 가지 기본 제공 테스트를 지원합니다.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

## Android 애플리케이션 테스트 프레임워크
<a name="test-types-framework-android"></a>

Android 디바이스에서 사용할 수 있는 테스트는 다음과 같습니다.
+ [자동 Appium 테스트Appium 테스트와 통합](test-types-appium.md)
+ [계측](test-types-android-instrumentation.md)

## Android용 기본 제공 테스트 유형
<a name="test-types-built-in-android"></a>

Android 디바이스에 사용할 수 있는 내장 테스트 유형에는 한 가지가 있습니다.
+ [내장: fuzz (Android 및 iOS)](test-types-built-in-fuzz.md)

# Android 및 AWS Device Farm용 계측
<a name="test-types-android-instrumentation"></a>

Device Farm은 Android의 계측 기능(JUnit, Espresso, Robotium 또는 계측 기반 테스트)에 대한 지원을 제공합니다.

Device Farm은 또한 샘플 Android 애플리케이션 및 계측(Espresso)을 포함한 세 가지 Android 자동화 프레임워크의 작동 테스트에 대한 링크를 제공합니다. [Android용 Device Farm 샘플 앱](https://github.com/awslabs/aws-device-farm-sample-app-for-android)은 GitHub에서 다운로드할 수 있습니다.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

**Topics**
+ [계측이란 무엇인가요?](#test-types-android-instrumentation-what-is)
+ [Android 계측 테스트를 위한 고려 사항](#test-types-android-instrumentation-settings)
+ [스탠다드 모드 테스트 파싱](#test-types-android-standard-mode-test-parse)
+ [Android 계측을 Device Farm과 통합](test-types-android-instrumentation-integrate.md)

## 계측이란 무엇인가요?
<a name="test-types-android-instrumentation-what-is"></a>

Android 계측을 사용하면 테스트 코드에서 콜백 메서드를 호출할 수 있습니다. 따라서 마치 구성 요소를 디버깅하는 것처럼 구성 요소의 수명 주기를 단계별로 실행할 수 있습니다. 자세한 내용은 Android 개발자 도구 문서의 테스트 유형 및 위치 섹션에서 [계측 테스트](https://developer.android.com/studio/test/test-in-android-studio#test_types_and_locations)를 참조하세요.****

## Android 계측 테스트를 위한 고려 사항
<a name="test-types-android-instrumentation-settings"></a>

Android 계측을 사용할 때는 다음 권장 사항과 참고 사항을 고려하세요.

**Android OS 호환성 확인**  
 [Android 설명서](https://developer.android.com/jetpack/androidx/releases/test#orchestrator-1.5.0)를 확인하여 계측이 Android OS 버전과 호환되는지 확인합니다.

**명령줄에서 실행**  
 명령줄에서 계측 테스트를 실행하려면 [Android 설명서](https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/runner#enable-command)를 따르세요.

**시스템 애니메이션**  
 [Android Espresso 테스트 설명서](https://developer.android.com/training/testing/espresso)에 따르면 실제 디바이스에서 테스트할 때는 시스템 애니메이션을 끄는 것이 좋습니다. Device Farm은 [android.support.test.runner.AndroidJUnitRunner](http://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html) 계측 테스트 러너를 사용하여 실행할 때 **Window Animation Scale**, **Transition Animation Scale**, **Animator Duration Scale** 설정을 자동으로 비활성화합니다.

**테스트 기록자**  
Device Farm은 Robotium과 같은 기록 및 재생 스크립팅 도구가 있는 프레임워크를 지원합니다.

## 스탠다드 모드 테스트 파싱
<a name="test-types-android-standard-mode-test-parse"></a>

표준 실행 모드에서 Device Farm은 테스트 스위트를 구문 분석하고 실행할 고유한 테스트 클래스와 메서드를 식별합니다. 이는 [Dex Test Parser](https://github.com/linkedin/dex-test-parser)라는 도구를 통해 수행됩니다.

Android 계측 .apk 파일을 입력으로 제공하면 파서는 JUnit 3 및 JUnit 4 규칙과 일치하는 테스트의 정규화된 메서드 이름을 반환합니다.

로컬 환경에서 이를 테스트하려면 다음을 참조하세요.

1. [https://github.com/linkedin/dex-test-parser](https://github.com/linkedin/dex-test-parser) 바이너리를 다운로드하세요.

1. 다음 명령을 실행하여 Device Farm에서 실행할 테스트 메서드의 목록을 가져오세요.

   ```
   java -jar parser.jar path/to/apk path/for/output
   ```

# Android 계측을 Device Farm과 통합
<a name="test-types-android-instrumentation-integrate"></a>

**참고**  
다음 지침에 따라 Android 계측 테스트를 AWS Device Farm과 통합합니다. Device Farm에서 계측 테스트 사용 방법에 대한 자세한 내용은 [Android 및 AWS Device Farm용 계측](test-types-android-instrumentation.md) 섹션을 참조하세요.

## Android 계측 테스트 업로드
<a name="test-types-android-instrumentation-upload"></a>

Device Farm 콘솔을 사용하여 테스트를 업로드하세요.

1. [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm)에서 Device Farm 콘솔에 로그인하세요.

1. Device Farm 탐색 패널에서 **모바일 디바이스 테스트**를 선택한 다음 **프로젝트**를 선택하세요.

1. 프로젝트 목록에서 테스트를 업로드할 프로젝트를 선택하세요.
**작은 정보**  
검색 창을 사용하여 인스턴스 목록을 이름별로 필터링할 수 있습니다.  
프로젝트를 생성하려면, [AWS Device Farm에서 프로젝트 생성](how-to-create-project.md)의 지침을 따르세요.

1. **실행 생성**을 선택합니다.

1. **앱 선택**의 **앱 선택 옵션** 섹션에서 **자체 앱 업로드**를 선택합니다.

1. Android 앱 파일을 찾아 선택하세요. 파일은 .apk 파일이어야 합니다.

1. **구성 테스트**의 **테스트 프레임워크 선택** 섹션에서 **계측**을 선택한 후 **파일 선택**을 선택하세요.

1. 테스트가 포함된 .apk 파일을 찾아서 선택하세요.

1. 나머지 지침을 완료하여 디바이스를 선택하고 실행을 시작하세요.

## (선택 사항) Android 계측 테스트의 스크린샷 생성
<a name="test-types-android-instrumentation-screenshots"></a>

Android 계측 테스트의 일부로 스크린샷을 캡처할 수 있습니다.

스크린샷을 캡처하려면 다음 메서드 중 하나를 호출하세요.
+ Robotium의 경우 `takeScreenShot` 메서드(예: `solo.takeScreenShot();`)를 호출하세요.
+ Spoon의 경우 `screenshot` 메서드를 호출하며 다음 예시를 참고하세요.

  ```
  Spoon.screenshot(activity, "initial_state");
  /* Normal test code... */
  Spoon.screenshot(activity, "after_login");
  ```

테스트가 실행되는 동안 Device Farm은 스크린샷 파일이 있는 경우, 디바이스의 다음 위치에서 스크린샷을 가져온 후 테스트 보고서에 추가합니다.
+ `/sdcard/robotium-screenshots`
+ `/sdcard/test-screenshots`
+ `/sdcard/Download/spoon-screenshots/test-class-name/test-method-name`
+ `/data/data/application-package-name/app_spoon-screenshots/test-class-name/test-method-name`

# AWS Device Farm에서 iOS 테스트
<a name="test-types-ios-tests"></a>

Device Farm은 iOS 디바이스에 대한 여러 가지 자동화 테스트 유형과 기본 제공 테스트를 지원합니다.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

## iOS 애플리케이션 테스트 프레임워크
<a name="test-types-framework-ios"></a>

iOS 디바이스에 사용할 수 있는 테스트는 다음과 같습니다.
+ [자동 Appium 테스트Appium 테스트와 통합](test-types-appium.md)
+ [XCTest](test-types-ios-xctest.md)
+ [XCTest UI](test-types-ios-xctest-ui.md)

## iOS용 기본 제공 테스트 유형
<a name="test-types-built-in-ios"></a>

현재 iOS 디바이스에 사용할 수 있는 테스트 유형은 한 가지 내장되어 있습니다.
+ [내장: fuzz (Android 및 iOS)](test-types-built-in-fuzz.md)

# Device Farm을 iOS용 XCTest와 통합
<a name="test-types-ios-xctest"></a>

Device Farm을 사용하면 XCTest 프레임워크를 사용하여 실제 디바이스에서 앱을 테스트할 수 있습니다. XCTest에 대한 자세한 내용은 *Xcode를 사용한 테스트*의 [테스트 기본 사항](https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/03-testing_basics.html)을 참조하세요.

테스트를 실행하려면 테스트 실행용 패키지를 만들고 이 패키지를 Device Farm에 업로드하세요.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

**Topics**
+ [XCTest 실행을 위한 패키지 생성](#test-types-ios-xctest-create-packages)
+ [XCTest 실행을 위한 패키지를 Device Farm에 업로드](#test-types-ios-xctest-upload)

## XCTest 실행을 위한 패키지 생성
<a name="test-types-ios-xctest-create-packages"></a>

XCTest 프레임워크를 사용하여 앱을 테스트하려면 Device Farm에 다음이 필요합니다.
+ `.ipa` 파일인 앱 패키지
+ `.zip` 파일인 XCTest 패키지

Xcode가 생성하는 빌드 출력을 사용하여 이러한 패키지를 생성하세요. Device Farm에 업로드할 수 있도록 패키지를 만들려면 다음 단계를 완료하세요.

**앱의 빌드 출력을 생성하려면 다음을 참고하세요.**

1. Xcode에서 앱 프로젝트를 여세요.

1. Xcode 툴바의 구성표 드롭다운 메뉴에서 **일반 iOS 디바이스**를 대상으로 선택하세요.

1. **제품** 메뉴에서 **다음에 대한 구축**를 선택한 다음 **테스트**를 선택하세요.

**앱 패키지 생성**

1. Xcode의 프로젝트 탐색기의 **제품**에서 이름이 `app-project-name.app`로 지정된 파일의 컨텍스트 메뉴를 여세요. 그런 다음 **파인더에서 보기**를 선택하세요. 파인더에서 Xcode가 테스트 빌드를 위해 생성한 출력이 포함된 `Debug-iphoneos`라는 이름의 폴더가 열립니다. 이 폴더에는 `.app` 파일이 포함되어 있습니다.

1. 파인더에서 새 폴더를 만들고 이름을 `Payload`로 지정합니다.

1. `app-project-name.app` 파일을 복사하여 `Payload` 폴더에 붙여 넣습니다.

1. `Payload` 폴더의 컨텍스트 메뉴를 열고 **“Payload” 압축**을 선택하세요. `Payload.zip`이라는 이름의 파일이 생성됩니다.

1. `Payload.zip`의 파일 이름과 확장자를 `app-project-name.ipa`로 변경하세요.

   이후 단계에서 이 파일을 Device Farm에 제공합니다. 파일을 더 쉽게 찾을 수 있도록 데스크톱과 같은 다른 위치로 옮기는 것이 좋습니다.

1. 원하는 경우 `Payload` 폴더와 그 안에 있는 `.app` 파일을 삭제할 수 있습니다.

**XCTest 패키지 생성**

1. 파인더에서 `Debug-iphoneos` 디렉터리 내 `app-project-name.app` 파일의 컨텍스트 메뉴를 여세요. 그런 다음 **패키지 콘텐츠 보기**를 선택하세요.

1. 패키지 콘텐츠에서 `Plugins` 폴더를 여세요. 이 폴더에 `app-project-name.xctest` 파일이 포함되어 있습니다.

1. 이 파일의 컨텍스트 메뉴를 열고 **“`app-project-name.xctest`” 압축**을 선택하세요. `app-project-name.xctest.zip`이라는 파일이 생성됩니다.

   이후 단계에서 이 파일을 Device Farm에 제공합니다. 파일을 더 쉽게 찾을 수 있도록 데스크톱과 같은 다른 위치로 옮기는 것이 좋습니다.

## XCTest 실행을 위한 패키지를 Device Farm에 업로드
<a name="test-types-ios-xctest-upload"></a>

Device Farm 콘솔을 사용하여 테스트 패키지를 업로드합니다.

1. [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm)에서 Device Farm 콘솔에 로그인하세요.

1. 프로젝트가 없는 경우 생성하세요. 프로젝트를 만드는 단계는 [AWS Device Farm에서 프로젝트 생성](how-to-create-project.md) 단원을 참조하세요.

   그렇지 않으면 Device Farm 탐색 패널에서 **모바일 디바이스 테스트**를 선택한 다음 **프로젝트**를 선택하세요.

1. 테스트를 실행하는 데 사용할 프로젝트를 선택하세요.

1. **실행 생성**을 선택합니다.

1. **실행 설정**의 **실행 유형** 섹션에서 **iOS 앱**을 선택합니다.

1. **앱 선택**의 **앱 선택 옵션** 섹션에서 **자체 앱 업로드**를 선택합니다. 그런 다음 **앱 업로드**에서 **파일 선택**을 선택합니다.

1. `.ipa` 파일을 찾고 업로드합니다.
**참고**  
테스트를 위해 `.ipa` 패키지를 빌드해야 합니다.

1. **테스트 구성**의 **테스트 프레임워크 선택** 섹션에서 **XCTest**를 선택하세요. 그런 다음 **앱 업로드**에서 **파일 선택**을 선택합니다.

1. 앱의 XCTest 패키지가 포함된 `.zip` 파일을 찾아 업로드하세요.

1. 프로젝트 생성 프로세스의 나머지 단계를 완료하여 설치하세요. 테스트할 디바이스를 선택하고 디바이스 상태를 지정하세요.

1. **실행 생성**을 선택합니다. Device Farm은 테스트를 실행하고 콘솔에 결과를 표시합니다.

# iOS용 XCTest UI를 Device Farm과 통합
<a name="test-types-ios-xctest-ui"></a>

Device Farm은 XCTest UI 테스트 프레임워크를 지원합니다. 특히, Device Farm은 Objective-C와 [Swift](https://developer.apple.com/swift/)로 작성된 XCTest UI 테스트를 지원합니다.

 XCTest UI 프레임워크는 XCTest를 기반으로 구축된 iOS 개발에서 UI 테스트를 지원합니다. 자세한 내용은 iOS 개발자 라이브러리의 [사용자 인터페이스 테스트](https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/09-ui_testing.html#//apple_ref/doc/uid/TP40014132-CH13-SW1)를 참조하세요.

Device Farm의 테스트에 대한 일반적인 정보는 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

다음 지침에 따라 Device Farm을 iOS용 XCTest UI 테스트 프레임워크와 통합합니다.

**Topics**
+ [iOS XCTest UI 테스트 준비](#test-types-ios-xctest-ui-prepare)
+ [옵션 1: XCTest UI .ipa 패키지 생성](#how-to-use-create-XCTestUI-ipa-package)
+ [옵션 2: XCTest UI .zip 패키지 생성](#how-to-use-create-XCTestUI-zip-package)
+ [iOS XCTest UI 테스트 업로드](#test-types-ios-xctest-ui-upload)

## iOS XCTest UI 테스트 준비
<a name="test-types-ios-xctest-ui-prepare"></a>

`.ipa` XCTEST\$1UI 테스트 패키지에 대한 파일 또는 `.zip` 파일을 업로드할 수 있습니다.

`.ipa` 파일은 iOS Runner 앱을 번들 형식으로 포함하는 애플리케이션 아카이브입니다. *추가 파일은 `.ipa` 파일에 포함될 수 없습니다.*

`.zip` 파일을 업로드하는 경우 iOS Runner 앱 또는 `.ipa` 파일을 직접 포함할 수 있습니다. 테스트 중에 사용하려는 경우 파일 내에 다른 `.zip` 파일을 포함할 수도 있습니다. 예를 들어 `.zip` 파일 내의 `.xctestrun`, `.xcworkspace` 또는 `.xcodeproj` 같은 파일을 포함하여 Device Farm에서 XCUI 테스트 계획을 실행할 수 있습니다. 테스트 계획을 실행하는 방법에 대한 자세한 지침은 XCUI 테스트 유형의 기본 테스트 사양 파일에서 확인할 수 있습니다.

## 옵션 1: XCTest UI .ipa 패키지 생성
<a name="how-to-use-create-XCTestUI-ipa-package"></a>

*yourAppName*UITest-Runner.app 번들은 테스트용 프로젝트를 빌드할 때 Xcode에서 생성합니다. 프로젝트의 제품 디렉터리에서 찾을 수 있습니다.

.ipa 파일을 생성하는 방법:

1. 이름이 *Payload*인 디렉터리를 생성합니다.

1. 앱 디렉터리를 Payload 디렉터리에 추가합니다.

1. Payload 디렉터리를 `.zip` 파일에 아카이빙한 다음 파일 확장자를 `.ipa`로 변경하세요.

 다음 폴더 구조는 *my-project-nameUITest-Runner.app*이라는 예제 앱을 `.ipa` 파일로 패키징하는 방법을 보여줍니다.

```
.
└── my-project-nameUITest.ipa
    └── Payload (directory)
        └── my-project-nameUITest-Runner.app
```

## 옵션 2: XCTest UI .zip 패키지 생성
<a name="how-to-use-create-XCTestUI-zip-package"></a>

Device Farm은 전체 XCTest UI 테스트 제품군을 실행하기 위한 `.xctestrun` 파일을 자동으로 생성합니다. Device Farm에서 자체 `.xctestrun` 파일을 사용하려면 `.xctestrun` 파일과 앱 디렉터리를 `.zip` 파일로 압축하면 됩니다. 테스트 패키지에 대한 `.ipa` 파일이 이미 있는 경우 *\$1-Runner.app* 대신 여기에 포함할 수 있습니다.

```
.
└── swift-sample-UI.zip (directory)
   ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa
   ├── SampleTestPlan_2.xctestrun
   ├── SampleTestPlan_1.xctestrun
   └── (any other files)
```

 Device Farm에서 XCUI 테스트에 대한 Xcode 테스트 계획을 실행하려면 *my-project-nameUITest-Runner.app* **또는** *my-project-nameUITest.ipa* 파일과 테스트 계획으로 XCTEST\$1UI를 실행하는 데 필요한 xcode 소스 코드 파일(`.xcworkspace` 또는 `.xcodeproj` 파일 포함)이 포함된 zip을 생성할 수 있습니다.

다음은 `.xcodeproj` 파일을 사용하는 샘플 zip입니다.

```
.
└── swift-sample-UI.zip (directory)
   ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa
   ├── (any directory)
   └── SampleXcodeProject.xcodeproj
        ├── Testplan_1.xctestplan
        ├── Testplan_2.xctestplan
        └── (any other source code files created by xcode with .xcodeproj)
```

다음은 `.xcworkspace` 파일을 사용하는 샘플 zip입니다.

```
.
└──swift-sample-UI.zip (directory)
   ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa
   └── (any directory)
   │   ├── SampleXcodeProject.xcodeproj
   │   ├── Testplan_1.xctestplan
   │   ├── Testplan_2.xctestplan
   |   └── (any other source code files created by xcode with .xcodeproj)
   └── SampleWorkspace.xcworkspace
       └── contents.xcworkspacedata
```

**참고**  
XCTest UI .zip 패키지 내에 'Payload'라는 디렉터리가 없는지 확인하세요.

## iOS XCTest UI 테스트 업로드
<a name="test-types-ios-xctest-ui-upload"></a>

Device Farm 콘솔을 사용하여 테스트를 업로드하세요.

1. [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm)에서 Device Farm 콘솔에 로그인하세요.

1. Device Farm 탐색 패널에서 **모바일 디바이스 테스트**를 선택한 다음 **프로젝트**를 선택하세요.

1. 프로젝트 목록에서 테스트를 업로드할 프로젝트를 선택하세요.
**작은 정보**  
검색 창을 사용하여 인스턴스 목록을 이름별로 필터링할 수 있습니다.  
프로젝트를 생성하려면, [AWS Device Farm에서 프로젝트 생성](how-to-create-project.md)의 지침을 따르세요.

1. **실행 생성**을 선택합니다.

1. **실행 설정**의 **실행 유형** 섹션에서 **iOS 앱**을 선택합니다.

1. **앱 선택**의 **앱 선택 옵션** 섹션에서 **자체 앱 업로드**를 선택합니다. 그런 다음 **앱 업로드**에서 **파일 선택**을 선택합니다.

1. Android 또는 iOS 앱 파일을 찾아 선택하세요. 파일은 .ipa 파일이어야 합니다.
**참고**  
.ipa 파일은 시뮬레이터가 아닌 iOS 디바이스용으로 빌드되어야 합니다.

1. **테스트 구성**의 **테스트 프레임워크 선택** 섹션에서 **XCTest UI**를 선택하세요. 그런 다음 **앱 업로드**에서 **파일 선택**을 선택합니다.

1. iOS XCTest UI 테스트 러너가 포함된 .ipa 또는 .zip 파일을 찾아 선택하세요.

1. 실행 생성 프로세스의 나머지 단계를 완료하여 설치하세요. 테스트할 디바이스를 선택하고 선택적으로 추가 구성을 지정합니다.

1. **실행 생성**을 선택합니다. Device Farm은 테스트를 실행하고 콘솔에 결과를 표시합니다.

# AWS Device Farm의 웹 앱 테스트
<a name="test-types-web-app-tests"></a>

Device Farm은 Appium을 사용하여 웹 애플리케이션을 테스트하는 기능을 제공합니다. Device Farm에서 Appium 테스트를 설정하는 방법에 대한 자세한 내용은 [Device Farm에서 Appium 테스트 자동 실행](test-types-appium.md)을 참고하세요.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

## 측정된 디바이스 및 측정되지 않은 디바이스에 대한 규칙
<a name="web-app-tests-metered-unmetered-devices-rules"></a>

측정이란 디바이스에 대한 요금 청구를 말합니다. 기본적으로 Device Farm 디바이스는 미터링 측정되며 무료 평가판 사용 시간이 모두 소진되면 분당 요금이 부과됩니다. 또한 무제한 디바이스를 구매하여 월 정액 요금으로 무제한 테스트를 수행할 수 있습니다. 요금에 대한 자세한 내용은 [AWS Device Farm 요금](https://aws.amazon.com/device-farm/)을 참조하세요.

iOS 디바이스와 Android 디바이스가 모두 포함된 디바이스 풀에서 실행을 시작하기로 선택한 경우 측정된 디바이스와 측정되지 않은 디바이스에 대한 규칙이 있습니다. 예를 들어 무제한 Android 디바이스 5대와 무제한 iOS 디바이스 5대가 있는 경우 웹 테스트 실행은 무제한 디바이스를 사용합니다.

 또 다른 예는 다음과 같습니다. 무제한 Android 디바이스가 5대 있고 무제한 iOS 디바이스는 없다고 가정합니다. 웹 실행에 Android 디바이스만 선택하면 무제한 디바이스가 사용됩니다. 웹 실행에 Android와 iOS 디바이스를 모두 선택하면 청구 방법에 따라 측정되며 무제한 디바이스는 사용되지 않습니다.

# AWS Device Farm의 내장 테스트
<a name="test-types-built-in-tests"></a>

Device Farm은 Android 및 iOS 디바이스에 내장된 테스트 유형을 지원합니다.

기본 제공 테스트의 경우 테스트 자동화 스크립트를 작성 및 유지 관리하지 않고도 여러 디바이스에서 애플리케이션을 테스트할 수 있습니다. Device Farm은 다음의 두 가지 기본 제공 테스트 유형을 제공합니다. 이렇게 하면 특히 Device Farm을 시작할 때 시간과 노력을 절약할 수 있습니다. Device Farm은 다음과 같은 내장 테스트 유형을 제공합니다.
+ [내장: fuzz (Android 및 iOS)](test-types-built-in-fuzz.md) – fuzz 테스트는 사용자 인터페이스 이벤트를 디바이스에 무작위로 전송한 다음 결과를 보고합니다.

Device Farm의 테스트 및 테스트 프레임워크에 대한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.



# Device Farm의 내장 fuzz 테스트 실행(Android 및 iOS)
<a name="test-types-built-in-fuzz"></a>

Device Farm의 내장 fuzz 테스트는 사용자 인터페이스 이벤트를 디바이스에 무작위로 전송한 다음 결과를 보고합니다.

Device Farm의 테스트에 관한 자세한 내용은 [AWS Device Farm의 테스트 프레임워크 및 내장 테스트](test-types.md) 섹션을 참조하세요.

**내장 fuzz 테스트를 실행하는 방법**

1. [https://console.aws.amazon.com/devicefarm](https://console.aws.amazon.com/devicefarm)에서 Device Farm 콘솔에 로그인하세요.

1. Device Farm 탐색 패널에서 **모바일 디바이스 테스트**를 선택한 다음 **프로젝트**를 선택하세요.

1. 프로젝트 목록에서 내장된 fuzz 테스트를 실행할 프로젝트를 선택하세요.
**작은 정보**  
검색 창을 사용하여 인스턴스 목록을 이름별로 필터링할 수 있습니다.  
프로젝트를 생성하려면, [AWS Device Farm에서 프로젝트 생성](how-to-create-project.md)의 지침을 따르세요.

1. **실행 생성**을 선택합니다.

1. **실행 설정**의 **실행 유형** 섹션에서 실행 유형을 선택합니다. 테스트할 앱이 없거나 Android(.apk) 앱을 테스트하는 경우 **Android 앱**을 선택합니다. iOS(.ipa) 앱을 테스트하는 경우 **iOS 앱**을 선택합니다.

1. **앱 선택**에서 테스트할 수 있는 앱이 없는 경우 **Device Farm에서 제공하는 샘플 앱 선택**을 선택합니다. 자체 앱을 가져오는 경우 **자체 앱 업로드**를 선택하고 애플리케이션 파일을 선택합니다.

1. **테스트 구성**의 **테스트 프레임워크 선택** 섹션에서 **내장: Fuzz**를 선택하세요.

1. 다음 설정 중 하나가 나타나면 기본값을 그대로 사용하거나 직접 지정할 수 있습니다.
   + **이벤트 개수**: fuzz 테스트가 수행할 사용자 인터페이스 이벤트 수를 나타내는 1\$110,000 사이의 숫자를 지정합니다.
   + **이벤트 스로틀**: 다음 사용자 인터페이스 이벤트를 수행하기 전에 fuzz 테스트가 대기할 시간을 밀리초 단위로 나타내는 0\$11,000 사이의 숫자를 지정합니다.
   + **Randomizer 시드**: 사용자 인터페이스 이벤트를 무작위화하는 데 사용할 fuzz 테스트의 숫자를 지정합니다. 후속 fuzz 테스트에 동일한 숫자를 지정하면 이벤트 시퀀스가 동일하도록 할 수 있습니다.

1. 나머지 지침을 완료하여 디바이스를 선택하고 실행을 시작하세요.