Всем доброго времени суток!
Нужен совет можно ли реализовать такую идею?
У меня есть тест и 2 DataProvider для него
public class MyTest {
@DataProvider
public Object[] dataProvider1() {
return new Object[]{
new MyObject("test1"),
new MyObject("test2")};
}
@DataProvider
public Object[] dataProvider2() {
return new Object[]{
new MyObject("test3"),
new MyObject("test4")};
}
@Test(dataProvider = "dataProvider1")
public void myTestMethod(final MyObject my) {
my.doAction();
}
}
Хочу создать 2 testNG.xml. Один должен запускать тест с первым провайдером, а второй - со вторым. Но не найду как это сделать. Кто подскажет как выкрутится и возможно ли это?
Чисто технически такое можно реализовать через IAnnotationTransformer, подсунув кастомное имя DP. Но это будет весьма костыльным и в корне неверным решением для вашей задачи.
Тут вопрос в другом: имеет ли смысл разбивать DP на 2 для одного и того же теста? Как насчет параметризации источника данных?
Таким образом я пытаюсь организовать два Test Suite: первый для Смоук (который запустит тест для 2-х объектов и будет запускаться после каждого пуша в репозитарий), а второй для Регрешена (который запустить тест для 15-ти объектов и будет запускать раз в день)
А можно Вас попросить немного растолковать, что Вы тут имеете ввиду?
Буду очень благодарен.
Вместо того, чтобы хранить данные в коде и разбивать их на отдельные провайдеры, порой имеет смысл прибегнуть к внешним источникам хранения данных. Это может быть все, что угодно: файлы, база и т.п. Если одному и тому же тесту нужны разные данные, при условии наличия идентичных шагов, можно посредством, к примеру, аннотации намекать, к какому именно источнику нужно сейчас обращаться. Здесь же можно и указывать, в какую сущность нужно прочитать результат.
О технике создания generic DP я рассказывал на SC 16:
Исходники можно найти тут:
В качестве альтернативы, как уже намекнули выше, можно задавать некие ключи, которые будут служить идентификаторами для данных, которые вам нужно предоставить тесту в нужный момент времени. Это могут быть не только xml параметры, а и переменные окружения, system properties, и т.п. Но такой подход может быть не очень гибким, если кол-во потенциальных ветвлений данных будет расти.
П.С. Ну и заодно можете взглянуть на расширенную версию DP, которая умеет гибко работать с практически любыми типами данных. А то больно смотреть уже на эти массивы с итераторами.
ИМХО хранение в json данных обычно вполне достаточно
через датапровайдер читаем из ресурсов нужные файлы
парсим ключи-значения (автовелью, ломбок, или котлин дата классы)