指定dependsOnMethods时,testng未按优先级顺序运行

时间:2014-06-26 05:37:02

标签: java testing automation testng

每当我们在priority带注释的方法上指定dependsOnMethods@Test时,测试方法的执行顺序不符合优先级。为什么会这样? 以下是演示该问题的测试类:

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

3 个答案:

答案 0 :(得分:4)

首先执行所有独立方法(没有@dependsOnMethods依赖关系)。然后将执行具有依赖性的方法。如果执行顺序中存在歧义,即使在此顺序之后,优先级也会出现。

这是订购方案:

  1. 执行所有独立方法(没有@dependsOnMethods注释的方法)
  2. 如果此排序存在歧义,请使用优先级来解决独立方法的歧义
  3. 按依赖顺序执行依赖方法
  4. 如果此排序存在歧义,请使用优先级来解决依赖方法的歧义
  5. 如果仍然存在歧义(由于未使用优先级或两种方法具有相同的优先级),请根据字母顺序对其进行排序。
  6. 现在所有歧义都已解决,因为没有两种方法可以具有相同的名称。

答案 1 :(得分:1)

我今天遇到了同样的问题。

首先,我仅使用priority进行测试,但之后我还需要添加dependsOnMethods

最初我已将dependsOnMethods仅添加到我的某些@Test方法中。 结果,我的测试的执行顺序已经混乱。

我已经阅读了很多与此主题相关的文章和讨论,结果表明,使用prioritydependsOnMethods属性 togeter 带来了很多整体情况的不确定性以及TestNG的行为在这种情况下永远无法预测和明确定义。

我的解决方案是将dependsOnMethods添加到我的测试方法的 ALL ,同时我还为 ALL保留了priority 的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();

    }

希望这有帮助。

此致 Veselin Petrov

答案 2 :(得分:-1)

Can someone help me to understand the below sequence of execution?
public class Testpract {

    @Test
    public void setup()
    {
        System.out.println("Setup");
    }
    @Test(priority=1)
    public void gotopage()
    {
        System.out.println("gottopage");
    }
    @Test(priority=2, dependsOnMethods="gotopage")
    public void verifytitle()
    {
        System.out.println("verifytitle");
    }
    @Test(dependsOnMethods="login")
    public void verifyimage()
    {
        System.out.println("verifyimage");
    }

    @Test(dependsOnMethods="verifyhomepage", priority =10)
    public void login()
    {
        System.out.println("login");
    }
    @Test(priority=7)
    public void verifyhomepage()
    {
        System.out.println("verifyhomepage");
    }

output is 
Setup
gottopage
verifyhomepage
PASSED: setup
PASSED: gotopage
PASSED: verifyhomepage


@Test
    public void setup()
    {
        System.out.println("Setup");
    }
    @Test(priority=1)
    public void gotopage()
    {
        System.out.println("gottopage");
    }
    @Test(priority=2, dependsOnMethods="gotopage")
    public void verifytitle()
    {
        System.out.println("verifytitle");
    }
    @Test(dependsOnMethods="login", priority =3)
    public void verifyimage()
    {
        System.out.println("verifyimage");
    }

    @Test(dependsOnMethods="verifyhomepage", priority =10)
    public void login()
    {
        System.out.println("login");
    }
    @Test(priority=7)
    public void verifyhomepage()
    {
        System.out.println("verifyhomepage");
    }

output is
Setup
gottopage
verifytitle
verifyhomepage
login
verifyimage
PASSED: setup
PASSED: gotopage
PASSED: verifytitle
PASSED: verifyhomepage
PASSED: login
PASSED: verifyimage