Appium 및 AWS Device Farm과 함께 작업 - AWS Device Farm

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

Appium 및 AWS Device Farm과 함께 작업

이 섹션에서는 Appium 테스트를 구성 및 패키징하고 Device Farm에 업로드하는 방법을 설명합니다. Appium은 네이티브 애플리케이션 및 모바일 웹 애플리케이션을 자동화하는 오픈 소스 도구입니다. 자세한 정보는 Appium 웹 사이트에서 Appium 소개를 참조하세요.

샘플 앱과 작동 중인 테스트에 대한 링크는 Android용 Device Farm 샘플 앱 및 iOS용 Device Farm 샘플 앱 온을 참조하십시오 GitHub.

버전 지원

다양한 프레임워크 및 프로그래밍 언어에 대한 지원은 사용되는 언어에 따라 다릅니다.

Device Farm은 Appium 1.x 및 2.x 서버 버전을 지원합니다. Android의 경우 devicefarm-cli로 Appium 주요 버전을 선택하여 사용할 수 있습니다. 예를 들어 Appium 서버 버전 2를 사용하려면 다음 명령을 테스트 사양 YAML 파일에 추가합니다.

phases: install: commands: # To install a newer version of Appium such as version 2: - export APPIUM_VERSION=2 - devicefarm-cli use appium $APPIUM_VERSION

iOS의 경우 avm 또는 npm 명령을 사용하여 특정 Appium 버전을 선택할 수 있습니다. 예를 들어 Appium 서버 버전을 2.1.2로 설정하기 위해 avm 명령을 사용하려면 다음 명령을 테스트 사양 YAML 파일에 추가하세요.

phases: install: commands: # To install a newer version of Appium such as version 2.1.2: - export APPIUM_VERSION=2.1.2 - avm $APPIUM_VERSION

최신 버전의 Appium 2를 사용하는 npm 명령을 사용하여 테스트 사양 YAML 파일에 다음 명령을 추가합니다.

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

devicefarm-cli 또는 다른 CLI 명령에 대한 자세한 내용은 AWS CLI 참조를 참조하세요.

프레임워크의 모든 기능(주석 등)을 사용하려면 사용자 지정 테스트 환경을 선택하고 AWS CLI 또는 Device Farm 콘솔을 사용하여 사용자 지정 테스트 사양을 업로드합니다.

Appium 테스트 패키지 구성

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

Java (JUnit)
  1. pom.xml을 수정하여 패키징을 JAR 파일로 설정하세요.

    <groupId>com.acme</groupId> <artifactId>acme-myApp-appium</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
  2. 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>
  3. 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>
  4. 다음 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>
  5. 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>
  2. 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>
  3. 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>
  4. 다음 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>
  5. 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)

    불필요한 종속 항목이 테스트 패키지에 포함되지 않도록 테스트를 개발하고 패키징하려면 이 도구를 사용하세요.

  • Node.js

  • npm-bundle(전역 설치됨)

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

    command -v nvm

    출력에 nvm이 나타납니다.

    자세한 내용은 nvm GitHub on을 참조하십시오.

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

    nvm install node

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

    nvm install 11.4.0
  3. 올바른 버전의 노드가 사용 중인지 확인합니다.

    node -v
  4. npm-bundle 전 세계 설치

    npm install -g npm-bundle
Python
  1. 불필요한 종속 항목이 앱 패키지에 포함되지 않도록 테스트를 개발하고 패키징하기 위해서는 Python virtualenv를 설정하는 것이 좋습니다.

    $ virtualenv workspace $ cd workspace $ source bin/activate
    작은 정보
    • --system-site-packages 옵션으로 Python virtualenv를 생성하지 마세요. 글로벌 사이트 패키지 디렉터리에서 패키지를 상속하기 때문입니다. 이로 인해 테스트에 필요하지 않은 종속성이 가상 환경에 포함될 수 있습니다.

    • 또한 이러한 테스트가 실행되는 인스턴스에 이러한 기본 라이브러리가 없을 수 있으므로, 테스트가 기본 라이브러리에 종속된 종속성을 사용하지 않음을 확인해야 합니다.

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

    $ pip install pytest
  3. 가상 환경에 Appium Python 클라이언트를 설치하세요.

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

    $ find tests/

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

    tests/ tests/my-first-tests.py tests/my-second-tests/py
  5. 가상 환경 작업 공간 폴더에서 이 명령을 실행하여 실행 없이도 테스트 목록을 표시합니다.

    $ py.test --collect-only tests/

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

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

    $ 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 {} +
  7. 작업 공간에서 다음 명령을 실행하여 requirements.txt 파일을 생성하세요.

    $ pip freeze > requirements.txt
Ruby

Appium Ruby 테스트를 패키징하여 Device Farm에 업로드하려면 로컬 컴퓨터에 다음을 설치해야 합니다.

  • Ruby 버전 관리자(RVM)

    불필요한 종속 항목이 테스트 패키지에 포함되지 않도록 테스트를 개발하고 패키징하려면 이 명령줄 도구를 사용하세요.

  • Ruby

  • Bundler(이 gem은 일반적으로 Ruby와 함께 설치됩니다.)

  1. 필수 키와 RVM 및 Ruby를 설치하세요. 자세한 내용은 RVM 웹 사이트에서 RVM 설치를 참조하세요.

    설치가 완료되면 로그아웃한 후 다시 로그인하여 터미널을 다시 로드합니다.

    참고

    RVM이 bash 쉘 전용 함수로 로드됩니다.

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

    command -v rvm

    출력에 rvm이 나타납니다.

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

    rvm install ruby 2.5.3 --autolibs=0

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

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

    bundle config specific_platform true
  5. .lock 파일을 업데이트하여 테스트를 실행하는 데 필요한 플랫폼을 추가하세요.

    • Android 디바이스에서 실행할 테스트를 컴파일하는 경우 다음 명령어를 실행하여 Android 테스트 호스트의 종속성을 사용하도록 Gemfile을 구성하세요.

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

      bundle lock --add-platform x86_64-darwin
  6. bundler gem은 대개 기본적으로 설치됩니다. 설치되어 있지 않다면 다음을 설치하세요.

    gem install bundler -v 2.3.26

압축 테스트 패키지 파일 생성

주의

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을 볼 수 있습니다.

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

    npm install

    또한 이 명령은 현재 디렉터리에 node_modules 폴더를 만듭니다.

    참고

    이제 테스트를 로컬로 실행할 수 있습니다.

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

    npm-bundle

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

  4. 이 명령을 사용하여, 전 단계에서 생성한 tarball(*.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
  2. 다음 명령을 실행하여 앞에서 생성한 환경을 사용하세요.

    rvm gemset use myGemset
  3. 소스 코드를 확인하세요.

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

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

    bundle install
    참고

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

    bundle exec $test_command
  5. vendor/cache 폴더의 gem을 패키징하세요.

    # This will copy all the .gem files needed to run your tests into the vendor/cache directory bundle package --all-platforms
  6. 다음 명령을 실행하여, 소스 코드와 모든 종속 항목을 하나의 압축 아카이브로 묶어 생성하세요.

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

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

Device Farm에 테스트 패키지 업로드

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

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

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

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

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

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

  5. 기본 Android 및 iOS 테스트의 경우

    애플리케이션 선택 페이지에서 모바일 앱을 선택하고 파일 선택을 클릭하여 애플리케이션의 배포 가능 패키지를 업로드하세요.

    참고

    파일은 Android .apk 또는 iOS .ipa여야 합니다. iOS 애플리케이션은 시뮬레이터가 아닌 실제 디바이스용으로 빌드되어야합니다.

    모바일 웹 애플리케이션 테스트의 경우

    애플리케이션 선택 페이지에서 웹 앱을 선택하세요.

  6. 테스트에 적절한 이름을 지정하세요. 여기에는 공백이나 구두점 조합이 포함될 수 있습니다.

  7. 다음을 선택하세요.

  8. 구성 페이지의 테스트 프레임워크 설정 섹션에서 Appium 언어를 선택한 다음 파일 선택을 하세요.

  9. 테스트가 포함된 .zip 파일을 찾아서 선택하세요. 이 .zip 파일은 Appium 테스트 패키지 구성에 설명된 형식이어야 합니다.

  10. 사용자 지정 환경에서 테스트 실행을 선택하세요. 이러한 실행 환경을 사용하면 테스트 설정, 해제 및 간접 호출을 완벽하게 제어할 수 있을 뿐만 아니라 특정 버전의 런타임 및 Appium 서버를 선택할 수 있습니다. 테스트 사양 파일을 통해 사용자 지정 환경을 구성할 수 있습니다. 자세한 내용은 AWS Device Farm에서 사용자 지정 테스트 환경으로 작업 섹션을 참조하십시오.

  11. 다음을 선택한 다음 지침에 따라 디바이스를 선택하고 실행을 시작하세요. 자세한 내용은 Device Farm에서 테스트 실행 생성 단원을 참조하세요.

참고

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

테스트의 스크린샷 캡처(선택 사항)

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

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

Appium 테스트에서 스크린샷을 캡처하는 자세한 방법은 Appium API 설명서의 스크린샷 캡처을 참조하세요.