2014-06-26 40 views
3

每當我們在@Test帶註釋的方法上指定prioritydependsOnMethods時,測試方法的執行順序並不依據優先級。爲什麼如此? 下面是測試類來說明這個問題:當指定了dependsOnMethods時,testng未按優先級順序運行

package unitTest.TestNGTestCases; 

import org.testng.annotations.Test; 

public class TestNGTest1 { 
    @Test(priority=1) 
    public void t1() 
    { 
     System.out.println("Running 1"); 
    } 
    @Test(priority=2,dependsOnMethods="t1") 
    public void t2() 
    { 
     System.out.println("Running 2"); 
    } 
    @Test(priority=3,dependsOnMethods="t2") 
    public void t3() 
    { 
     System.out.println("Running 3"); 
    } 
    @Test(priority=4) 
    public void t4() 
    { 
     System.out.println("Running 4"); 
    } 
} 

實際輸出:

Running 1 
Running 4 
Running 2 
Running 3 

=============================================== 
All Tests Suite 
Total tests run: 4, Failures: 0, Skips: 0 
=============================================== 

預期輸出:

Running 1 
Running 2 
Running 3 
Running 4 

=============================================== 
All Tests Suite 
Total tests run: 4, Failures: 0, Skips: 0 
=============================================== 

測試執行的順序應該是T1,T2, t3,t4。爲什麼t4在t1之後執行,當t2和t3優先於t4?

TIA

+0

您正在使用哪個版本的TestNG?根據[更改列表](https://github.com/cbeust/testng/blob/master/CHANGES.txt),您的問題似乎在2011年8月18日修復了6.2版。 – Seelenvirtuose

+0

我正在使用6.8.8版本和testNG eclipse插件6.8.6。你可以嘗試上面的代碼,並證明它是按預期工作嗎? –

+0

不幸的是,我不使用TestNG。 – Seelenvirtuose

回答

1

今天我遇到了同樣的問題。

起初,我只用priority進行測試,但是我還需要添加dependsOnMethods

最初我已將dependsOnMethods僅添加到我的一些@Test方法中。 因此,我的測試的執行順序已經混亂。

我已經讀了很多有關這個話題的文章和討論,事實證明,這的prioritydependsOnMethods的使用屬性togeter帶來了很多不確定性,爲整個畫面和TestNG的行爲將永遠在這種情況下可以預測並明確定義。

我的解決辦法是添加dependsOnMethodsALL我的測試方法,而我不停的priority也爲ALL的mehtods的。 現在他們的執行順序恢復正常,同時我受益於dependsOnMethods的功能。 即鏈中第一個失敗的測試方法會導致所有後續測試方法被跳過並在報告中顯示正確。

這裏是我的測試類片段:

@Test(priority = 2, dependsOnMethods= {"Meganav_Point_C1_and_Click_C3"}) 
    public void Click_product_in_Category_result_page() throws Throwable { 

     Grid.clickProduct(1, 1); 

    } 


    @Test(priority = 3, dependsOnMethods= {"Click_product_in_Category_result_page"}) 
    public void PDP_setQty() throws Throwable { 

     ProductDetailsPage.setQty(2); 

    } 


    @Test(priority = 4, dependsOnMethods= {"PDP_setQty"}, alwaysRun= true) 
    public void PDP_click_Add_To_Basket() throws Throwable { 

     ProductDetailsPage.addToBasket(); 

    } 

希望這有助於。

問候, 韋塞林·彼得羅夫

+0

我相信你的例子將以相同的方式工作,沒有優先級屬性。該訂單不受該屬性的影響,並且將基於依賴鏈構建。 – user1058106

+0

如果我在課堂上進行了多項測試,其中一些測試依賴於其他測試,而其他測試則不依賴測試,但執行順序很重要? –

2

所有獨立的方法(沒有@dependsOnMethods依賴)將首先執行。然後將執行具有依賴性的方法。即使在訂購之後,如果執行順序不明確,優先順序也會出現。

這是排序方案:

  1. 執行所有獨立的方法(方法不@dependsOnMethods註釋)
  2. 如果有歧義這個順序使用優先級來解決模糊度獨立的方法
  3. 執行依賴依賴關係的方法
  4. 如果在此排序中存在歧義,則使用優先級來解決依賴方法的歧義性
  5. 如果存在仍然不明確(由於沒有使用優先權或具有相同優先權的兩種方法),因此按字母順序排列。

現在所有的歧義都解決了,因爲沒有兩種方法可以具有相同的名稱。