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つのプロセスが同時に実行されます。ログの混乱を避けるために、これらをそれぞれ別のターミナルウィンドウで実行することをお勧めします。各プロセスの開始方法は次のとおりです。
appium --config appium1.yml
appium --config appium2.yml
java -jar /path/to/selenium.jar node --config node1.toml
java -jar /path/to/selenium.jar node --config node2.toml
java -jar /path/to/selenium.jar hub
ノードがAppiumサーバを検出し、ハブに登録されるまでしばらく待つと、単一のハブエンドポイント(デフォルトではhttps://#:4444
)を介してすべてのAppiumトラフィックを送信できるようになります。
もちろん、ネットワーク上の異なるマシンで実行されているAppiumサーバとノードをリンクして、より大規模なグリッドを形成することもできます。
Selenium Grid 3の使用¶
--nodeconfig
サーバ引数を使用して、ローカルのSelenium Grid 3(セットアップドキュメント)インスタンスにAppiumサーバを登録できます。
参照された設定ファイルでは、browserName
、version
、platform
の機能を定義する必要があり、これらのパラメータに基づいて、グリッドはテストを適切なデバイスにリダイレクトします。ホストの詳細と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>"
}
}
url
、host
、port
が指定されていない場合、設定はlocalhost:<appium-port>
を指すように自動的に更新されます。
AppiumサーバがSelenium Gridサーバとは異なるマシンで実行されている場合は、host
とurl
の設定に外部名/IPアドレスを使用してください。localhost
と127.0.0.1
を使用すると、Selenium Gridが正しく接続できなくなります。