2010-04-30 16 views
5

Estoy usando TestNG para ejecutar pruebas basadas en Selenium en Java. Tengo un montón de pruebas repetidas. En general, hacen todo lo mismo, excepto el nombre de la prueba y un parámetro.¿Cómo generar pruebas con diferentes nombres en TestNG?

Quiero automatizar su generación. Estaba pensando en usar la fábrica. ¿Hay alguna forma de generar pruebas con diferentes nombres? ¿Cuál sería el mejor enfoque para esto?

Como por ahora no tengo algo parecido a continuación y que quieren crear 10 pruebas como 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)); 
    } 

} 
  • Mi suite XML es de código Java generado automáticamente.
  • Los nombres de prueba son cruciales para el registro de qué enlace está activo y cuál no.
+0

posible duplicado de [Nombres para las pruebas TestNG generadas dinámicamente en Eclipse plug-in] (http://stackoverflow.com/questions/12257387/names-for-dynamically- generated-testng-tests-in-eclipse-plugin) – Nathan

Respuesta

2

Así que conecté Factory con DataProvider y utilicé atributos de contextos.

@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)); 
} 

Y en el oyente

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")); 
    } 
    } 

} 
+0

¿Puede mostrar aquí cómo utilizó la clase Factory? – djangofan

+0

@djangofan Disculpe, pero ya no tengo el código. (respondió hace más de 4 años) –

+0

Ok, bueno, puedo decirle que la solución que publicó como respuesta aquí en realidad no funciona. Ahora, si realmente mostró una fábrica generando clases separadas, entonces creo que funcionaría. Establecer el nombre de la prueba en las pruebas generadas desde un DataProvider no funciona porque la instancia de la clase comparte el nombre de la prueba entre las múltiples llamadas parametrizadas de la clase. – djangofan

8

Haga que su clase de prueba implementar org.testng.ITest y anular getTestName() para devolver el nombre que desee.

Cuestiones relacionadas