2014-11-24 79 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