我正在寫一個測試套件用TestNG和硒webdriver的web應用程序。TestNG的運行所有類方法多次初步做@BeforeClass與提供的數據
我需要的是運行不同的身份驗證的用戶測試類多次的所有方法(在運行時數據被拉出:從DB)。所以我需要一個數據傳遞到與數據提供者類,所有用戶的用品憑證,然後爲每個用戶i需要創建一個網絡驅動器(用於實驗的純度),並在@BeforeClass
方法與提供的憑證認證,運行所有@Test
類的方法,並使@AfterClass
拆除關閉網絡驅動程序。
我該怎麼做?
我試圖做到這一點的位置: https://gist.github.com/4246674
Attempt1是放在類@Test(dataProvider="getUsersIdAndName")
。 它不起作用,因爲事實證明該類上的@Test(dataProvider=)
並不意味着應該使用提供的數據調用該類的所有方法。 結果是該方法根本沒有被調用,因爲沒有數據要傳遞給它的參數。我得到奇怪的測試報告,這個方法被標記爲0秒的執行時間。 (這是一個Maven項目在NetBeans打開,如果這是有道理的。)
的類並@Test(dataProvider=)
表示了什麼呢?
ATTEMPT2是添加的dataProvider上@Test
註釋的方法的。 它不起作用,因爲這意味着在單班運行期間兩次調用測試方法。 結果是第二次失敗,因爲它試圖在Web驅動程序未重新初始化時重複測試:瀏覽器已經呈現另一個頁面。
此外,第一次和第二次嘗試登錄的缺點是在測試方法中完成,而不是在@BeforeClass
方法中完成,因爲我不知道如何從數據提供者提供數據。
嘗試3是一個拼命試圖結合@BeforeClass
和@Test
單一的方法。 它不起作用,因爲@BeforeClass
還要求@Parameters
如果一個註解的方法有一個參數列表。 結果是這個方法被調用三次:第一次當它由於上述原因而失敗時作爲類設置,第二次因爲數據提供者成功時失敗了兩次。
然後我發現TestNG的不提供一種方法來多次調用所有類方法不同的數據: http://comments.gmane.org/gmane.comp.java.testng.user/864
我有如何歸檔同等效力的其他兩個想法。
Idea4將在每個測試方法上放置一個@Test(dataProvider=)
,每種方法將自行執行驗證和測試,然後執行自己的測試。 無效而醜陋。
Idea5看起來像最好實惠之一是與將聚集所有其他的測試方法一@Test
只有一個方法來標記:其從數據提供者接收的數據,由給定用戶進行認證,然後運行isAuthenticated測試和所有其他必要試驗。在這種情況下,@BeforeClass
和@AfterClass
只能設置和拆除網絡驅動程序。這種方法的缺點是我失去了使用@BeforeMethod
和@AfterMethod
的能力,但這對我來說是負擔得起的:看起來我不需要它們。
有沒有更好的方法來存檔相同的效果?
對不起,對於很長的留言。
在此先感謝。
謝謝。管理做我想要的。在構造函數中放置一個'@ Factory'註釋並使其從數據提供者接收數據。測試類的每個實例現在代表一個正在執行一系列測試的用戶登錄的Web驅動程序。構造函數加載屬性並在類字段中存儲指定的用戶憑證。 '@ BeforeClass'方法實例化Web驅動程序並使用存儲的憑證登錄。 '@ AfterClass'關閉網頁驅動程序。如果任何人有興趣,完整的代碼在這裏。 – yaromir