Здравствуйте.
Есть такой код с JUnit.
Появилась необходимость перейти на TestNG.
Описание:
Мы хаваем .txt с кучей URL. Дальше мы передаем этот URL в тест. Каждый новый URL генерит новый тест. Для отчетов используется Allure
Вопрос:
Подскажите пожалуйста как переписать данный код под TestNG.
@RunWith(Parameterized.class)
public class ajaxTest {
testStatus status = new testStatus();
@Parameterized.Parameters(name = "url = {0}")
public static Collection<Object[]> parameters() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("./urls.txt"));
List<String> urls = new ArrayList<>();
while ((url = reader.readLine()) != null) {
urls.add(url);
}
return urls.stream().map(url -> new String[]{url}).collect(Collectors.toList());
}
@Parameterized.Parameter
public static String url;
@Severity(SeverityLevel.BLOCKER)
@Test
public void status() throws IOException {
status.testStatus(url);
}
}
Нет, такого нет, но это и не надо.
Это какое-то зло злющее, жутко сложно. Можно ведь всё гораздо проще делать.
Да и вообще свои требования пересмореть. Не нужно вам это.
@Test(dataProvider = "setOfUrls")
public void testMyParams(String url){
//... do test code. For example, System.out.println(url);
}
//....
@DataProvider
public Object[][] setOfUrls(){
return new Object[][]{
{"http://ya.ru"},
{"http://google.com"},
{"http://bint.com"},
}
}
ну было бы здорово почитать пост, постарайтесь найти времечко. Потому что мне как-то удобней с ним работать в разы. Особенно очень удобно работать с xml-кой и группировать тесты. Можно создавать разные сьюты и дергать их в зависимости от необходимости…
Ну так в JUnit можно тоже тестам давать тэги и категории. По-моему, это гораздно удобнее, чем создавать сьюиты. Просто говоришь: “Запусти все тесты, связанные с платежами” - и фигак, JUnit сам нашёл и запустил все тесты с тэгом “payments”. И не надо никаких XML и сьюитов вручную создавать.
А если надо все тесты с платежками, кроме некоторых? Там достаточно просто строку в сьюте закоментировать или написать исключение. Наверное все же дело вкуса… Но статейку бы читнул с удовольствием
Тема давняя, очень часто встречаю сторонников jUnit и TestNG.
Единственное, что в jUnit видел удобнее, так это - Ignore тесты | Trial book, но все же это такая мелочь, можно и комментарий сверху написать…
Также @DataProvider может передавать в тест данные любого типа. Мне как-то это очень помогло
Возможно для юнит-тестов - более чем достаточно jUnit, а для автоматизации - TestNG, хотя и jUnit с этим тоже справляется…
Единственное, что опасно в TestNG - это делать зависимые тесты, это скорей всего лучше стороной обходить, а не использовать как полезную фичу и проектировать тесты как-то так, чтобы такого небыло, в остальном очень даже все удобненько…
Для этого есть groups в TestNG, а далее - или surefire плагин в Maven, или testNG настройка в Gradle. Никаких XML не требуется, только указать, к примеру, -Dgroups=group1,group2. В таком случае запустятся тесты входящие в группу group1 или group2
А зачем это надо?
Если хорошенько задуматься, это не нужно! А если нужно, это свидетельствует о более серьёзных проблемах в проекте.
Ну и кстати, так же легко закомментировать “ненужные” тесты.
О, нет-нет. Совсем наоборот. @DataProvider если и нужен, то как раз для юнит-тестов. Потому, что они по определению быстрые, и в них можно проверить кучу разных комбинаций. А UI-тесты по определению медленные, и в них нельзя проверять кучу комбинаций. Только один-два-три самых критичных сценария. И для этого не нужны @DataProvider.
Да, точно, это то самое зло, которое я имел в виду.