Factory позволяет динамически создавать тесты.
Предположим, что это текущая настройка ...
SequentialTest.java - Пример части
@Test(dataProvider="dp")
public void firstTest(int id, String account) {
System.out.println("Test #1 with data: "+id+". "+account);
}
Data.java - Часть образца
@DataProvider(name="dp")
public static Object[][] dataProvider() {
Object[][] dataArray = { {1, "user1"}, {2, "user2"} };
return dataArray;
}
Возможно, у вас есть поставщик данных в том же классе.
testng.xml - соответствующая часть
< test name = "checks">
< classes >
< class name="....Sequential" />
< /classes >
< /test>
Согласно статье изменения, которые требуются в классах и xml.
SequentialTest.java -Создайте переменные экземпляра для каждого параметра, который был ранее передан в метод теста.Создайте конструктор с переменными экземпляра.Удалите часть поставщика данных из аннотации теста.Удалите параметры из методов тестирования.
private int id;
private String account;
public SequentialTest(int id, String account) {
this.id = id;
this.account = account;
}
@Test
public void firstTest() {
System.out.println("Test #1 with data: "+id+". "+account);
assertTrue(true);
}
Data.java - Необходимо разделить метод поставщика данных на отдельный класс (если его еще нет) и добавить к нему метод factory.Поставщик данных остается прежним.
@Factory(dataProvider="dp")
public Object[] createInstances(int id, String account) {
return new Object[] {new SequentialTest(id, account)};
}
testng.xml - Удалите существующую часть.Нужно упомянуть только имя класса, содержащего метод Factory.Самое главное добавьте параметр group-by-instances="true"
, который даст вам желаемое поведение.
< test name="fact" group-by-instances="true">
< classes>
< class name="....Data"/>
< classes/>
< /test>