Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 指定dependsOnMethods时,testng未按优先级顺序运行_Java_Testing_Automation_Testng - Fatal编程技术网

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

Java 指定dependsOnMethods时,testng未按优先级顺序运行,java,testing,automation,testng,Java,Testing,Automation,Testng,每当我们在@Test注释方法上指定优先级和dependsOnMethods时,测试方法的执行顺序并不取决于优先级。为什么会这样? 下面是演示该问题的测试类: package unitTest.TestNGTestCases; import org.testng.annotations.Test; public class TestNGTest1 { @Test(priority=1) public void t1() { System.out.prin

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

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

我今天遇到了同样的问题

起初,我在测试中只使用了
priority
,但后来我还需要添加
dependsOnMethods

最初,我只在一些
@Test
方法中添加了
dependsOnMethods
。 结果,我的测试的执行顺序混乱了

我已经阅读了很多与此主题相关的文章和讨论,结果证明,使用
优先级
依赖方法
属性togeter会给整个画面带来很多不确定性,在这种情况下,TestNG的行为永远无法预测和定义

我的解决方案是将
dependsOnMethods
添加到我的测试方法的ALL,同时我还保留了
优先级
。 现在,它们的执行顺序恢复正常,同时我受益于
dependsOnMethods
的功能。 i、 e.链中第一个失败的测试方法会导致跳过所有后续测试方法,并在报告中显示正确

下面是我的测试类的片段:

@Test(优先级=2,依赖于方法={“Meganav\u Point\u C1\u和\u Click\u C3”})
公共无效单击类别中的产品结果页面()可丢弃{
网格。点击产品(1,1);
}
@测试(优先级=3,dependsOnMethods={“单击\u类别\u结果\u页面中的\u产品”})
public void PDP_setQty()可丢弃{
ProductDetailsPage.设置数量(2);
}
@测试(优先级=4,dependsOnMethods={“PDP_setQty”},alwaysRun=true)
公共无效PDP\u单击\u将\u添加到\u篮子()可丢弃{
ProductDetailsPage.addToBasket();
}
希望这有帮助

问候,, Veselin Petrov

将首先执行所有独立方法(不具有@dependsOnMethods依赖项)。然后将执行具有依赖关系的方法。若执行顺序中存在歧义,即使在该顺序之后,优先级也会进入画面

这是订购方案:

  • 执行所有独立方法(不带@dependsOnMethods注释的方法)
  • 如果此顺序中存在歧义,请使用优先级来解决独立方法的歧义
  • 按依赖关系的顺序执行依赖方法
  • 如果此排序中存在歧义,请使用优先级解决相关方法的歧义
  • 如果仍然存在歧义(由于未使用优先级或两种方法具有相同的优先级),请根据字母顺序对其排序

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

    您使用的是哪个版本的TestNG?根据,您的问题似乎在2011年8月18日的版本6.2中得到了解决。我使用的是6.8.8版本和testNG eclipse插件6.8.6。你能试一下上面的代码并证明它是按预期工作的吗?不幸的是,我不使用TestNG。我相信你的例子在没有优先级属性的情况下也会以同样的方式工作。顺序不受属性的影响,将基于依赖链进行构建。如果我在一个类中有多个测试,其中一些测试是依赖的,而其他测试则不是,但执行顺序很重要?最好作为一个问题,而不是发布在现有线程上。这是一个很好的总结,也与我看到的一致。您是通过测试@Jerry来解决这个问题的,还是找到了一些涵盖这个问题的Testng文档?可能值得补充的是,如果您不设置优先级,它的优先级将隐含为零。至少我在TestNG版本6.14.3的测试中看到了这一点,我通过测试@GlennLawrence找到了答案
    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