Я использую TestNG для запущения основанных на селене тестов в Java. У меня есть набор повторных тестов. Обычно они делают все равно кроме тестового имени и одного параметра.
Я хочу автоматизировать поколение его. Я думал об использовании фабрики. Существует ли способ генерировать тесты с другим именем? Каков был бы лучший подход к этому?
Что касается теперь у меня есть что-то как ниже, и я хочу создать 10 тестов как LinkOfInterestIsActiveAfterClick
@Test(dependsOnGroups="loggedin")
public class SmokeTest extends BrowserStartingStoping{
public void LinkOfInterestIsActiveAfterClick(){
String link = "link_of_interest";
browser.click("*",link);
Assert.assertTrue(browser.isLinkActive(link));
}
}
Итак, я связал Factory с DataProvider и использовал атрибуты контекстов.
@DataProvider(name = "DP1")
public Object[][] createData() {
Object[][] retObjArr={
{"Link1","link_to_page"},
{"Link2","link_to_page"},
return retObjArr;
}
@Test (dataProvider = "DP1")
public void isActive(String name, String link){
this.context.setAttribute("name", name);
browser.click(link);
Assert.assertTrue(browser.isLinkActive(link));
}
А в Listener
public class MyListener extends TestListenerAdapter{
@Override
public void onTestSuccess(ITestResult tr){
log("+",tr);
}
//and similar
private void log(String string, ITestResult tr){
List<ITestContext> k = this.getTestContexts();
String testName = tr.getTestClass().getName();
for (ITestContext i: k)
{
if (i.getAttribute("name") != null)
logger.info(testName+"."+i.getAttribute("name"));
}
}
}
Пусть ваш тестовый класс реализует org.testng.ITest
и переопределяет getTestName()
, чтобы вернуть нужное вам имя.