validar usar tutorial texto que para framework componentes como comandos chrome webdriver testng

usar - Testng Webdriver: ¿Cómo puedo ejecutar el mismo caso de prueba varias veces?



selenium webdriver tutorial (6)

Quiero ejecutar un caso de prueba varias veces. ¿Es eso configurable en el testng.xml ? Si agrego un bucle en el método de prueba, los resultados de cada ejecución no se verán afectados en el informe de testng .


Ninguna de las respuestas hasta el momento realmente le da al usuario la posibilidad de aumentar el conteo de llamadas desde el archivo testng, que es lo que se solicitó. Esta solución se aprovecha de la solución DataProvider de gaurav25.

class TestClass() { int invocationCount; @Parameters({ "invocationCount" }) @BeginClass void BeginClass( @Optional("1") String invocationCount) { this.invocationCount = Ingeter.parse(invocationCount) } // It will return a 2D array of size 3x1 @DataProvider(name="URLprovider") private Object[][] getURLs() { ArrayList<Object []> obj = new ArrayList<>(3 * this.invocationCount); for(int iCount = 0; iCount < this.invocationCount; ++iCount) { list.add( new Object[] {"https://www.google.co.in/"} ); list.add( new Object[] {"http://www.gmail.com/"} ); list.add( new Object[] {"http://.com/"} ); } return list.toArray(); } /* Since Data provider for this test method returns 2D array of size (3*invocationCount)x1, this test method will run 3*invocationCount times **automatically** with 1 parameter every time. */ @Test(dataProvider="URLprovider") private void notePrice(String url) { driver.get(url); System.out.println(driver.getTitle()); } }

Ahora puede modificar cuántos conjuntos de pruebas se ejecutan a través de la función de prueba con este archivo testng.xml:

<suite name="ESFService" verbose="1" parallel="methods" thread-count="1" data-provider-thread-count="10" > <test name="Basic"> <classes> <class name="TestClass"> <parameter name="invocationCount" value="5"/> </class> </classes> </test> </suite>


No puede hacerlo desde el xml, pero en la anotación @Test: puede agregar un atributo invocationCount con la cantidad de veces que desee ejecutarlo. Saldría como esas muchas pruebas se ejecutan en el informe.

p.ej.

@Test(invocationCount = 10) public void testCount() {..}

Te has perdido el cierre de la llave al final, por lo que una pequeña corrección.


No se puede hacer desde el xml, pero se puede lograr usando la anotación @DataProvider en TestNG.

Aquí hay un código de muestra:

/* Since Data provider for this test method returns 2D array of size 3x1, this test method will run 3 times **automatically** with 1 parameter every time. */ @Test(dataProvider="URLprovider") private void notePrice(String url) { driver.get(url); System.out.println(driver.getTitle()); } // It will return a 2D array of size 3x1 @DataProvider(name="URLprovider") private Object[][] getURLs() { return new Object[][] { {"https://www.google.co.in/"}, {"http://www.gmail.com/"}, {"http://.com/"} }; }


Sé que es bastante tarde para la fiesta, pero si su objetivo es lograr un informe para cada carrera, entonces puede probar TestNG Listener IAnnotationTransformer

fragmento de código

public class Count implements IAnnotationTransformer { @Override public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { // TODO Auto-generated method stub annotation.setInvocationCount(numberOfTimesTOExecute); }

fragmento de xml

<listeners> <listener class-name="multiple.Count"></listener>


Si no te importa usar Sprint, puedes crear esta clase:

package somePackage; import org.junit.Ignore; import org.junit.runner.Description; import org.junit.runner.notification.RunNotifier; import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.InitializationError; import org.junit.runners.model.Statement; import org.springframework.test.annotation.Repeat; public class ExtendedRunner extends BlockJUnit4ClassRunner { public ExtendedRunner(Class<?> klass) throws InitializationError { super(klass); } @Override protected Description describeChild(FrameworkMethod method) { if (method.getAnnotation(Repeat.class) != null && method.getAnnotation(Ignore.class) == null) { return describeRepeatTest(method); } return super.describeChild(method); } private Description describeRepeatTest(FrameworkMethod method) { int times = method.getAnnotation(Repeat.class).value(); Description description = Description.createSuiteDescription( testName(method) + " [" + times + " times]", method.getAnnotations()); for (int i = 1; i <= times; i++) { description.addChild(Description.createTestDescription( getTestClass().getJavaClass(), "[" + i + "] " + testName(method))); } return description; } @Override protected void runChild(final FrameworkMethod method, RunNotifier notifier) { Description description = describeChild(method); if (method.getAnnotation(Repeat.class) != null && method.getAnnotation(Ignore.class) == null) { runRepeatedly(methodBlock(method), description, notifier); } super.runChild(method, notifier); } private void runRepeatedly(Statement statement, Description description, RunNotifier notifier) { for (Description desc : description.getChildren()) { runLeaf(statement, desc, notifier); } } }

Luego en la prueba real:

package somePackage; import *.ExtendedRunner; import org.junit.Ignore; import org.junit.runner.RunWith; import org.springframework.test.annotation.Repeat; @Ignore @RunWith(ExtendedRunner.class) public class RepeatedTest{ @Repeat(value N) public void testToBeRepeated() { } }

Donde N es la cantidad de veces que desea que la prueba se repita.


TestNg tiene un método. Puede usar este método y ejecutar su caso de prueba varias veces:

@Test(invocationCount = 100) public void testCount() { }