2014-11-24 161 views
2

我在這裏看到類似的問題,但似乎沒有解決問題。 我有下面的代碼;TestNg使用dependsOnMethods和優先級違反優先

@Test(priority=2) 
    public void increaseQty(){ 
     System.out.println("in increase qty");} 

    @Test(priority=2,dependsOnMethods={"increaseQty"}) 
     public void decreaseQty(){ 
     System.out.println("in decrease qty");} 

    @Test(priority=3) 
    public void removeFromCart() throws Exception{ 
      System.out.println("remove qty");} 

    @Test(priority=3,dependsOnMethods={"removeFromCart"}) 
     public void emptyCart() throws InterruptedException{ 
      System.out.println("empty Cart");} 

預期的運行順序是

increaseQty 
decreaseQty 
removeFromCart 
emptyCart 

但實際序列

increaseQty 
removeFromcart 
decreaseQty 
emptyCart 

我無法理解爲什麼它不按指定順序。 在我看來,似乎它首先運行的獨立方法,然後是依賴性,而不考慮優先級,但在文檔的任何地方都沒有提到這種行爲。我應該怎麼做才能使它按照所需的順序運行

回答

4

不要提供優先級並且依賴於一起,您可以對測試進行分組。 你可以不喜歡它:

@Test(priority = 1, groups = { "qty" }) 
    public void increaseQty() { 
    System.out.println("in increase qty"); 
    } 

    @Test(dependsOnMethods = { "increaseQty" }, groups = { "qty" }) 
    public void decreaseQty() { 
    System.out.println("in decrease qty"); 
    } 

    @Test(dependsOnGroups = { "qty" }) 
    public void removeFromCart() throws Exception { 
    System.out.println("remove qty"); 
    } 

    @Test(dependsOnMethods = { "removeFromCart" }) 
    public void emptyCart() throws InterruptedException { 
    System.out.println("empty Cart"); 
    } 

編輯: 另一個解決辦法是改變你的TestNG的XML有應將描述,如:

<methods> <include name="increaseQty"/> <include name="decreaseQty"/> <include name="removeFromCart"/> <include name="emptyCart"/> </methods>

所以TestNG的會以這種方式執行它只要。

+0

我發現這個答案正確kindly標記它其他的任何差異讓我們知道...謝謝 – 2014-11-24 13:27:02

+0

你的答案解決了這個問題,但根據我的理解,在您的測試中添加不需要的依賴關係不是一個最佳做法。如果組中有任何方法失敗,那麼其餘的將被跳過,我不想要 – 2014-11-25 06:09:45

+0

另一種方式,你可以實現它是通過在你的testng.xml文件中添加方法名,以便你希望它們執行..就像我在回答中編輯的方式,或者你可以按照T1_increaseQty,T2_decreaseQty等順序命名你的測試。據我注意到,TestNg在按字母順序命名測試的基礎上執行。 – 2014-11-25 06:49:26