2016-12-31 7 views
0

私は、Webサイトでユーザーアカウントをすばやく作成するためにSeleniumで実行するメソッドを持っています。現在は1つずつ処理していますが、10をすぐに処理できると思っています。同時実行のJava forループ

私は2次元配列のどの行からユーザ情報を読み込むかをコードに伝えるために現在forループを使用しています。ストリームやスレッドに正しい値を使用させ、正しいユーザー情報を取得する方法の概念には苦労しています。

は現在、私は以下の簡素化のようなものがあります。

私は新しいページおよびドライバをロードする必要が毎回これがループし、ウェブのフィールドに配列の値を送信する必要があります。だから、基本的にはこれをオフにしてループして、最初のループが次のループを開始する前に終了するのを待つのではなく、おそらく一度に10を限度に制限します。

for(i=0,i<myarray.length, i++) 
{ 
     Webdriver.start(); 
     WebElement.findby.(By.name("field1").sendkeys(myArray[i][2]); 
     Webdriver.end(); 
} 

私はコードが実際のコードではないと言っているので、私の質問を渡すだけです。

希望は明らかです。

答えて

1

myArrayを繰り返し実行していて、その配列内の各要素に対して一度テストを実行していますが、1つのテストを実行して、次のテストを実行する前に終了するのを待つ代わりに、一度に一束。

これは、Java 8のForkJoinPoolで非常に簡単に行うことができます。

ForkJoinTask[] tasks = new ForkJoinTask[myarray.length]; 
for(i=0,i<myarray.length, i++) 
{ 
    int j = i; // need an effectively final copy of i 
    tasks[i] = ForkJoinPool.commonPool().submit(() -> { 
     Webdriver.start(); 
     WebElement.findby.(By.name("field1").sendkeys(myArray[j][2]); 
     Webdriver.end(); 
    }); 
} 
for (i = 0; i < my array.length; i++) { 
    tasks[i].join(); 
} 

"共通の" ForkJoinPoolのスレッドを使用してテストが並行して実行されます。使用するスレッドの数を調整する場合は、独自のForkJoinPoolを作成します。 (詳細については、this questionを参照してください。)

+0

申し訳ありませんが、おそらく私は明確ではなかった、または多分私はこれもだったと答えアドレス。だから私は、Excelのテーブルのような配列を使用しているので、ユーザーのデータは、多くの列の配列の1つの行にあります。私は各テストのために新しいWebドライバを起動する必要があります。また、各行ごとに異なるカラムを実行する一連のテストがあります。これをリストにすると、リスト内のどの文字列が特定のユーザーのものであるかを特定するのに苦労するかもしれません。 –

+1

さて、リストを忘れてください。私は答えを更新します。 –

1

ほとんどの時間がユーザーアカウントが作成されるまで待つのに費やす可能性が高いため、タスクごとに別々のスレッドを明示的に開始します。

してください、下のラフ例とコードスニペットを参照してください。

public void createAccounts() throws InterruptedException { 
    List<Thread> threadList = new ArrayList<>(); 
    Object[][] myArray = new Object[1][1]; 
    for(int i=0; i<myArray.length; i++) { 
     final int index = i; 
     //Add thread for user creation 
     threadList.add(new Thread(new Runnable() { 
      @Override 
      public void run() { 
       Webdriver.start(); 
       WebElement.findby.(By.name("field1").sendkeys(myArray[index][2]); 
       Webdriver.end(); 
      } 
     })); 
    } 
    //Start all threads 
    for (Thread thread : threadList) { 
     thread.start(); 
    } 
    //Wait until all threads are finished 
    for (Thread thread : threadList) { 
     thread.join(); 
    } 
} 
関連する問題