【问题标题】:testng not running in priority order when dependsOnMethods is specified指定dependsOnMethods时testng未按优先级顺序运行
【发布时间】:2014-06-26 05:37:01
【问题描述】:

每当我们在@Test注解的方法上指定prioritydependsOnMethods时,测试方法的执行顺序并不是按照优先级来的。为什么会这样? 这是演示问题的测试类:

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

【问题讨论】:

  • 您使用的是哪个版本的 TestNG?根据the changes list,您的问题似乎已在 2011 年 8 月 18 日的 6.2 版中得到解决。
  • 我使用的是 6.8.8 版本和 testNG eclipse 插件 6.8.6。你能试试上面的代码并证明它按预期工作吗?
  • 很遗憾,我不使用 TestNG。

标签: java testing automation testng


【解决方案1】:

所有独立的方法(没有@dependsOnMethods 依赖)将首先被执行。然后将执行具有依赖关系的方法。如果即使在这个排序之后执行顺序也有歧义,优先级就出现了。

这是订购方案:

  1. 执行所有独立的方法(没有@dependsOnMethods注解的方法)
  2. 如果此排序存在歧义,请使用优先级来解决独立方法的歧义
  3. 按依赖顺序执行依赖方法
  4. 如果此排序存在歧义,请使用优先级来解决相关方法的歧义
  5. 如果仍有歧义(由于未使用优先级或两个具有相同优先级的方法),请按字母顺序对其进行排序。

现在所有歧义都解决了,因为没有两个方法可以具有相同的名称。

【讨论】:

  • 这是一个很好的总结,也与我所看到的一致。您是通过测试 @Jerry 解决了这个问题,还是找到了一些涵盖此内容的 Testng 文档?
  • 可能值得补充的是,如果您不设置优先级,它将隐含的优先级为零。至少这是我在 TestNG 6.14.3 版的测试中看到的
  • 我通过测试@GlennLawrence 弄清楚了
【解决方案2】:

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

起初,我只使用priority 进行测试,但后来我还需要添加dependsOnMethods

最初我只将dependsOnMethods 添加到我的一些@Test 方法中。 结果我的测试的执行顺序被打乱了。

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

我的解决方案是将dependsOnMethods添加到我的测试方法的ALL中,同时我也为ALL保留priority的方法。 现在他们的执行顺序恢复正常,同时我也受益于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();

    }

希望这会有所帮助。

问候, 韦塞林·彼得罗夫

【讨论】:

  • 我相信你的例子在没有优先级属性的情况下也会以同样的方式工作。顺序不受属性影响,会基于依赖链构建。
  • 如果我在一个类中有多个测试,其中一些是依赖的,而另一些不是,但执行顺序很重要怎么办?
【解决方案3】:
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

【讨论】:

  • 最好作为问题而不是在现有线程上发帖
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
相关资源
最近更新 更多