マルチスレッドまたはマルチプロセスappium(ターン)

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()
コードをコピー

 

 
カテゴリー:  appium

私たちの前には自動化を行い、我々は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()
コードをコピー

 

おすすめ

転載: www.cnblogs.com/showker/p/11609992.html