Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

TestNG xml последовательность методов


(Inessa) #1

:blush: Если кто-нибудь может подсказать буду признательна.

Проблема: Когда я run using xml
последовательность методов
test1
test3
test2
test 4

Исходные данные:
Test1 class (test1 method, test2 method)
Test2 class (test3 method, test4 method)

Нужный результат:
последовательность методов
test1
test2
test3
test4

public class Test1 {

@Test
public void test1(){

	System.out.println("test1");
}

@Test (dependsOnMethods="test1")
public void test2(){

	System.out.println("test2");
}
@AfterClass
public void cleanUp(){

	//close driver
}

}

    public class Test2  {


@Test
public void test3(){

	System.out.println("test3");
}
@Test (dependsOnMethods="test3")
public void test4(){

	System.out.println("test4");
}
@AfterClass
public void cleanUp(){

}

}

<?xml version="1.0" encoding="UTF-8"?>
   <test name="FirefoxTest" preserve-order="true">
          <classes>    
           <class name= "pageobject_test.Test1"/>
           <class name= "pageobject_test.Test2"/>
               
          </classes>
    <packages>
                          			
	</packages>
   </test>

(Александр Таранков) #2

А что собственно тебя не устраивает? Чем плох порядок выполнения 1, 3, 2, 4? Ведь указанные зависимости выполнены.
Гораздо правильнее искать ответ на вопрос"как избавиться от зависимостей в тестах" :smile:


(Sergey Korol) #3

Думаю, что все же следует начать с чтения FAQ - секции форматирования кода. :wink:


(Sergey Ivanskoy) #4

Здравствуйте. Вы пытаетесь построить зависимости на методах из разных классов, что в принципе не верно и, соответственно, фреймоврк не даст вам этого сделать. Если вы все же хотите построить такую зависимость, то вам нужно смотреть в сторону группировки тестов, т.е. нужно бы заглянуть в документацию по TestNG п. 5.7.1 - http://testng.org/doc/documentation-main.html#dependencies-with-annotations и п. 5.7.2 - http://testng.org/doc/documentation-main.html#dependencies-in-xml.
В п. 5.7.1 есть ссылка на статью (http://beust.com/weblog/2004/08/19/dependent-test-methods/), в которой описвается структура тестов подобная вашей вот в таком ключе:

@Test(groups = "init") 
public class BaseTest { 
    public correctVM() {} 
    public serverStartedOk() {} 
} 


@Test(dependsOnGroups = { "init.*" }) 
public class TestServer extends BaseTest { 
    public method1() { ... } 
    public method2() { ... } 
  ... 
} 

Насколько такой подход себя оправдывает судить сложно. А вообще, согласен с предпоследним оратором и вы прислушайтесь

Гораздо правильнее искать ответ на вопрос"как избавиться от зависимостей в тестах"


(Sergey Korol) #5

Уточнение к автору: суть проблемы заключалась в межклассовой приоритезации для формирования regression suite с кастомным execution order без привязки к группам, аля спуск от top к low priority tests?

Применительно к вашему случаю, по всей видимости причина такого поведения кроется в alphabetical execution order. Имена методов то не настоящие в приведенном примере, так?

В общем, если используете слушателя, то можно переопределить:

public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {}

Внутри вы можете задать кастомный comparator, при помощи которого можно будет отсортировать пришедший из xml список методов, как вам того захочется. К слову, там же вы сможете и отследить, в какой последовательности приходят методы в оригинале.