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 バージョンを選択できます。例えば、avm コマンドを使用して Appium サーバーバージョンを 2.1.2 に設定するには、テスト仕様の 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

npm コマンドを使って Appium 2 の最新バージョンを使用するには、テスト仕様の 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. テストを JAR ファイルにビルドするよう、pom.xml を変更して maven-jar-plugin を使用します。

    次のプラグインは、テストソースコード (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. 依存関係を JAR ファイルとしてビルドするよう、pom.xml を変更して maven-dependency-plugin を使用します。

    次のプラグインは依存関係を 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. テストとすべての依存関係を単一の .zip ファイルにパッケージするよう、pom.xml を変更して maven-assembly-plugin を使用します。

    次のプラグインは、上記のアセンブリを使用して、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. テストを JAR ファイルにビルドするよう、pom.xml を変更して maven-jar-plugin を使用します。

    次のプラグインは、テストソースコード (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. 依存関係を JAR ファイルとしてビルドするよう、pom.xml を変更して maven-dependency-plugin を使用します。

    次のプラグインは依存関係を 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. テストとすべての依存関係を単一の .zip ファイルにパッケージするよう、pom.xml を変更して maven-assembly-plugin を使用します。

    次のプラグインは、上記のアセンブリを使用して、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 にアップロードするには、ローカルマシンに次のものをインストールする必要があります:

  • Node Version Manager (nvm)

    ​不要な依存関係がテストパッケージに含まれないように、テストを開発およびパッケージするときにこのツールを使用してください。

  • Node.js

  • npm-bundle (グローバルにインストール済み)

  1. nvm が存在することを確認します。

    command -v nvm

    出力として nvm が表示されるはずです。

    詳細については、「」の「nvm」を参照してください 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. tests/ folder 下にあるすべてのキャッシュファイルを消去します:

    $ 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 Version Manager (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 デバイスで実行するようにテストをコンパイルする場合は、次のコマンドを実行して Gemファイル が Android テストホストの依存関係を使用するように構成します:

      bundle lock --add-platform x86_64-linux
    • iOS デバイスで実行するようにテストをコンパイルする場合は、次のコマンドを実行して、iOS テストホストの依存関係を使用するように Gem ファイルを構成します:

      bundle lock --add-platform x86_64-darwin
  6. 通常、bundler gem はデフォルトでインストールされます。そうでない場合は、インストールします:

    gem install bundler -v 2.3.26

圧縮テストパッケージファイルを作成する

警告

Device Farm では、圧縮されたテストパッケージ内のファイルのフォルダ構造が重要であり、一部のアーカイブツールでは ZIP ファイルの構造が暗黙的に変更されます。ローカルデスクトップのファイルマネージャー (Finder や 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. プロジェクトをチェックアウトします。

    プロジェクトのルートディレクトリにいることを確認します。​ ルートディレクトリで package.json を確認できます。

  2. ローカルの依存関係をインストールするには、このコマンドを実行します。

    npm install

    このコマンドは、現在のディレクトリ内に node_modules フォルダも作成します。

    注記

    この時点で、ローカルでテストを実行できるようにする必要があります。

  3. このコマンドを実行して、現在のフォルダ内のファイルを *.tgz ファイルにパッケージします。ファイルの名前は、package.json ファイルの name プロパティを使用して付けられます。

    npm-bundle

    この tarball(.tgz) ファイルには、コードと依存関係がすべて含まれています。

  4. このコマンドを実行して、前のステップで生成した tarball (*.tgz ファイル) を単一の zip アーカイブにバンドルします:

    zip -r MyTests.zip *.tgz

    これは、次の手順で Device Farm にアップロードする MyTests.zip ファイルです。

Python
Python 2

pip を使用して、必要な Python パッケージ (「ホイールハウス」と呼ばれる) のアーカイブを生成します:

$ pip wheel --wheel-dir wheelhouse -r requirements.txt

ホイールハウス、テスト、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. ソースコードを確認してください。

    プロジェクトのルートディレクトリにいることを確認します。​ ルートディレクトリで 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 アーカイブにバンドルします:

    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 は、DEVICEFARM_SCREENSHOT_PATH プロパティをローカルファイルシステム上の完全修飾パスに設定します。Device Farm は、そこを Appium スクリーンショットの保存先とみなします。スクリーンショットが保存されているテスト固有のディレクトリは、実行時に定義されます。スクリーンショットは Device Farm レポートに自動的に取り込まれます。スクリーンショットを表示するには、Device Farm コンソールで、[スクリーンショット] セクションを選択します。

Appium テストでのスクリーンショットの撮影の詳細については、Appium API ドキュメントの「スクリーンショットを撮る」を参照してください。