https://www.cnblogs.com/zouzou-busy/p/11440175.html
私たちの前には自動化を行い、我々は1つのデバイスで実行する場合、それは、互換性テストで、異なるモデルをテストしたいアプリをテストするためにマシンを使用することで、それはあまりにも面倒明らかです。そう頻繁にするとき、複数のデバイスで実行するために自動化されたテストケースを実行している間、我々は複数のデバイスを起動する必要があり、我々はまず、複数のappiumサービスを開始する必要があります。
サービスは、より多くのappiumを開始します
私たちは、すべてのappium appiumサービスを開始するので、デフォルトのポートは4723で開始し、我々は、ポート番号を指定するには、-pパラメータを使用することができ、appium -p 4723にappium同等を入力するには、コマンドラインの前に入力されます
別のサービスを開始
-p 4725 appium
だから我々は2 appiumサービスを開始しました。
このようなポート4723、ポート番号4724が接続されているAndroidデバイスなどのサービス番号、ので、次のサービス4725を分割します
appiumパラメータ
appiumつ以上のパラメータ-p、他のパラメータがあります
パラメータ | デフォルト値 | 意味 |
-U、 - UDID | ヌル | 固有のデバイス識別子に接続されている物理デバイス |
-a、 - アドレス | 0.0.0.0 | リスニングIPアドレス |
-p、 - ポート | 4723 | リスニングポート |
-bp、 - ブートストラップ・ポート | 4724 | Androidデバイス接続されたポート番号(アンドロイドのみ) |
-g、 - ログ | ヌル | 指定されたファイルへのログ出力 |
--no-リセット | 偽 | アプリケーションセッション状態は間にリセットされません |
--sessionオーバーライド | 偽 | (競合場合)セッションがカバーされることになります |
--app-活動 | ヌル | あなたは、Androidアプリケーションを開くと、アクティビティ名を開始 |
--app | ヌル | パスローカルまたはリモートインストールパッケージアプリ |
他のパラメータはappium -hを表示するために使用することができます
マルチデバイス開始
前提条件:
1.二台のマシンを接続します
2. 2つのサービスを開始
YAMLファイル
platformName:アンドロイド platforVersion:6.1.1 DEVICENAME:127.0.0.1:62001 appPackage:com.jgw.cscaの appActivity:com.jgw.csca.view.activity.LoginActivity unicodeKeyboard:真 resetKeyboard:真 Moresheth:偽 IP:アドレス127.0.0.1の ポート:4723
スクリプト
webdriverをするappiumをインポート インポートYAMLの devices_list = [「127.0.0.1:62001」、「127.0.0.1:62025」]#2のデバイス 『』 ' UDID DEVICENAMEを持っている必要があります実際のマシン、場合機器は、UDIDされた後あなたは簡単に書くことができる ポートがappiumポートサービスで、私は4723と4725がいることを始めた '' ' :desiredCaps(UDID、ポート)DEF ../のconf / capability.yaml '' R」、エンコーディング=オープン(と'に'UTF-8')ファイルとして: データ= yaml.load(ファイル、ローダ= yaml.FullLoaderが) {= desired_caps} [ 'PlatformName'] desired_caps = DATA [ 'PlatformName'] desired_caps [ 'platforVersion'] =データ[ ' platforVersion '] [desired_caps 'DATA [=]' DEVICENAME '] DEVICENAME desired_caps ['' UDID] = UDID desired_caps [ 'appActivity'] =データ[ 'appActivity']] = UDID desired_caps [ 'appPackage'] =データ[ 'appPackage'] desired_capsは[ 'appActivity'] =データ[ 'appActivityが']は desired_caps [ 'unicodeKeyboard'] =データ[ 'unicodeKeyboardが'] desired_caps [ 'resetKeyboard'] =データ[ 'resetKeyboardが'] [ 'NORESET'] =データ[ 'NORESET'] desired_caps ドライバ= webdriver.Remote( 'HTTPを:// '+ STR(データ[' IP '])+ ':' + STR(ポート)+ '/ WD /ハブ'、desired_caps) ''' 一次启动第 ドライバ= webdriver.Remote( 'HTTPを://127.0。 0.1:4723 / WD /ハブ'desired_caps) 第二次启动 ドライバ= webdriver.Remote( 'http://127.0.0.1:4725/wd/hub'、desired_caps) ''' ドライバを返す __name__ ==「__main__場合「: desiredCaps(devices_list [0]、4723) desiredCaps(devices_list [1]4725)
したがって、最初の実行手段は、第2のデバイス上で実行された後
複数のデバイスのマルチプロセスの起動
あなたはpythonのマルチスレッドやマルチプロセスの実装を使用することができ、複数のプロセスは、次の理由で推奨されています
マルチプロセスは、コピーをそれぞれ有する同じ変数は、互いに独立して、各プロセス内に存在します。すべてのスレッドで共有するマルチスレッド、すべての変数は、任意の変数は、したがって、最大の危険スレッド間で共有されるデータの量は、同時に複数のスレッドは、変数を変更することが容易であり、いずれかのスレッド修正することができるようにデータの混乱を変更するには
事前条件、及び上記と同じ
appiumインポートwebdriverをから インポートYAML インポートマルチプロセッシング devices_list = [ '127.0.0.1:62001'、 '127.0.0.1:62025']#两个设备 :DEF desiredCaps(UDID、ポート) オープン(」../会/能力を有します。 YAML」、R ''、符号化= 'UTF-8')ファイルとして: データ= yaml.load(ファイル、ローダ= yaml.FullLoader) desired_caps = {} desired_caps [ 'platformName'] =データ[ 'platformName'] desired_caps [ 'platforVersion'] =データ[ 'platforVersionが'] [ 'DEVICENAMEを'] desired_caps =データ[ 'DEVICENAMEは'] [ 'UDID'] desired_caps = UDID desired_caps [ 'appPackage'] =データ[ 'appPackageは、'] 「[desired_capsappActivity '] =データ[' appActivity '] desired_caps [ 'unicodeKeyboard'] =データ[ 'unicodeKeyboardが'] desired_caps [ 'resetKeyboard'] =データ[ 'resetKeyboard'] desired_caps [ 'NORESET'] =データ[ 'NORESET'] ドライバは= webdriver.Remote( 'のhttp://' + STR(データ[ 'IP'])+ [ :」+ STR(ポート)+ '/ WD /ハブ'、desired_caps) リターンドライバ desired_process = []#存储多设备 Iの範囲内(LEN(devices_list))のために: ポート= 4723 + 2 * iが 所望= multiprocessing.Process (目標= desiredCaps、引数=(devices_list [i]は、ポート)) desired_process.append(所望の)#将设备添加到里面、腹腔和端口 __name__ == '__main__'であれば: desired_processに所望のために: desired.start() desired_processに所望のために: desired.join()
私たちの前には自動化を行い、我々は1つのデバイスで実行する場合、それは、互換性テストで、異なるモデルをテストしたいアプリをテストするためにマシンを使用することで、それはあまりにも面倒明らかです。そう頻繁にするとき、複数のデバイスで実行するために自動化されたテストケースを実行している間、我々は複数のデバイスを起動する必要があり、我々はまず、複数のappiumサービスを開始する必要があります。
サービスは、より多くのappiumを開始します
私たちは、すべてのappium appiumサービスを開始するので、デフォルトのポートは4723で開始し、我々は、ポート番号を指定するには、-pパラメータを使用することができ、appium -p 4723にappium同等を入力するには、コマンドラインの前に入力されます
別のサービスを開始
-p 4725 appium
だから我々は2 appiumサービスを開始しました。
このようなポート4723、ポート番号4724が接続されているAndroidデバイスなどのサービス番号、ので、次のサービス4725を分割します
appiumパラメータ
appiumつ以上のパラメータ-p、他のパラメータがあります
パラメータ | デフォルト値 | 意味 |
-U、 - UDID | ヌル | 固有のデバイス識別子に接続されている物理デバイス |
-a、 - アドレス | 0.0.0.0 | リスニングIPアドレス |
-p、 - ポート | 4723 | リスニングポート |
-bp、 - ブートストラップ・ポート | 4724 | Androidデバイス接続されたポート番号(アンドロイドのみ) |
-g、 - ログ | ヌル | 指定されたファイルへのログ出力 |
--no-リセット | 偽 | アプリケーションセッション状態は間にリセットされません |
--sessionオーバーライド | 偽 | (競合場合)セッションがカバーされることになります |
--app-活動 | ヌル | あなたは、Androidアプリケーションを開くと、アクティビティ名を開始 |
--app | ヌル | パスローカルまたはリモートインストールパッケージアプリ |
他のパラメータはappium -hを表示するために使用することができます
マルチデバイス開始
前提条件:
1.二台のマシンを接続します
2. 2つのサービスを開始
YAMLファイル
platformName:アンドロイド platforVersion:6.1.1 DEVICENAME:127.0.0.1:62001 appPackage:com.jgw.cscaの appActivity:com.jgw.csca.view.activity.LoginActivity unicodeKeyboard:真 resetKeyboard:真 Moresheth:偽 IP:アドレス127.0.0.1の ポート:4723
スクリプト
webdriverをするappiumをインポート インポートYAMLの devices_list = [「127.0.0.1:62001」、「127.0.0.1:62025」]#2のデバイス 『』 ' UDID DEVICENAMEを持っている必要があります実際のマシン、場合機器は、UDIDされた後あなたは簡単に書くことができる ポートがappiumポートサービスで、私は4723と4725がいることを始めた '' ' :desiredCaps(UDID、ポート)DEF ../のconf / capability.yaml '' R」、エンコーディング=オープン(と'に'UTF-8')ファイルとして: データ= yaml.load(ファイル、ローダ= yaml.FullLoaderが) {= desired_caps} [ 'PlatformName'] desired_caps = DATA [ 'PlatformName'] desired_caps [ 'platforVersion'] =データ[ ' platforVersion '] [desired_caps 'DATA [=]' DEVICENAME '] DEVICENAME desired_caps ['' UDID] = UDID desired_caps [ 'appPackage'] =データ[ 'appPackage'] desired_capsは[ 'appActivity'] =データ[ 'appActivityが']は desired_caps [ 'unicodeKeyboard'] =データ[ 'unicodeKeyboard']は [ 'resetKeyboard'] =データ[ 'resetKeyboard'] desired_caps desired_caps [ 'NORESET'] =データ[ 'NORESET '] ドライバ= webdriver.Remote('のhttp:// '+ STR(データ[ 'IP'])+ ':' + STR(ポート)+ '/ WD /ハブ'、desired_caps)を ''' 第一次启动 ドライバ= webdriver.Remote( 'http://127.0.0.1:4723/wd/hub'、desired_caps) 第二次启动 ドライバ= webdriver.Remote( 'http://127.0.0.1:4725/wd/hub'、 desired_caps) '「' ドライバを返す __main__ 'の場合__name__ ==': desiredCaps(devices_list [0]、4723) desiredCaps(devices_list [1]、4725)
したがって、最初の実行手段は、第2のデバイス上で実行された後
複数のデバイスのマルチプロセスの起動
あなたはpythonのマルチスレッドやマルチプロセスの実装を使用することができ、複数のプロセスは、次の理由で推奨されています
マルチプロセスは、コピーをそれぞれ有する同じ変数は、互いに独立して、各プロセス内に存在します。すべてのスレッドで共有するマルチスレッド、すべての変数は、任意の変数は、したがって、最大の危険スレッド間で共有されるデータの量は、同時に複数のスレッドは、変数を変更することが容易であり、いずれかのスレッド修正することができるようにデータの混乱を変更するには
事前条件、及び上記と同じ
appiumインポートwebdriverをから インポートYAML インポートマルチプロセッシング devices_list = [ '127.0.0.1:62001'、 '127.0.0.1:62025']#两个设备 :DEF desiredCaps(UDID、ポート) オープン(」../会/能力を有します。 YAML」、R ''、符号化= 'UTF-8')ファイルとして: データ= yaml.load(ファイル、ローダ= yaml.FullLoader) desired_caps = {} desired_caps [ 'platformName'] =データ[ 'platformName'] desired_caps [ 'platforVersion'] =データ[ 'platforVersionが'] [ 'DEVICENAMEを'] desired_caps =データ[ 'DEVICENAMEは'] [ 'UDID'] desired_caps = UDID desired_caps [ 'appPackage'] =データ[ 'appPackageは、'] 「[desired_capsappActivity '] =データ[' appActivity '] desired_caps [ 'unicodeKeyboard'] =データ[ 'unicodeKeyboardが'] desired_caps [ 'resetKeyboard'] =データ[ 'resetKeyboardが'] [ 'NORESET'] =データ[ 'NORESET'] desired_caps ドライバ= webdriver.Remote( 'HTTPを:// '+ STR(ポート)+ '/ WD /ハブ'、desired_caps): '+ STR(データ[' IP'])+' リターンドライバ desired_process = []#存储多设备 範囲(LEN(devices_list)におけるIのために) : ポート= 4723 + 2 * iは 所望= multiprocessing.Process(目標= desiredCaps、引数の=(devices_list [i]は、ポート)) desired_process.append(所望の)#将设备添加到里面、IP和端口 場合__name__ == ' __main__ ': desired_processに希望について: 希望。開始() desired_processに所望のために: desired.join()