# 複数のデバイスでテストの並列実行

# 初めに

  • 多数のテストケースを実行するがある場合、連続して実行することは、時間がかかる可能性があります。時間を節約と、CPUのパワーの浪費を避けるためには、テストを並列実行することができます。

  • 複数のAppiumセッションを実行するには、基本的に4つの方法があります:

    • 複数のAppiumサーバーを実行し、1つのセッションを各サーバーに配置する
    • 一つのAppiumサーバーを実行し、複数のセッションをそこに配置する
    • Selenium Grid Hubの背後で1つ以上のAppiumサーバーを実行し、すべてのセッションをGrid Hubに配置する
    • クラウドプロバイダー(単一のゲートウェイの背後で多くのAppiumサーバーを実行します)を使用する。
  • このチュートリアルでは、単一のAppiumサーバーでテストを並列実行する方法を説明します(2番目のオプション)。

注意

同時に実行できるテストの数は、購入したエージェントの数に基づいています。

注意

クライアントがテストスイートまたはテストケースの実行を開始すると、それぞれがセッションを作成して、プラットフォームへの接続に使用するドライバーをAppiumサーバーに伝えます。 モバイルテストを実行するクイックマップ 参照

# 並列テストの設定

警告

現在、iOSのバグのせいで、Safari/Webviewセッションを並列実行できません参照

# 並列テストのケイパビリティ

# AndroidとiOSの一般プロパティ

  • udid: デバイスのIDです。デバイスのIDが特定されていない場合は、最初の利用可能なデバイス/エミュレーターが使用されます。つまり、ユーザーが複数のデバイスで別々に実行したいときに、一部のセッションが同じデバイスをターゲットにする可能性があります。テストを並列実行するには、deviceNameplatformVersionの両方を指定していない場合は、エミュレータでもudidケイパビリティを使用する必要があります(以下を参照)。
  • deviceName and platformVersion: deviceNameplatformVersionのユニークな組み合わせを特定すると、udidを特定しなくても、Appiumはデバイスが検出できます。

# Androidの特定プロパティ

  • systemPort: AppiumはHTTP接続を使用してUiAutomator2プロセスに接続します。サーバーシステムのポートは、一度に1つのセッションでのみ使用できます。単一のサーバーで複数のセッションを実行している場合、このフィールドを使用してポートを指定する必要があります(1つの場合は8200、別の場合は8201)。

  • chromeDriverPort:ウェブビューをテストしている場合、またはChromeを使用している場合、Chromedriverはセッションごとにユニークなポートも必要とします。

androidの例:

{
          "browser": "android-emulator",
          "app": "path to CarRental.apk",
          "desiredCapabilities": {
            "platformName": "android",
            "deviceName": "emulator",
            "udid": "emulator-5554",
            "automationName": "UiAutomator2",
            "newCommandTimeout": 600,
            "systemPort":8201
          }
        }

# iOSの特定プロパティ

  • wdaLocalPort: iOS XCUITestドライバーは特定のポートを使用して、iOSデバイスでWebDriverAgentと通信します。これらがユニークであることを確認します。

  • webkitDebugProxyPort:ios-webkit-debugは、AppiumでWebviewsやSafariをテストする時に特定のポートで接続を管理するサービスです。これらのポートがユニークであることを再度確認してください。

iOSの例:

{
          "browser": "iPhone Xs",
          "app": "path to file CarRental.ipa",
          "desiredCapabilities": {
            "platformName": "iOS",
            "platformVersion": "13.1",
            "deviceName": "iPhone  11 Pro Max",
            "udid": "unique id for devices/ simulator",
            "automationName": "XCUITest",
            "connectHardwareKeyboard": false,
            "newCommandTimeout": 600,
            "wdaLocalPort":8206
          }
        }

# JSONファイルにすべてのケイパビリティの配置。

  • テストを並列実行する時には、次の形式を使用して、gondola.jsonファイルで色々なブラウザで'multiple'の実行モードを宣言する必要があります。
"multiple": {
    "test-name-userInput": {
      "outputName": "",
      "browsers": [ {"cap1":"desiredCap1"} , {"cap2":"desiredCap2"} ]
    }
  }

並列実行のためのgondola.jsonの全てのサンプルファイル

{
  "output": "./results",
  "helpers": {
    "Appium": {
      "require": "./node_modules/@logigear/gondola/built/helper/AppiumEx",
      "smartWait": 5000,
      "app": "/Volumes/DATA/Projects/Test/CarRental/AUT/CarRental.apk",
        "desiredCapabilities": {
          "platformName": "android",
          "deviceName": "emulator"
        }
    },
    "GondolaHelper": {
      "require": "./node_modules/@logigear/gondola/built/helper/gondolahelper"
    }
  },
  "plugins": {
    "screenshotOnFail": {
      "enabled": "true"
    },
    "allure": {
      "enabled": "true"
    }
  },
  "tests": "./built/tests/*.js",
  "name": "SampleAndroidandiOS",
  "multiple": {
    "login": {
      "outputName": "login",
      "browsers": [
        {
          "browser": "iPhone 8",
          // set "app" to the absolute path of your ipa file.
          "app": "/Volumes/DATA/Projects/Test/CarRental/AUT/CarRental.ipa",
          "desiredCapabilities": {
            "automationName": "XCUITest",
            "platformName": "iOS",
            "platformVersion": "12.0",
            "deviceName": "iPhone 8",
            "connectHardwareKeyboard": false
          }
        },
        {
          "browser": "android-emulator",
          // set "app" to the absolute path of your apk file.
          "app": "/Volumes/DATA/Projects/Test/CarRental/AUT/CarRental.apk",
          "desiredCapabilities": {
            "platformName": "android",
            "deviceName": "emulator",
            "automationName": "UiAutomator2",
            "newCommandTimeout": 600
          }
        }
      ]
    }
  }
}

# テストの実行

  • '--all'を使用して、@logigear/gondolaにすべてのデバイスのすべてのスイートを実行するよう指示します。
    ファイル packages.jsonscriptセクションのgondola runコマンドの次に追加できるか、以下のように直接コマンドを呼び出すことができます。
./node_modules/.bin/gondola -c gondola.multi.json run-multiple --steps --all
最終更新: 2021/2/2 6:54:30