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.6.5 이상을 모두 지원합니다. avm 명령을 사용하여 Appium 버전을 선택할 수 있습니다. 예를 들어 Appium 서버 버전 1.9.1을 사용하려면 다음 명령을 테스트 사양 YAML 파일에 추가합니다.

phases: install: commands: # To install a newer version of Appium such as version 1.9.1: - export APPIUM_VERSION=1.9.1 - avm $APPIUM_VERSION - ln -s /usr/local/avm/versions/$APPIUM_VERSION/node_modules/.bin/appium /usr/local/avm/versions/$APPIUM_VERSION/node_modules/appium/bin/appium.js

주석과 같은 프레임워크의 모든 기능을 사용하려면 사용자 지정 테스트 환경을 선택하고AWS CLI 또는 Device Farm 콘솔을 사용하여 사용자 지정 테스트 사양을 업로드하십시오.

Java (TestNG)

현재 Device Farm 팜은 Appium Java 테스트를 실행하기 위한 Java 8을 지원합니다.

Java (JUnit)

현재 Device Farm 팜은 Appium Java 테스트를 실행하기 위한 Java 8을 지원합니다.

Node.JS

Device Farm 팜에서 Appium Node.js 테스트를 실행할 때 모든 Node.js 버전을 사용할 수 있습니다. 테스트 사양 YAML 파일에 Node.js 버전을 지정합니다.

Python

표준 모드에서 Device Farm은 테스트 실행을 위한 Python 버전 2.7을 지원합니다 사용자 지정 모드에서는 Python 2.7과 Python 3(3.7)을 모두 사용할 수 있습니다.

Ruby

Device Farm 팜에서 Appium Ruby 테스트를 실행할 때 모든 Ruby 버전을 사용할 수 있습니다. 테스트 사양 YAML 파일에 루비 버전 (예: 2.5.1) 을 지정합니다.

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. pom.xml을 사용하도록 maven-jar-plugin을 수정하여 테스트를 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. pom.xml을 사용하도록 maven-dependency-plugin을 수정하여 종속성을 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. pom.xml을 사용하도록 maven-assembly-plugin을 수정하여 테스트와 모든 종속성을 하나의 .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. pom.xml을 사용하도록 maven-jar-plugin을 수정하여 테스트를 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. pom.xml을 사용하도록 maven-dependency-plugin을 수정하여 종속성을 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. pom.xml을 사용하도록 maven-assembly-plugin을 수정하여 테스트와 모든 종속성을 하나의 .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 on을 참조하십시오 GitHub.

  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 Farm은 테스트가 에 저장될 것으로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.1)를 설치하려면 다음 명령을 실행합니다.

    rvm install ruby 2.5.1 --autolibs=0

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

    ruby -v
  4. bundler gem은 대개 기본적으로 설치됩니다. 설치되어 있지 않으면 설치하십시오.

    gem install bundler

압축된 테스트 패키지 파일 만들기

이제 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 디렉터리에 있어야 합니다. 루트 디렉터리에서 package.json을 볼 수 있습니다.

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

    npm install

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

    참고

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

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

    npm-bundle

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

  4. 이 명령을 사용하여, 전 단계에서 생성한 tarball(*.tgz 파일)을 하나의 압축 아카이브로 묶어 생성합니다.

    zip -r MyTests.zip *.tgz

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

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 디렉터리에 있어야 합니다. 루트 디렉터리에서 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
  6. 다음 명령을 실행하여, 소스 코드와 모든 종속 항목을 하나의 압축 아카이브로 묶어 생성합니다.

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

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

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

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

  1. Device Farm 콘솔에 https://console.aws.amazon.com/devicefarm 에서 로그인합니다.

  2. Device Farm 탐색 패널에서 모바일 장치 테스트를 선택한 다음 프로젝트를 선택합니다.

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

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

  4. 프로젝트를 연 후 Create a new run(새 실행 생성)을 선택합니다.

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

    애플리케이션 선택 페이지에서 모바일 앱을 선택한 다음 파일 선택을 선택하여 애플리케이션의 배포 가능 패키지를 업로드합니다.

    참고

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

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

    응용 프로그램 선택 페이지에서 웹 앱을 선택합니다.

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

  7. Next(다음)를 선택합니다.

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

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

  10. 표준 환경에서 테스트를 실행하거나 사용자 지정 환경에서 테스트를 실행하도록 선택하세요. 표준 환경에는 세부적인 테스트별 보고 기능이 포함되어 있으며, 사용자 지정 환경에서는 모든 프레임워크에 구축된 사용자 지정 테스트 도구를 실행할 수 있습니다.

    사용자 지정 환경을 사용하면 테스트 설정, 해제 및 호출을 완벽하게 제어할 수 있을 뿐만 아니라 특정 버전의 런타임 및 Appium 서버를 선택할 수 있습니다. 일부 언어 기능(예: Python 3 또는 사용자 지정 TestNG 실행)은 사용자 지정 환경을 통해서만 사용할 수 있습니다.

    Java (JUnit)

    JUnit은 표준 및 사용자 지정 환경 모두에서 문제없이 실행됩니다.

    Java (TestNG)

    testng.xml 구성을 사용한 TestNG 호출은 사용자 지정 모드에서만 사용할 수 있습니다.

    Node.JS

    사용자 지정 모드를 사용하면 추가 파라미터를 지정하거나 테스트 프레임워크의 비표준 호출을 사용할 수 있습니다.

    Python

    Python 2.7은 표준 환경과 사용자 지정 모드 모두에서 지원됩니다. 파이썬을 지정할 때 두 가지 모두의 기본값입니다.

    Python 3은 사용자 지정 모드에서만 지원됩니다. Python 3을 사용 중인 Python 버전으로 선택하려면 다음과 같이 PYTHON_VERSION에서 3으로 설정하여 테스트 사양을 변경합니다.

    phases: install: commands: # ... - export PYTHON_VERSION=3 - export APPIUM_VERSION=1.14.2 # Activate the Virtual Environment that Device Farm sets up for Python 3, then use Pip to install required packages. - cd $DEVICEFARM_TEST_PACKAGE_PATH - . bin/activate - pip install -r requirements.txt # ...
    Ruby

    사용자 지정 모드에서는 다음rvm 명령을 사용하여 특정 버전의 Ruby를 지정할 수 있습니다.

    phases: install: commands: - rvm install version --autolibs=0 - rvm use version
  11. [다음] 을 선택한 후 지침에 따라 장치를 선택하고 실행을 시작합니다. 자세한 내용은 Device Farm 팜에서 테스트 실행 생성을 참조하세요.

참고

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

테스트 스크린샷 찍기 (선택 사항)

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

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

Appium 테스트에서 스크린샷을 캡처하는 방법에 대한 자세한 내용은 Appium API 설명서의 스크린샷 캡처를 참조하십시오.