В том, то и дело, что если убрать notCreateDemo, то CreateDemo, отлично запускается
Опечатки нет точно. Более того, если установить зависимость теста notCreateDemo от createDemo через dependsOnMethods, то валится ошибка, говорящая, что отсутствует тест CreateDemo
Я не понимаю этой магии) уже всю голову сломала) сначала думала дело в приоритете невыставленном, но и приоритет не помогает)
Приоретизация вообще не работает через priority.
Покажите как выглядит тестовый класс где находятся эти методы
public class TestDemoAccount extends TestBase {
ObjectMapper mapper = new ObjectMapper();
String customer = app.properties.getProperty("WEB_LOGIN");
@DataProvider(name = "data")
public Iterator<Object[]> testData(ITestContext nameFile) throws IOException {
File file = app.getFile(nameFile);
List<DemoAccount> myObjects = mapper.readValue(file, new TypeReference<List<DemoAccount>>() {
});
Iterator<Object[]> iterator = myObjects.stream().map((g) -> new Object[]{g}).collect(Collectors.toList()).iterator();
return iterator;
}
@Test(dataProvider = "data")
public void createDemoAccount(DemoAccount demo) throws InterruptedException {
app.goTo().demoPage();
Objects<DemoAccount> before = app.db().demoAccount(customer);
app.accountDemo().createDemoAccount();
app.accountDemo().fillDemoAccount(demo);
app.accountDemo().submitDemoAccount();
Assert.assertTrue(app.accountDemo().isTextPresent("Ваш демо-счет успешно создан"));
Objects<DemoAccount> after = app.db().demoAccount(customer);
Assert.assertEquals(after.size(), before.size() + 1);
Assert.assertEquals(after, before.withAdded(demo.setId(after.stream().mapToInt((g) -> g.getId()).max().getAsInt())));
/* .setTypeAccount(after.stream().map( (g) -> g.getTypeAccount()).iterator().next())
.setAmount(after.stream().map((g) -> g.getAmount()).iterator().next())
.setCurrency(after.stream().map((g) -> g.getCurrency()).iterator().next())));*/
}
@Test(dataProvider = "data")
public void notCreateDemoAccount(DemoAccount demo) throws InterruptedException {
app.goTo().demoPage();
Objects before = app.db().demoAccount(customer);
app.accountDemo().createDemoAccount();
app.accountDemo().fillDemoAccount(demo);
app.accountDemo().submitDemoAccount();
Assert.assertFalse(app.accountDemo().isTextPresent("Ваш демо-счет успешно создан"));
app.goTo().demoPage();
Objects after = app.db().demoAccount(customer);
Assert.assertEquals(after.size(), before.size());
Assert.assertEquals(after, before);
}
}
Очень странно.
Я сделал такую же конфигупацию что и у вас и оба теста срабатывают
модет быть дело в ТестНГ версии…
я пробовал с <version>7.1.0</version>
попробуйте и вы с ней.
Запустите в режиме debug и пришлите лог, скорее всего не очевидная ошибка в коде или конфиге
Все таки testng пошел выполнять сначала createDemo
но на первой же строчке отваливается с InvocationTargetException
driver почему-то не инициализировался
если порядок меняешь в конфиге, то отрабатывает сначала createDemo
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" >
<test name="notCreateDemo" >
<parameter name="nameFile" value="demoAccountInvalidData.json"/>
<classes>
<class name="tests.TestDemoAccount">
<methods>
<include name="notCreateDemoAccount" />
</methods>
</class>
</classes>
</test>
<test name="createDemo" >
<parameter name="nameFile" value="demoAccountValidData.json"/>
<classes>
<class name="tests.TestDemoAccount">
<methods>
<include name="createDemoAccount" />
</methods>
</class>
</classes>
</test>
</suite>
последняя версия ставится не хочет
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.1.0</version>
</dependency>
У вас он в принципе не стартует второй тест или всеже пытается стартовать но какую-то ошибку выдает ? Если выдает покажите что за ошибка, вы там чтото про драйвер выше писали.
Нет, драйвер инициализируется, все норм, иначе бы вообще никакой тест не запускался.
Прхожусь дебагом и вижу, что набор определился с двумя тестами
[Suite: "Suite1" [Test: "createDemo" verbose:1[parameters:nameFile=>demoAccountValidData.json][metagroups:] [included: ][excluded: ] classes:[XmlClass class=tests.TestDemoAccount] packages:] [Test: "notCreateDemo" verbose:1[parameters:nameFile=>demoAccountInvalidData.json][metagroups:] [included: ][excluded: ] classes:[XmlClass class=tests.TestDemoAccount] packages:] ]
Но первым выполняет notCreateDemo, после переходит к createDemo и на первой же строке валится с NullPointerException
И если поменять в конфиге местами сами тесты, то опять таки выполнится самый последний, а к последующим не переходит.
Вообще непонятно и в кишках не смогла отловить ошибку.
Может какое-то свойство нужно добавить в конфиг testng ?
Перед каждым тестовым набором у меня отрабатывает авторизация
public class TestBase {
protected final ApplicationManager app = new ApplicationManager(System.getProperty("BROWSER", BrowserType.CHROME));
String customer = app.properties.getProperty("WEB_LOGIN");
@BeforeSuite
public void setUp() throws IOException {
app.properties();
app.init();
}
@AfterSuite
public void tearDown() {
app.stop();
}
}
и если меняешь аннотацию на @BeforeMethod, то все прекрасно отрабатывает, 2 теста и в том порядке, в котором указано в конфиге testng
А вот с @BeforeSuite авторизационная сессия со второго теста получается протухает, так как валится NullPointerException, хотя не должна.
Видимо и правда какая-то настройка что-ли должна быть в testng дополнительная… ?
Сделайте два suite, в каждый подключите свои параметры, классы и методы и подключите свои suite в testng. Может так заработает, как вам нужно
ну это наверное как-то странно, так как все эти тесты относятся к одной теме)
все равно не ясно почему не работает с одним suite )
Попробуйте в один раздел test их поместить
а параметры как я разные укажу? не получается так