¿Cómo puedo hacer que esta prueba testNG sea dinámica pero permanecer paralela?

Aug 21 2020
public class FactoryTest {
    
    @Test  
    @Parameters("Row")
    public void run1(int row) throws MalformedURLException{           
        new Controller(row);
    }
    
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
  <test thread-count="2" name="factory test" parallel="methods">
    <classes>
      <class name="RealPackage.FactoryTest">
             <methods>
                    <include name="run1">
                        <parameter name="Row"  value="1"/>
                    </include>                
                </methods></class>
    </classes>
  </test> <!-- OfficialTestName -->
</suite> <!-- Suite -->

Este es un ejemplo de una de las pruebas que necesito ejecutar. Necesito que se ejecute en paralelo con otras pruebas. Entonces, en la prueba, run1()creo un Controller(row)que inicia la prueba y le paso un número de fila. Quiero correr new Controller(1)y new Controller(2)e new Controller(3), etc, todo al mismo tiempo. Puedo hacer esto si cambio el archivo java a esto:

public class OfficialTest {
    
    @Test    
    public void run1() throws MalformedURLException{           
        new Controller(1);
    }
    
    @Test    
    public void run2() throws MalformedURLException{           
        new Controller(2);
    }
    
    @Test    
    public void run3() throws MalformedURLException{           
        new Controller(3);
    }
    
    @Test    
    public void run4() throws MalformedURLException{           
        new Controller(4);
    }
    
    @AfterMethod
    public void close() {
        System.out.println("closing");
    }
}

pero esto no es dinámico. Necesito poder ejecutar esto usando cualquier rango de número para row. Así que estaba pensando que tal vez podría generar un archivo XML que se encargara de esto, pero todavía no estoy seguro de si podría ejecutarse en paralelo de esa manera.

Respuestas

1 mastercool Aug 22 2020 at 03:29

Pude arreglarlo con esto:

public class ParallelTests 
{

    int row;
    
    @Parameters({"Row"})
    @BeforeMethod()
    public void setUp(int rowParam) throws MalformedURLException
    {           
       row = rowParam;
    }
    
    @Test
    public void RunTest() throws InterruptedException, MalformedURLException
    {
        new Controller(row);
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite thread-count="5" name="BlogSuite" parallel="tests">
<test name="Test 1">
<parameter name="Row" value="1"/>
    <classes>
      <class name="RealPackage.ParallelTests"/>
    </classes>
  </test> 
  <test name="Test 2">
<parameter name="Row" value="2"/>
    <classes>
      <class name="RealPackage.ParallelTests"/>
    </classes>
  </test> 
    <test name="Test 3">
<parameter name="Row" value="3"/>
    <classes>
      <class name="RealPackage.ParallelTests"/>
    </classes>
  </test> 
    <test name="Test 4">
<parameter name="Row" value="4"/>
    <classes>
      <class name="RealPackage.ParallelTests"/>
    </classes>
  </test> 
      <test name="Test 5">
<parameter name="Row" value="5"/>
    <classes>
      <class name="RealPackage.ParallelTests"/>
    </classes>
  </test>
  </suite>