Как распараллелить тесты которые генерятся через TestNG Factory

testng
Теги: #<Tag:0x00007fedb9c44f88>

(Ярослав Орёл) #1

Всем привет.

Ситуация состоит в следующем: есть набор тестовых методов в класс, данные для которых поставляются через фактори. Мы хотим чтобы инстансы этих классов выполнялись параллельно, но TestNG выполняет их последовательно.
Вот пример кода:

package test;

import org.apache.log4j.Logger;
import org.testng.annotations.*;
import org.testng.annotations.Test;

public class TestTest
{
private String param;

@Factory( dataProvider = "prov" )
public TestTest( String param )
{
    this.param = param;
}

@DataProvider( name = "prov" )
public static Object[][] dataProvider()
{
    System.out.println( "[" + Thread.currentThread().getId() +  "] Provide data" );
    return new Object[][] {
            { "One" },
            { "Two" },
            { "Three" },
    };
}

@BeforeClass
public void prepare()
{
    System.out.println( "[" + Thread.currentThread().getId() +  "] Prepare " + param );
}

@Test
public void test1()
{
    System.out.println( "[" + Thread.currentThread().getId() +  "] Test1 " + param );
}

@Test( dependsOnMethods = "test1" )
public void test2()
{
    System.out.println( "[" + Thread.currentThread().getId() +  "] Test2 " + param );
    sleep();
}

@AfterClass
public void clean()
{
    System.out.println( "[" + Thread.currentThread().getId() +  "] Clean " + param );
}

private void sleep() {
    try {
        Thread.sleep(10000);
    } catch (Exception ignored) {}
}

}

и testng.xml

Когда group-by-instances=“true”, тесты запускаются последовательно, а когда group-by-instances=“false”, тесты запускаются в разных потоках, но выполняются как будто это один поток т.е. потоки ждут друг друга.


(Farof Well) #2

А как вы узнали что они ждут друг друга? может просто задержка великовата в слипе, потому так и кажется?
посмотрел -3 теста выполнились за 10 секунд, если бы они не параллельны были (и ждали друг друга или выполнялись последовательно) то время было бы побольше


(Sergey Korol) #3

GitHub issues проверяли? Ваша проблема висит с 2013 года. :wink:


#4
parallel="instances": TestNG will run all the methods in the same instance in the same thread, but two methods on two different instances will be running in different threads.

Пруф

Попробуйте все же

parallel="methods": TestNG will run all your test methods in separate threads. Dependent methods will also run in separate threads but they will respect the order that you specified.