Фабрика TestNG используется для динамического создания экземпляров тестовых классов.Это полезно, если вы хотите запускать тестовый класс в любое время.Например, если у вас есть тест для входа на сайт, и вы хотите запустить этот тест несколько раз, то это простая в использовании фабрика TestNG, где вы создаете несколько экземпляров класса теста и запускаете тесты.
public class WebTestFactory {
//createInstances method will create 10 objects of WebTest class
@Factory
public Object[] createInstances() {
Object[] result = new Object[10];
for (int i = 0; i < 10; i++) {
result[i] = new WebTest(i);
}
return result;
}
и теперь тестовый класс:
public class WebTest {
private int m_numberOfTimes;
public WebTest(int numberOfTimes) {
m_numberOfTimes = numberOfTimes;
}
@Test
public void testServer() {
//Code to test the application
}
}
Ваш testng.xml должен ссылаться только на класс, содержащий метод фабрики, поскольку сами тестовые экземпляры будут созданы во время выполнения:
<class name="WebTestFactory" />
Заводской метод может получать параметры, такие как @Test и @ Before / After, и он должен возвращать Object [].Возвращаемые объекты могут быть любого класса (не обязательно того же класса, что и фабричный класс).
Принимая во внимание, что поставщик данных используется для предоставления параметров для теста.Если вы предоставите поставщик данных для теста, тест будет выполняться каждый раз с различными наборами значений.Это полезно для сценария, например, когда вы хотите войти на сайт с разными наборами имени пользователя и пароля каждый раз.
public class DataProviderTest {
@Test(dataProvider= "data")
public void TestUltimatixFromExcelData(String userName,String password) {
WebDriver driver;
driver=new FirefoxDriver();
//Test to login into a site
}
@DataProvider(name="data")
public static Object[][] dataProviderTest() throws Exception{
Object[][] returnArray={new Object[]{"username1","password1"},new Object[]{"username2","password2"},new Object[]{"username3","password3"}
};
return returnArray;
}
}