2011-12-06 46 views
1

我需要做的是爲我們的應用程序創建UI測試用例,並且我們決定使用Selenium和TestNG(如果有相當多的優點,我們仍然對其他選項開放)。如何使用TestNG創建多用戶測試場景?

我們試圖創建的測試是測試,其中多個用戶使用應用程序相互交互。基本上我們需要有多個用戶並行登錄到我們的應用程序並執行不同的操作。用戶的行爲之間存在關聯,所以他們需要在某些點上同步他們的交互(例如,用戶需要等待不同的用戶執行某個動作之後才能執行他的動作)。這意味着用戶之間還需要有某種共享信息(我只是在考慮共享一個可以處理同步點的對象)。

我該如何構建我需要描述將使用TestNG並行運行的不同用戶的操作的場景?

有沒有更好的框架或有沒有解決這個問題的模式?任何suggestios都歡迎!謝謝。

編輯:
我可以迄今的事情,最好是創建一個測試,其中每個@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代碼,這不會很明顯)。我也不喜歡這樣一個事實,即我無法通過在Eclipse上使用TestNG插件通過「Run As - TestNG Test」運行測試。再次,任何建議是非常受歡迎的。謝謝!

回答

0

我認爲你可以使用任何你喜歡的測試框架。

問題是,您必須在一個測試方法中異步執行用戶操作,並在某個時刻同步它們。

我推薦你的方法是使用包裝的ExecutorService框架。

所以首先你必須創建執行人

ExecutorService executorService = Executors.newFixedThreadPool(2); 

下一頁使用執行人使用get方法異步運行使用submit方法的任務和同步操作。

見代碼示例如下

@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的功能,這將幫助我在一個更簡單和更清潔的方式編寫這些測試。 –