what test stands reports pom plugin for example does are maven command-line testng pom.xml surefire

test - Cómo pasar código Java a un parámetro de maven para probar



testng maven (5)

Esto es exactamente lo que estaba buscando para mi prueba de automatización y lo hice funcionar.

Argumento de línea de comando

mvn clean test -Denv.USER=UAT -Dgroups=Sniff

Mi pom xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>TestNg</groupId> <artifactId>TestNg</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <systemPropertyVariables> <environment>${env.USER}</environment> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> </project>

TestNG prueba

import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class TestAuthentication { @Test (groups = { "Sniff", "Regression" }) public void validAuthenticationTest(){ System.out.println(" Sniff + Regression" + System.getProperty("environment")); } @Test (groups = { "Regression" },parameters = {"environment"}) public void failedAuthenticationTest(String environment){ System.out.println("Regression-"+environment); } @Parameters("environment") @Test (groups = { "Sniff"}) public void newUserAuthenticationTest(String environment){ System.out.println("Sniff-"+environment); } }

Lo anterior funciona bien. Además, si necesita usar testng.xml , puede especificar el suiteXmlFile como ...

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <systemPropertyVariables> <environment>${env.USER}</environment> </systemPropertyVariables> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>

Además, prefiero usar @Parameters lugar de parameters en @Test() ya que el último está en desuso.

Necesito transmitir los siguientes valores ...

exeEvironment (entorno de prueba), testGroup (Grupo en testNG)

desde la línea de comandos -> POM -> TestNG -> Casos de prueba.

Basado en estos dos mensajes ...

pasar un parámetro java de maven

¿Cómo pasar los parámetros a la prueba TestNG ficticia del complemento Surefire Maven?

Hice la siguiente configuración ..

En el plugin de surefire , intenté seguir dos opciones, ninguna parece funcionar.

=====

(1)

<execution> <id>default-test</id> <goals> <goal>test</goal> </goals> <configuration> <properties> <exeEnvironment>${exeEnvironment}</exeEnvironment> <testGroup>${testGroup}</testGroup> </properties> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </execution>

(2)

<execution> <id>default-test</id> <goals> <goal>test</goal> </goals> <configuration> <systemPropertyVariables> <exeEnvironment>${exeEnvironment}</exeEnvironment> <testGroup>${testGroup}</testGroup> </systemPropertyVariables> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </execution>

En testNG.xml , ¿puedo usar la variable testGroup como ...

<test name="Web Build Acceptance"> <groups> <run> <include name="${testGroup} /> </run> </groups> <classes> <class name="com.abc.pqr" /> </classes> </test>

Esto no parece funcionar tan bien, ¿necesito definir un parámetro?

En los casos de prueba , traté de obtener las variables siguiendo dos maneras ... (1)

testEnv = testContext.getSuite().getParameter("exeEnvironment"); testGroup = testContext.getSuite().getParameter("testGroup");

(2)

testEnv = System.getProperty("exeEnvironment"); testGroup = System.getProperty("testGroup");


No es necesario usar variables de entorno o editar pom.xml para usarlas.

Los objetivos y opciones para Invoke Maven 3 en la sección Generar toman el parámetro. Prueba esto (asumiendo que has parametrizado la construcción):

Invoke Maven 3 Goals and options = test -Denv=$PARAM_ENV -Dgroup=$PARAM_GROUP


No necesita definir nada para grupos en testng xml o pom, el soporte viene incorporado. Simplemente puede especificar los grupos en la línea cmd http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#groups

Espero eso ayude..

Edición 2:

Ok ... así que aquí hay otra opción ... Implementar IMethodInterceptor

Defina su propiedad personalizada. Use -Dcustomproperty = groupthatneedstoberun en su llamada de línea de comando.

En la llamada de intercepción, examine todos los métodos ... algo al efecto ...

System.getProperty("customproperty"); for(IMethodInstance ins : methods) { if(ins.getMethod().getGroups()) contains group) Add to returnedVal; } return returnedVal;

Agregue esto a la lista de oyentes en su xml.


Pasando parámetros como el navegador y otros se puede hacer de la siguiente manera:

<properties> <BrowserName></BrowserName> <TestRunID></TestRunID> </properties> <!-- Below plug-in is used to execute tests --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <suiteXmlFiles> <suiteXmlFile>src/test/resources/${testXml}</suiteXmlFile> </suiteXmlFiles> <systemPropertyVariables> <browserName>${BrowserName}</browserName> <testRunID>${TestRunID}</testRunID> </systemPropertyVariables> </configuration> <executions> <execution> <id>surefire-it</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> <testFailureIgnore>true</testFailureIgnore> </configuration> </execution> </executions> </plugin>

y para manejar esto en código java usa esto:

public static final String Browser_Jenkin=System.getProperty("BrowserName"); public static final String TestRunID=System.getProperty("TestRunID"); public static String browser_Setter() { String value=null; try { if(!Browser_Jenkin.isEmpty()) { value = Browser_Jenkin; } } catch (Exception e) { value =propObj.getProperty("BROWSER"); } return value; } public static String testRunID_Setter() { String value=null; try { if(!TestRunID.isEmpty()) { value = TestRunID; } } catch (Exception e) { value =propObj.getProperty("TEST_RUN_ID"); } return value; }


Perfecto.

La forma más sencilla de pasar la variable de POM.xml a ABC.java

POM.xml

<properties> <hostName>myhostname.com</hostName> </properties>

Y en el ABC.java podemos llamarlo desde las propiedades del sistema como esta.

System.getProperty("hostName")