コンテンツへスキップ

AppiumとSelenium Grid

Selenium Grid 4+ の使用

Grid 4のrelay機能を使用すると、AppiumリクエストをAppiumサーバインスタンスにプロキシできます。2つの異なるAppiumインスタンスをSelenium Gridに接続する方法の例を示します。

Appium設定の定義

各Appiumインスタンスには、簡単に更新できる設定ファイルが必要です。そこには、その特定のサーバに固有の情報(例:他のサーバが使用しないドライバが使用するポートなど)を含める必要があります。2つのAppiumサーバを使用するので、2つの設定ファイルが必要です。

# appium1.yml
server:
  port: 4723
  use-drivers:
    - xcuitest
  default-capabilities:
    wdaLocalPort: 8100
    mjpegServerPort: 9100
    mjpegScreenshotUrl: "https://#:9100"

上記のYAML設定ファイルでは、Appiumサーバのポート、使用するドライバ、デフォルト機能として送信されるドライバのパラメータを指定します。目標は、このホスト上で実行されている他のドライバが、システムポートやその他の資源と競合しないようにすることです。2番目の設定ファイルは次のようになります。ここでは、競合を防ぐためにいくつかのポートを調整するだけです。

# appium2.yml
server:
  port: 4733
  use-drivers:
    - xcuitest
  default-capabilities:
    wdaLocalPort: 8110
    mjpegServerPort: 9110
    mjpegScreenshotUrl: "https://#:9110"

Gridノード設定の定義

コマンドのリレー、容量とオンラインステータスの決定などを管理するために、Appiumサーバごとに1つのGrid「ノード」を起動します。そのため、Gridノードごとに1つの設定ファイルも必要です。各ノードの設定には、対象とするAppiumサーバのアドレスと、セッションリクエストをAppiumにリレーするために受け入れる必要がある機能「設定」のリストを含める必要があります。2つのノードの設定例を以下に示します。

# node1.toml
[server]
port = 5555

[node]
detect-drivers = false

[relay]
url = "https://#:4723"
status-endpoint = "/status"
configs = [
    "1", "{\"platformName\": \"iOS\", \"appium:platformVersion\": \"15.5\", \"appium:deviceName\": \"iPhone 13\", \"appium:automationName\": \"XCUITest\"}"
]
# node2.toml
[server]
port = 5565

[node]
detect-drivers = false

[relay]
url = "https://#:4733"
status-endpoint = "/status"
configs = [
    "1", "{\"platformName\": \"iOS\", \"appium:platformVersion\": \"15.5\", \"appium:deviceName\": \"iPhone 12\", \"appium:automationName\": \"XCUITest\"}"
]

各ノードの設定は、ノードが実行されるポートもそれぞれ指定していることに注意してください。

まとめ

Gridノードだけでは不十分です。ロードバランサとすべてのノードのマネージャとして機能するGrid「ハブ」も必要です。最終的には、2つのAppiumサーバ、2つのGridノード、1つのGridハブの合計5つのプロセスが同時に実行されます。ログの混乱を避けるために、これらをそれぞれ別のターミナルウィンドウで実行することをお勧めします。各プロセスの開始方法は次のとおりです。

  1. appium --config appium1.yml
  2. appium --config appium2.yml
  3. java -jar /path/to/selenium.jar node --config node1.toml
  4. java -jar /path/to/selenium.jar node --config node2.toml
  5. java -jar /path/to/selenium.jar hub

ノードがAppiumサーバを検出し、ハブに登録されるまでしばらく待つと、単一のハブエンドポイント(デフォルトではhttps://#:4444)を介してすべてのAppiumトラフィックを送信できるようになります。

もちろん、ネットワーク上の異なるマシンで実行されているAppiumサーバとノードをリンクして、より大規模なグリッドを形成することもできます。

Selenium Grid 3の使用

--nodeconfigサーバ引数を使用して、ローカルのSelenium Grid 3セットアップドキュメント)インスタンスにAppiumサーバを登録できます。

appium server --nodeconfig /path/to/nodeconfig.json --base-path=/wd/hub

参照された設定ファイルでは、browserNameversionplatformの機能を定義する必要があり、これらのパラメータに基づいて、グリッドはテストを適切なデバイスにリダイレクトします。ホストの詳細とSelenium Gridの詳細も設定する必要があります。すべてのパラメータとその説明の完全なリストについては、こちらを参照してください。

Appiumサーバを起動すると、グリッドに登録され、グリッドコンソールページにデバイスが表示されます。

http://**\<grid-ip-adress\>**:**\<grid-port\>**/grid/console

Gridノード設定JSONの例

{
  "capabilities":
      [
        {
          "browserName": "<e.g._iPhone5_or_iPad4>",
          "version":"<version_of_iOS_e.g._7.1>",
          "maxInstances": 1,
          "platform":"<platform_e.g._MAC_or_ANDROID>"
        }
      ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",
    "host": "<host_name_appium_server_or_ip-address_appium_server>",
    "port": <appium_port>,
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": <grid_port>,
    "hubHost": "<Grid_host_name_or_grid_ip-address>",
    "hubProtocol": "<Protocol_of_Grid_defaults_to_http>"
  }
}

urlhostportが指定されていない場合、設定はlocalhost:<appium-port>を指すように自動的に更新されます。

AppiumサーバがSelenium Gridサーバとは異なるマシンで実行されている場合は、hosturlの設定に外部名/IPアドレスを使用してください。localhost127.0.0.1を使用すると、Selenium Gridが正しく接続できなくなります。