testng не запускается в порядке приоритета, когда указан dependOnMethods

Всякий раз, когда мы указываем 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?

ТИА


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