J'ai besoin de transmettre les valeurs suivantes…
exeEvironment (environnement de test), testGroup (groupe dans testNG)
depuis la ligne de commande -> POM -> TestNG -> Scénarios de test.
Basé sur ces deux posts ....
passe un paramètre Java de maven
Comment passer des paramètres au test guicifié TestNG du plugin Surefire Maven?
J'ai fait la configuration suivante ..
Dans surefire plugin, j'ai essayé de suivre deux options, aucune ne semble fonctionner.
=====
(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>
Dans testNG.xml, puis-je utiliser la variable testGroup
comme…
<test name="Web Build Acceptance">
<groups>
<run>
<include name="${testGroup} />
</run>
</groups>
<classes>
<class name="com.abc.pqr" />
</classes>
</test>
Cela ne semble pas fonctionner aussi bien, dois-je définir un paramètre.
Dans le cas test, j’ai essayé d’obtenir les variables de deux manières… . (1)
testEnv = testContext.getSuite().getParameter("exeEnvironment");
testGroup = testContext.getSuite().getParameter("testGroup");
(2)
testEnv = System.getProperty("exeEnvironment");
testGroup = System.getProperty("testGroup");
C’est exactement ce que je recherchais pour mon test d’automatisation et je l’ai fait fonctionner.
Argument de ligne de commande
mvn clean test -Denv.USER=UAT -Dgroups=Sniff
Mon 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 test
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);
}
}
Ce qui précède fonctionne bien. De plus, si vous devez utiliser testng.xml
, vous pouvez spécifier la suiteXmlFile
comme ...
<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>
De plus, je préfère utiliser @Parameters
au lieu de parameters
dans @Test()
car ce dernier est obsolète.
Vous n'avez pas besoin de définir quoi que ce soit pour les groupes dans testng xml ou le pom, le support est intégré. Vous pouvez simplement spécifier les groupes sur la ligne de commande http://maven.Apache.org/plugins/maven-surefire-plugin/test-mojo.html#groups
J'espère que ça aide..
Edit 2:
Ok..so voici une autre option ... Implement IMethodInterceptor
Définissez votre propriété personnalisée . Utilisez -Dcustomproperty = groupthatneedstoberun dans votre appel en ligne de commande.
Dans l'appel d'interception, parcourez toutes les méthodes .. quelque chose à l'effet ..
System.getProperty("customproperty");
for(IMethodInstance ins : methods) {
if(ins.getMethod().getGroups()) contains group)
Add to returnedVal;
}
return returnedVal;
Ajoutez ceci à la liste des auditeurs dans votre fichier XML.
Les paramètres tels que navigateur et autres peuvent être définis comme suit:
<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>
et pour gérer cela en code Java, utilisez ceci:
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;
}
Parfait.
Le moyen le plus simple de passer la variable de POM.xml à ABC.Java
POM.xml
<properties>
<hostName>myhostname.com</hostName>
</properties>
Et dans le ABC.Java
, nous pouvons l'appeler à partir des propriétés du système comme ceci
System.getProperty("hostName")
Vous n'avez pas besoin d'utiliser les variables d'environnement ni d'éditer pom.xml pour les utiliser.
Les objectifs et les options pour Invoke Maven 3 dans la section Build prennent le paramètre. Essayez ceci (en supposant que vous avez paramétré la construction):
Invoke Maven 3
Goals and options = test -Denv=$PARAM_ENV -Dgroup=$PARAM_GROUP