Итак, мне нужно проверить несколько CSV (более 500 КБ), и их количество никогда не бывает одинаковым. Каждый файл CSV состоит из одной или нескольких строк и 30 строк. Мне нужно взять каждый файл и проверить поля с данными из API.
Решение, о котором я думаю сейчас:
Один DataProvider, который может предоставить итератору объектов все файлы, которые я Нужно проверить. Для каждого файла я проведу несколько тестов (10-15). Все они работают параллельно с несколькими потоками. И чтобы не выполнять запрос API для каждого теста, мне нужно сделать запрос @ BeforeSuite.
Я не нашел способа выполнять тесты параллельно с этим типом DataProvider. Тесты запускают сначала test1 для всего набора данных, затем test2 для всего набора данных, поэтому вызов API @BeforeSuite не имеет значения. Есть идеи?
Это пример кода:
Фабрика данных:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class DataFactory {
@Factory(dataProvider = "dp")
public Object[] createInstances(String filename) {
return new Object[]{new TestSuite(filename)};
}
private static final String CSV_PATH = "src/main/resources/files/";
@DataProvider(name = "dp")
public Iterator<Object[]> getFileList() {
File[] files = new File(CSV_PATH).listFiles();
List<Object[]> data = new ArrayList<>();
for (File file : files) {
data.add(new String[]{file.getName()});
}
return data.iterator();
}
}
Класс тестов:
import java.lang.reflect.Method;
import org.testng.annotations.Test;
public class TestSuite {
String filename1 = "";
public TestSuite(String filename) {
filename1 = filename;
}
@Test
public void test1(Method res) {
System.out.println("…Executing…" + res.getName() + " dataProviderData " + filename1 + " thread number " + Thread.currentThread().getId());
}
@Test
public void test2(Method res) {
System.out.println("…Executing…" + res.getName() + " dataProviderData " + filename1 + " thread number " + Thread.currentThread().getId());
}
TestNG XML config :
<suite name="Tests Suite" thread-count="20" parallel="methods">
<test name="CSV test">
<classes>
<class name="DataFactory" group-by-instances="true"/>
</classes>
</test>
</suite>