2011-12-06 1 views
1

私が行う必要があるのは、アプリケーション用のUIテストケースを作成することです。我々は、TestNGでSeleniumを使用することに決めました(大きな利点がある場合は、他のオプションにも対応しています)。TestNGを使用してマルチユーザーテストシナリオを作成するにはどうすればよいですか?

私たちが作成しようとしているテストは、という複数のユーザーがアプリケーションを使って相互にやりとりするテストです。基本的には、複数のユーザーがアプリケーションに並行してログインし、さまざまな操作を実行する必要があります。ユーザーの行動の間には関係があり、そのため、ユーザーはある時点(たとえば、ユーザーが別のユーザーが自分の行動を実行する前に行動を実行するのを待つ必要があるなど)での相互作用を同期させる必要があります。つまり、ユーザー間で何らかの情報を共有する必要があります(同期ポイントを管理するオブジェクトを共有することを考えていただけです)。

TestNGを使用して並行して実行される異なるユーザーの操作を記述する必要があるシナリオをどのように構成する必要がありますか?

このための優れたフレームワークはありますか、この問題に対処するパターンはありますか?どんな提案も歓迎です!ありがとうございました。

EDIT:
私ができる最善のことは、これまで各@Test方法は、各ユーザのアクションを持ってテストを作成し、私は試験方法が並行して実行する必要があることを定義するスイートを作成することです。例:

public class MultiUserTest { 
    @Test 
    public void user1Interaction() { 
     User user1 = new User(); 
     // user1 performs actions 
    } 

    @Test 
    public void user2Interaction() { 
     User user2 = new User(); 
     // user2 performs actions 
    } 
} 

その後、私はMultiUserTestの方法を並行して実行するように指定テストスイートを作成します。

しかし、私は本当にこの解決策が嫌いです。私は、私のテストの正しい動作を記述するためにXML設定(テストスイート)に頼っているという事実は気に入らない(Javaコードを見るだけでは分かりません)。また、 "Run As - TestNG Test"を実行してeclipseでTestNGプラグインを使用してテストを実行することができないことも嫌いです。繰り返しますが、提案は大歓迎です。ありがとうございました!

答えて

0

あなたが好きなテストフレームワークを使用できると思います。

1つのテストメソッドでユーザーアクションを非同期で実行して、ある時点でそれらを同期させなければならないということです。

java.util.concurrentパッケージからExecutorServiceフレームワークを使用することをお勧めします。

は、すべてのだから、最初のあなたは非同期getメソッドを使用して、アクションsubmit方法を使用してタスクを実行し、同期させるために、エグゼキュータに

ExecutorService executorService = Executors.newFixedThreadPool(2); 

次利用のexecutorを作成する必要があります。

@Test 
public void test() throws Exception { 

    final User firstUser = new User(); 

    Future<?> firstUserAction = executorService.submit(new Runnable() { 
     @Override 
     public void run() { 
      firstUser.doSomething(); 
      firstUser.doSomethingElse(); 
     } 
    }); 

    final User secondUser = new User(); 
    Future<?> secondUserAction = executorService.submit(new Runnable() { 
     @Override 
     public void run() { 
      secondUser.doSomething(); 
     } 
    }); 


    // synchronization 
    firstUserAction.get(); 
    secondUserAction.get(); 
    // synchronized now 

    secondUserAction = executorService.submit(new Runnable() { 
     @Override 
     public void run() { 
      secondUser.doSomethingElse(); 
     } 
    }); 




} 
+0

下記を参照のコード例は、しかし、私は私は私がより簡単に、きれいな方法でこれらのテストを書くに役立つだろういくつかのTestNGの機能を利用できるソリューションを探していました、ご提案いただきありがとうございます。 –

関連する問題