AWS Device Farm のカスタムテスト環境による作業 - AWS Device Farm

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Device Farm のカスタムテスト環境による作業

AWS Device Farm では、自動テスト (カスタムモード) 用のカスタム環境を構成できます。これは、すべての Device Farm ユーザーに推奨される方法です。Device Farm の環境について詳しくは、「テスト環境」を参照してください。

標準モードとは対照的なカスタムモードの利点は次のとおりです:

  • end-to-end テスト実行の高速化: テストパッケージはスイート内のすべてのテストを検出するために解析されないため、前処理/後処理のオーバーヘッドを回避できます。

  • ライブログとビデオストリーミング: カスタムモードを使用すると、クライアント側のテストログとビデオがライブストリーミングされます。この機能は、標準モードでは使用できません。

  • すべてのアーティファクトをキャプチャ: ホストとデバイスのカスタムモードではすべてのテストアーティファクトをキャプチャできます。この処理は、標準モードでは不可能な場合があります。

  • より一貫性が高く複製可能なローカル環境: 標準モードでは、個々のテストごとにアーティファクトが個別に提供されるため、特定の状況下では有益な場合があります。ただし、Device Farm は実行された各テストを異なる方法で処理するため、ローカルテスト環境が元の構成と異なる場合があります。

    対照的に、カスタムモードでは、Device Farm のテスト実行環境をローカルテスト環境と一貫性のあるものにできます。

カスタム環境は、YAML 形式のテスト仕様ファイルを使用して構成されます。Device Farm には、サポートされているテストタイプごとにデフォルトのテスト仕様ファイルが用意されており、そのまま使用できますが、テストフィルタや構成ファイルなどをカスタマイズしてテスト仕様に追加することもできます。編集したテスト仕様は、future テスト実行のために保存できます。

詳細については、「AWS CLI を使用したカスタムテスト仕様のアップロード」および「Device Farm でのテスト実行の作成」を参照してください。

テスト仕様構文

これはYAML テスト仕様ファイルの構造を表します:

version: 0.1 phases: install: commands: - command - command pre_test: commands: - command - command test: commands: - command - command post_test: commands: - command - command artifacts: - location - location

テスト仕様には次のものが含まれています:

version

Device Farm でサポートされているテスト仕様バージョンが反映されます。現在のバージョン番号は 0.1 です。

phases

このセクションは、テスト実行中に実行されるコマンドのグループを含みます。

許可されるテストフェーズ名は次のとおりです:

install

オプション。

Device Farm によってサポートされるテストフレームワークの依存関係はデフォルトで既にインストールされています。このフェーズには、追加コマンドが含まれます (インストール時に Device Farm で実行するコマンドがある場合)。

pre_test

オプション。

自動テスト実行前に実行されたコマンド (ある場合)。

test

オプション。

自動テスト実行中に実行されたコマンド。テストフェーズでいずれかのコマンドが失敗した場合、そのテストは失敗としてマークされます。

post_test

オプション。

自動テスト実行後に実行されたコマンド (ある場合)。

artifacts

オプション。

Device Farm は、カスタムレポート、ログファイル、画像などのアーティファクトをここで指定した場所から収集します。ワイルドカード文字はアーティファクトの場所の一部としてサポートされていないため、場所ごとに有効なパスを指定する必要があります。

これらのテストアーティファクトは、テスト実行でデバイスごとに表示されます。テストアーティファクトの取得については、「カスタムテスト環境でのアーティファクトの使用」を参照してください。

重要

テスト仕様は、有効な YAML ファイルとしてフォーマットされる必要があります。テスト仕様のインデントまたはスペースが無効の場合は、テスト実行が失敗する可能性があります。タブは YAML ファイルでは使用できません。テスト仕様が有効な YAML かどうかをテストするには、YAML バリデーターを使用します。詳細については、「YAML ウェブサイト」を参照してください。

テスト仕様の例。

これは、Appium Java TestNG テスト実行を構成する Device Farm YAML テスト仕様の一例です:

version: 0.1 # This flag enables your test to run using Device Farm's Amazon Linux 2 test host when scheduled on # Android devices. By default, iOS device tests will always run on Device Farm's macOS test hosts. # For Android, you can explicitly select your test host to use our Amazon Linux 2 infrastructure. # For more information, please see: # https://docs.aws.amazon.com/devicefarm/latest/developerguide/amazon-linux-2.html android_test_host: amazon_linux_2 # Phases represent collections of commands that are executed during your test run on the test host. phases: # The install phase contains commands for installing dependencies to run your tests. # For your convenience, certain dependencies are preinstalled on the test host. # For Android tests running on the Amazon Linux 2 test host, many software libraries are available # from the test host using the devicefarm-cli tool. To learn more, please see: # https://docs.aws.amazon.com/devicefarm/latest/developerguide/amazon-linux-2-devicefarm-cli.html # For iOS tests, you can use the Node.JS tools nvm, npm, and avm to setup your environment. By # default, Node.js versions 16.20.2 and 14.19.3 are available on the test host. install: commands: # The Appium server is written using Node.js. In order to run your desired version of Appium, # you first need to set up a Node.js environment that is compatible with your version of Appium. - |- if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "Android" ]; then devicefarm-cli use node 16; else # For iOS, use "nvm use" to switch between the two preinstalled NodeJS versions 14 and 16, # and use "nvm install" to download a new version of your choice. nvm use 16; fi; - node --version # Use the devicefarm-cli to select a preinstalled major version of Appium on Android. # Use avm or npm to select Appium for iOS. - |- if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "Android" ]; then # For Android, the Device Farm service automatically updates the preinstalled Appium versions # over time to incorporate the latest minor and patch versions for each major version. If you # wish to select a specific version of Appium, you can instead use NPM to install it: # npm install -g appium@2.1.3; devicefarm-cli use appium 2; else # For iOS, Appium versions 1.22.2 and 2.2.1 are preinstalled and selectable through avm. # For all other versions, please use npm to install them. For example: # npm install -g appium@2.1.3; # Note that, for iOS devices, Appium 2 is only supported on iOS version 14 and above using # NodeJS version 16 and above. avm 2.2.1; fi; - appium --version # For Appium version 2, for Android tests, Device Farm automatically updates the preinstalled # UIAutomator2 driver over time to incorporate the latest minor and patch versions for its major # version 2. If you want to install a specific version of the driver, you can use the Appium # extension CLI to uninstall the existing UIAutomator2 driver and install your desired version: # - |- # if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "Android" ]; # then # appium driver uninstall uiautomator2; # appium driver install uiautomator2@2.34.0; # fi; # For Appium version 2, for iOS tests, the XCUITest driver is preinstalled using version 5.7.0 # If you want to install a different version of the driver, you can use the Appium extension CLI # to uninstall the existing XCUITest driver and install your desired version: # - |- # if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "iOS" ]; # then # appium driver uninstall xcuitest; # appium driver install xcuitest@5.8.1; # fi; # We recommend setting the Appium server's base path explicitly for accepting commands. - export APPIUM_BASE_PATH=/wd/hub # Install the NodeJS dependencies. - cd $DEVICEFARM_TEST_PACKAGE_PATH # First, install dependencies which were packaged with the test package using npm-bundle. - npm install *.tgz # Then, optionally, install any additional dependencies using npm install. # If you do run these commands, we strongly recommend that you include your package-lock.json # file with your test package so that the dependencies installed on Device Farm match # the dependencies you've installed locally. # - cd node_modules/* # - npm install # The pre-test phase contains commands for setting up your test environment. pre_test: commands: # Device farm provides different pre-built versions of WebDriverAgent, an essential Appium # dependency for iOS devices, and each version is suggested for different versions of Appium: # DEVICEFARM_WDA_DERIVED_DATA_PATH_V8: this version is suggested for Appium 2 # DEVICEFARM_WDA_DERIVED_DATA_PATH_V7: this version is suggested for Appium 1 # Additionally, for iOS versions 16 and below, the device unique identifier (UDID) needs # to be slightly modified for Appium tests. - |- if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "iOS" ]; then if [ $(appium --version | cut -d "." -f1) -ge 2 ]; then DEVICEFARM_WDA_DERIVED_DATA_PATH=$DEVICEFARM_WDA_DERIVED_DATA_PATH_V8; else DEVICEFARM_WDA_DERIVED_DATA_PATH=$DEVICEFARM_WDA_DERIVED_DATA_PATH_V7; fi; if [ $(echo $DEVICEFARM_DEVICE_OS_VERSION | cut -d "." -f 1) -le 16 ]; then DEVICEFARM_DEVICE_UDID_FOR_APPIUM=$(echo $DEVICEFARM_DEVICE_UDID | tr -d "-"); else DEVICEFARM_DEVICE_UDID_FOR_APPIUM=$DEVICEFARM_DEVICE_UDID; fi; fi; # Appium downloads Chromedriver using a feature that is considered insecure for multitenant # environments. This is not a problem for Device Farm because each test host is allocated # exclusively for one customer, then terminated entirely. For more information, please see # https://github.com/appium/appium/blob/master/packages/appium/docs/en/guides/security.md # We recommend starting the Appium server process in the background using the command below. # The Appium server log will be written to the $DEVICEFARM_LOG_DIR directory. # The environment variables passed as capabilities to the server will be automatically assigned # during your test run based on your test's specific device. # For more information about which environment variables are set and how they're set, please see # https://docs.aws.amazon.com/devicefarm/latest/developerguide/custom-test-environment-variables.html - |- if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "Android" ]; then appium --base-path=$APPIUM_BASE_PATH --log-timestamp \ --log-no-colors --relaxed-security --default-capabilities \ "{\"appium:deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \ \"platformName\": \"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \ \"appium:app\": \"$DEVICEFARM_APP_PATH\", \ \"appium:udid\":\"$DEVICEFARM_DEVICE_UDID\", \ \"appium:platformVersion\": \"$DEVICEFARM_DEVICE_OS_VERSION\", \ \"appium:chromedriverExecutableDir\": \"$DEVICEFARM_CHROMEDRIVER_EXECUTABLE_DIR\", \ \"appium:automationName\": \"UiAutomator2\"}" \ >> $DEVICEFARM_LOG_DIR/appium.log 2>&1 & else appium --base-path=$APPIUM_BASE_PATH --log-timestamp \ --log-no-colors --relaxed-security --default-capabilities \ "{\"appium:deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \ \"platformName\": \"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \ \"appium:app\": \"$DEVICEFARM_APP_PATH\", \ \"appium:udid\":\"$DEVICEFARM_DEVICE_UDID_FOR_APPIUM\", \ \"appium:platformVersion\": \"$DEVICEFARM_DEVICE_OS_VERSION\", \ \"appium:derivedDataPath\": \"$DEVICEFARM_WDA_DERIVED_DATA_PATH\", \ \"appium:usePrebuiltWDA\": true, \ \"appium:automationName\": \"XCUITest\"}" \ >> $DEVICEFARM_LOG_DIR/appium.log 2>&1 & fi; # This code will wait until the Appium server starts. - |- appium_initialization_time=0; until curl --silent --fail "http://0.0.0.0:4723${APPIUM_BASE_PATH}/status"; do if [[ $appium_initialization_time -gt 30 ]]; then echo "Appium did not start within 30 seconds. Exiting..."; exit 1; fi; appium_initialization_time=$((appium_initialization_time + 1)); echo "Waiting for Appium to start on port 4723..."; sleep 1; done; # The test phase contains commands for running your tests. test: commands: # Your test package is downloaded and unpackaged into the $DEVICEFARM_TEST_PACKAGE_PATH directory. # When compiling with npm-bundle, the test folder can be found in the node_modules/*/ subdirectory. - cd $DEVICEFARM_TEST_PACKAGE_PATH/node_modules/* - echo "Starting the Appium NodeJS test" # Enter your command below to start the tests. The command should be the same command as the one # you use to run your tests locally from the command line. An example, "npm test", is given below: - npm test # The post-test phase contains commands that are run after your tests have completed. # If you need to run any commands to generating logs and reports on how your test performed, # we recommend adding them to this section. post_test: commands: # Artifacts are a list of paths on the filesystem where you can store test output and reports. # All files in these paths will be collected by Device Farm. # These files will be available through the ListArtifacts API as your "Customer Artifacts". artifacts: # By default, Device Farm will collect your artifacts from the $DEVICEFARM_LOG_DIR directory. - $DEVICEFARM_LOG_DIR