testng not running in priority order when dependsOnMethods is specified

后端 未结 3 1110
旧巷少年郎
旧巷少年郎 2021-01-12 11:31

Whenever we specify priority and dependsOnMethods on a @Test annotated method, the order of execution of test methods is not according

相关标签:
3条回答
  • 2021-01-12 11:44

    All independent methods (that do not have @dependsOnMethods dependency) will be executed first. Then methods with dependency will be executed. If there is ambiguity in execution order even after this ordering, priority comes into picture.

    This is the ordering scheme:

    1. Execute all independent methods (methods without @dependsOnMethods annotation)
    2. If there is ambiguity in this ordering use priority to resolve ambiguity for independent methods
    3. Execute dependent methods in order of dependency
    4. If there is ambiguity in this ordering use priority to resolve ambiguity for dependent methods
    5. If there is still ambiguity (due to not using priority or two methods having same priority) order them based on alphabetical order.

    Now all ambiguity is resolved since no two methods can have the same name.

    0 讨论(0)
  • 2021-01-12 11:55
    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
    
    0 讨论(0)
  • 2021-01-12 11:59

    I've encountered the same problem today.

    At first, I was using only priority for my tests, but then I needed to add dependsOnMethods as well.

    Initially i've added the dependsOnMethods only to some of my @Test methods. As a result the execution order of my tests has scrambled.

    I've read a lot of articles and discussions related to this topic and it turned out, that the using of priority and dependsOnMethods attributes togeter brings a lot of uncertainty into the whole picture and the behaviour of TestNG will never be predictable and well defined in this situation.

    My solution was to add the dependsOnMethods to ALL of my test methods, while I kept the priority also for ALL of the mehtods. Now their execution order is back to normal and at the same time I benefit from the capabilities of the dependsOnMethods. i.e. The first failing test method in the chain, causes all subsequent test methods to be skipped and show correct in the reports.

    Here is fragment from my tests class:

       @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();
    
        }
    

    Hope this helps.

    Regards, Veselin Petrov

    0 讨论(0)
提交回复
热议问题