DanPerman
(Dan Perman)
30.Октябрь.2017 14:25:29
#1
Добрый день.
Есть вопрос. Подскажите пожалуйста как я могу запустить 2 теста параллельно но для логина в апликацию использовать 2 разных юзера? Например User1 и User2. Оба теста идентичны, разница только в юзерах.
Использую TestNG и Data Provider. Когда запускаю параллельно , оба браузера берут первую строчку данных из DataProvider.scv
Спасибо.
BabyRoot
(Vasily)
30.Октябрь.2017 14:39:37
#2
Вам надо свой датапровайдер переделать в вид
@DataProvider(name = "test1")
public Iterator<Object[]> createData() {
return new MyIterator(DATA);
}
Взято отсюда TestNG
начиная с The data provider supports injection too.
DanPerman
(Dan Perman)
30.Октябрь.2017 14:50:39
#3
Это мой DP
@DataProvider (name = “CsvDataProvider”)
public static Iterator<Object[]> provideData(Method method) {
List<Object[]> list = new ArrayList<Object[]>();
String pathname = “C:/WebAutomation/src/test/resources/test_data/WEBAutomation.csv”;
File file = new File(pathname);
try {
CSVReader reader = new CSVReader(new java.io.FileReader(file));
String[] keys = reader.readNext();
if (keys != null) {
String[] dataParts;
while ((dataParts = reader.readNext()) != null) {
Map<String, String> testData = new HashMap<String, String>();
for (int i = 0; i < keys.length; i++) {
testData.put(keys[i], dataParts[i]);
}
list.add(new Object[] { testData });
}
}
reader.close();
} catch (FileNotFoundException e) {
throw new RuntimeException("File" + pathname + " was not found.\n" + e.getStackTrace().toString());
} catch (IOException e) {
throw new RuntimeException("Could not read " + pathname + " file.\n" + e.getStackTrace().toString());
}
return list.iterator();
}
BabyRoot
(Vasily)
30.Октябрь.2017 14:53:42
#4
И добавить к нему
@DataProvider(parallel = true)
1 лайк
DanPerman
(Dan Perman)
30.Октябрь.2017 14:56:28
#5
так?
@DataProvider (name = “CsvDataProvider”, parallel = true)
BabyRoot
(Vasily)
30.Октябрь.2017 14:57:22
#6
Проще же запустить и посмотреть, чем ждать моего ответа же?
1 лайк
DanPerman
(Dan Perman)
30.Октябрь.2017 15:05:03
#7
BabyRoot:
parallel = true
при таком запуске открывается по 2 страницы login Page на chrome , причем только в одном вводится user name: User1
в fire fox тоже 2 страницы login Page, но берет user name из 2 строк : User2User3
BabyRoot
(Vasily)
30.Октябрь.2017 15:11:51
#8
DanPerman:
if (keys != null) {
String[] dataParts;
while ((dataParts = reader.readNext()) != null) {
Map<String, String> testData = new HashMap<String, String>();
for (int i = 0; i < keys.length; i++) {
testData.put(keys[i], dataParts[i]);
}
list.add(new Object[] { testData });
}
Опять же, зачем так сложно? Вы так читаете логин и пароль из файла?
Как вы получаете в тесте уже логин и пароль из датапровайдера?
Выведете в консоль то что приходит в каждый тест из датапровайдера.
Я бы ещё просто в самом датапровайдере проверил что вы корректно считали и записали в мэп нужную инфу из файла.
DanPerman
(Dan Perman)
30.Октябрь.2017 15:29:58
#9
А как проще сделать ?
В будущем планирую добавить еще параметры для каждого теста.
Этот я взял как пример , когда начал писать свой тест.
ArtOfLife
(Sergey Korol)
30.Октябрь.2017 15:32:23
#10
Race condition же. Драйвер то у вас наверняка static. На форуме было уже множество тем на этот счет.
1 лайк
DanPerman
(Dan Perman)
30.Октябрь.2017 15:37:37
#11
Спасибо , поищу.
Значит плохо искал по форуму
VatslauX
(Vatslau)
04.Ноябрь.2017 19:14:53
#12
Поробуйте это
Чтение в БеворКласс
@Parameters({"path_generated", "stage", "country"})
@BeforeClass(enabled = true)
public void setUpSuite(String path_generated, String stage, String country) {
initSentry();
environment = new ImportEnvironment().readJsonEnvironment(stage, country);
String pathToFile = pathToGeneratedJson(environment, path_generated);
rootLogger.debug(path_generated);
this.userProfiles = new ImportDataUsers().userProfiles(pathToFile, stage, country);
return;
}
А
тут просто нужно Лист объектов переадать
@DataProvider(name = "users", parallel = true)
public Iterator<Object[]> users() {
Collection<Object[]> data = new ArrayList<>();
this.userProfiles.forEach(item -> data.add(new Object[]{item}));
return data.iterator();
}
1 лайк