testng не се изпълнява в приоритетен ред, когато е посоченоdependentOnMethods

Всеки път, когато посочим 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


person Mrunal Gosar    schedule 26.06.2014    source източник
comment
Коя версия на TestNG използвате? Според списъка с промени вашият проблем изглежда е коригиран с версия 6.2 на 18.08.2011 г.   -  person Seelenvirtuose    schedule 26.06.2014
comment
използвам версия 6.8.8 и плъгин testNG eclipse 6.8.6. можете ли да опитате горния код и да ми докажете, че работи според очакванията?   -  person Mrunal Gosar    schedule 26.06.2014
comment
За съжаление не използвам TestNG.   -  person Seelenvirtuose    schedule 26.06.2014


Отговори (3)


Всички независими методи (които нямат зависимост @dependsOnMethods) ще бъдат изпълнени първи. След това ще бъдат изпълнени методи със зависимост. Ако има неяснота в реда на изпълнение дори след това подреждане, се появява приоритет.

Това е схемата за поръчка:

  1. Изпълнение на всички независими методи (методи без анотация @dependsOnMethods)
  2. Ако има неяснота в това подреждане, използвайте приоритет, за да разрешите неяснотата за независими методи
  3. Изпълнете зависимите методи в реда на зависимостта
  4. Ако има неяснота в това подреждане, използвайте приоритет, за да разрешите неяснотата за зависимите методи
  5. Ако все още има неяснота (поради неизползване на приоритет или поради два метода с еднакъв приоритет), подредете ги по азбучен ред.

Сега всички неясноти са разрешени, тъй като два метода не могат да имат едно и също име.

person Jerry    schedule 27.09.2016
comment
Това е отлично резюме и е в съответствие с това, което виждам. Открихте ли това чрез тестване на @Jerry или намерихте някаква документация на Testng, която покрива това? - person Glenn Lawrence; 06.04.2021
comment
Може да си струва да добавите, че ако не зададете приоритет, той имплицитно ще има приоритет нула. Поне това виждам при моето тестване на TestNG версия 6.14.3 - person Glenn Lawrence; 06.04.2021
comment
Разбрах го, като тествах @GlennLawrence - person Jerry; 11.04.2021

Днес се сблъсках със същия проблем.

Първоначално използвах само priority за моите тестове, но след това трябваше да добавя и dependsOnMethods.

Първоначално добавих dependsOnMethods само към някои от моите @Test методи. В резултат редът на изпълнение на моите тестове е разбъркан.

Прочетох много статии и дискусии, свързани с тази тема, и се оказа, че използването на атрибути priority и dependsOnMethods заедно внася много несигурност в цялата картина и поведението на TestNG ще никога не бъдете предвидими и добре дефинирани в тази ситуация.

Моето решение беше да добавя dependsOnMethods към ВСИЧКИ мои методи за тестване, докато запазих 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();

    }

Надявам се това да помогне.

Поздрави Веселин Петров

person vtpetrov    schedule 13.10.2014
comment
Вярвам, че вашият пример ще работи по същия начин без приоритетен атрибут. Редът не се влияе от атрибута и ще бъде изграден въз основа на верига на зависимости. - person user1058106; 14.10.2014
comment
Ами ако имах няколко теста в клас и някои от тях са зависими, докато други не, но редът на изпълнение е важен? - person Mrunal Gosar; 28.09.2016

person    schedule
comment
по-добре като въпрос, вместо да публикувате в съществуваща тема - person Renjith; 03.03.2020