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