

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

# 원하는 기능을 통해 Device Farm에서 Appium 기반 테스트 속도 향상
<a name="custom-test-environments-extending-speed"></a>

Appium을 사용할 때 표준 모드 테스트 스위트가 매우 느릴 수 있습니다. 이는 Device Farm이 기본 설정을 적용하고 Appium 환경 사용 방법에 대해 어떠한 가정도 하지 않기 때문입니다. 이러한 기본값은 업계 모범 사례를 기반으로 구축되었지만 사용 상황에 따라 적용되지 않을 수 있습니다. Appium 서버의 파라미터를 미세 조정하려면 테스트 사양에서 기본 Appium 기능을 조정할 수 있습니다. 예를 들어 다음은 iOS 테스트 스위트에서 초기 시작 시간을 단축하기 위해 `usePrebuildWDA` 기능을 `true`로 설정합니다.

```
phases:
  pre_test:
    - # ... Start up Appium
    - >-
    appium --log-timestamp
    --default-capabilities "{\"usePrebuiltWDA\": true, \"derivedDataPath\":\"$DEVICEFARM_WDA_DERIVED_DATA_PATH\",
    \"deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \"platformName\":\"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \"app\":\"$DEVICEFARM_APP_PATH\",
    \"automationName\":\"XCUITest\", \"udid\":\"$DEVICEFARM_DEVICE_UDID_FOR_APPIUM\", \"platformVersion\":\"$DEVICEFARM_DEVICE_OS_VERSION\"}"
    >> $DEVICEFARM_LOG_DIR/appiumlog.txt 2>&1 &
```

Appium 기능은 쉘로 이스케이프 처리되고 인용된 JSON 구조여야 합니다.

다음과 같은 Appium 기능은 성능 향상의 일반적인 출처입니다.

`noReset` 및 `fullReset`  
상호 배타적인 이 두 기능은 각 세션이 완료된 후 Appium의 동작을 설명합니다. `noReset`을 `true`로 설정하면 Appium 세션이 종료될 때 Appium 서버가 애플리케이션에서 데이터를 제거하지 않으므로 사실상 어떤 정리 작업도 수행하지 않습니다. `fullReset`은 세션이 종료된 후 장치에서 모든 애플리케이션 데이터를 제거하고 지웁니다. 자세한 내용은 Appium 설명서의 [재설정 전략](http://appium.io/docs/en/writing-running-appium/other/reset-strategies/)을 참조하세요.

`ignoreUnimportantViews`(Android만 해당)  
Appium에 Android UI 계층 구조를 테스트와 관련된 뷰로만 압축하여 특정 요소 조회 속도를 높이도록 지시합니다.** 하지만 이렇게 하면 UI 레이아웃의 계층 구조가 변경되어 일부 XPath 기반 테스트 스위트가 손상될 수 있습니다.

`skipUnlock`(Android만 해당)  
Appium에 현재 설정된 PIN 코드가 없음을 알립니다. 이렇게 하면 화면 끄기 이벤트 또는 기타 잠금 이벤트 후 테스트 속도가 빨라집니다.

`webDriverAgentUrl`(iOS만 해당)  
`webDriverAgent`인 필수 iOS 종속 항목이 이미 실행 중이고 지정된 URL에서 HTTP 요청을 수락할 수 있다고 가정하도록 Appium에 지시합니다. 아직 `webDriverAgent`가 실행되지 않은 경우 Appium의 테스트 스위트 초기에 `webDriverAgent`를 시작하는 데 시간이 걸릴 수 있습니다. Appium을 시작할 때 `webDriverAgent`를 직접 시작하고 `webDriverAgentUrl`을 `http://localhost:8100`로 설정하면 테스트 스위트를 더 빠르게 부팅할 수 있습니다. 참고로 이 기능을 `useNewWDA` 기능과 함께 사용해서는 안 됩니다.  
다음 코드를 사용하여 디바이스의 로컬 포트 `8100`에 있는 테스트 사양 파일에서 `webDriverAgent`를 시작한 다음 테스트 호스트의 로컬 포트 `8100`로 전달할 수 있습니다(이렇게 하면 `webDriverAgentUrl` 값을 `http://localhost:8100`로 설정할 수 있음). 이 코드는 Appium 및 `webDriverAgent` 환경 변수를 설정하기 위한 코드를 정의한 후 설치 단계에서 실행해야 합니다.  

```
      # Start WebDriverAgent and iProxy
      - >-
        xcodebuild test-without-building -project /usr/local/avm/versions/$APPIUM_VERSION/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj
        -scheme WebDriverAgentRunner -derivedDataPath $DEVICEFARM_WDA_DERIVED_DATA_PATH
        -destination id=$DEVICEFARM_DEVICE_UDID_FOR_APPIUM IPHONEOS_DEPLOYMENT_TARGET=$DEVICEFARM_DEVICE_OS_VERSION
        GCC_TREAT_WARNINGS_AS_ERRORS=0 COMPILER_INDEX_STORE_ENABLE=NO >> $DEVICEFARM_LOG_DIR/webdriveragent_log.txt 2>&1 &
        
        iproxy 8100 8100 >> $DEVICEFARM_LOG_DIR/iproxy_log.txt 2>&1 &
```
그런 다음 테스트 사양 파일에 다음 코드를 추가하여 `webDriverAgent`가 성공적으로 시작되었는지 확인할 수 있습니다. Appium이 성공적으로 시작되었는지 확인한 후 사전 테스트 단계가 끝날 때 이 코드를 실행해야 합니다.  

```
      # Wait for WebDriverAgent to start
      - >-
        start_wda_timeout=0;
        while [ true ];
        do
          if [ $start_wda_timeout -gt 60 ];
          then
              echo "WebDriverAgent server never started in 60 seconds.";
              exit 1;
          fi;
          grep -i "ServerURLHere" $DEVICEFARM_LOG_DIR/webdriveragent_log.txt >> /dev/null 2>&1;
          if [ $? -eq 0 ];
          then
              echo "WebDriverAgent REST http interface listener started";
              break;
          else
              echo "Waiting for WebDriverAgent server to start. Sleeping for 1 seconds";
              sleep 1;
              start_wda_timeout=$((start_wda_timeout+1));
          fi;
        done;
```

Appium이 지원하는 기능에 대한 자세한 내용은 Appium 설명서의 [Appium 필요한 기능](http://appium.io/docs/en/writing-running-appium/caps/)을 참조하세요.

테스트 제품군을 확장하고 테스트를 최적화하는 자세한 방법은 [Device Farm의 사용자 지정 테스트 환경 확장](custom-test-environments-extending.md) 섹션을 참조하세요.