2017-05-30 174 views
1

在我的測試課上,假設我有15個測試用例。 15箇中,我只需要5個測試用例的通用測試數據。因此,我想編寫一個方法,它將創建測試數據,但該方法將在運行這5個測試中的任何一個之前執行。如何在使用TestNG的特定測試用例之前運行特定方法?

我知道@BeforClass - 從類運行並且將之前的任何測試運行@BeforeMethod - 這將在類中的每個測試之前運行。

我不想使用@BeforeClass爲15個測試用例中的15個創建測試數據,因爲如果我想調試不屬於這5個測試用例的測試,它仍然會創建數據,這對於我目前的測試,也會增加執行時間。

有什麼辦法使用TestNG,某些測試被執行之前,我可以運行特定的方法(不使用的testng.xml)

+0

我可能這5次試驗中分離出一個單獨的類。想象一下,可憐的靈魂試圖用15個測試來閱讀你的測試課,並試圖找出哪些設置代碼屬於哪個。 – biziclop

回答

-1

可以在@Test()註釋使用dependsOnMethods

例如

@Test 
public void testDataSetup() 
{ 
    // Setup your testDataHere 
} 


@Test(dependsOnMethods = { "testDataSetup" }) 
public void testExecute1() 
{ 
// Use Your logic here which executes after datasetup 
    } 

如需瞭解完整的教程看到this link

+0

從OP的評論:「如果我想調試一個不屬於這5個測試用例的測試,它仍然會創建數據..」 - 這個解決方案有錯誤的依賴關係。即如果testDataSetup成功(即數據正在被創建),那麼將運行測試用例testExecute1。我不認爲這是OP的後面;因爲如果測試用例被跳過或失敗,他不想創建數據。 –

0

從你的描述我知道你需要一個數據提供程序(這正是,方法提供多個測試案例或可替代多個數據相同的數據在同一測試案例) 。

@DataProvider(name = "dataProviderFor5TestCases") 
public Object[][] createData() { 
return new Object[][] { 
    { "Joe", new Integer(43) }, 
    { "Mary", new Integer(32)}, 
}; 
} 

然後你就可以在你的測試用例聲明dataProvider中這樣:

@Test(dataProvider = "dataProviderFor5TestCases") 
public void testCase1(String name, Integer age) { 
System.out.println(name + " " + age); 
} 

結果將是:

Joe 43 
Mary 32 

所以testCase1將與創建的數據集執行兩次在dataProvider中。但是,我認爲你需要所有5個測試用例(可實現)的相同數據。

現在,關於執行時間。我不是100%確定,但我相信數據是按需創建的(即,如果testCase跳過或失敗,則沒有創建數據;但是我有一個非常小的負載,所以請嘗試並讓我們知道!)

更新OP的評論: 所以,你可能會更好過,使用testGroups然後將適合你的測試和清理後前兩個設置(不被調用不相關的測試用例):

@Test(groups = { "init" }) 
public void serverInit() { 
startServer(); 
} 

@Test(groups = { "init" }) 
public void initEnvironment() { 
createUsers() 
} 

@Test(groups = { "cleanup"}, dependsOnGroups = { "init.*" }) 
public void testCase1() { 
//perform your tests 
} 


@Test(dependsOnGroups = { "cleanup"}) 
puplic void cleanup(){ 
deleteUsers(); 
killServer(); 
} 

以上testCase1 將不會被執行如果有任何init測試方法失敗(即服務器無法啓動)。另外,如果testCase1成功,則只會調用清理方法。如果你想不管testCase1待運行清理方法導致您可以使用alwaysRun像這樣:

@Test(dependsOnGroups = { "cleanup"}, alwaysRun=true) 

希望幫助! 祝你好運!

例從這裏取: TestNG DataProvider

+0

我的意思是不使用Java數據類型構建測試。通過測試數據,我的意思是創建資源 - 說具有姓名的用戶 - 約翰,鮑勃,邁克或配置一些服務器的細節。另外我想重置服務器狀態,然後執行測試。刪除用戶,重新設置服務器配置(我不想用@AfterClass來做這件事,因爲它會等到所有類的測試都運行) – TDHM

+0

你發佈的內容與OP所要求的略有不同。 –

+0

好的TDHM,在您的反饋後更新了這個問題,希望我們能夠在這次得到它! –

相關問題