Comment passer le code java un paramètre de maven pour tester
je dois transmettre les valeurs suivantes ...
environnement (environnement D'essai) , testGroup (Groupe testNG)
à partir de la Ligne de Commande -> POM -> TestNG -> de cas de Test.
basé sur ces deux billets ....
Passez un paramètre java de maven
Comment passer des paramètres à guicified Test TestNG de surefire Maven plugin?
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 en suivant deux voies .... (1)
testEnv = testContext.getSuite().getParameter("exeEnvironment");
testGroup = testContext.getSuite().getParameter("testGroup");
(2)
testEnv = System.getProperty("exeEnvironment");
testGroup = System.getProperty("testGroup");
5 réponses
C'est exactement ce que je cherchais pour mon test d'automation et je l'ai fait fonctionner.
argument de ligne de commande
mvn clean test -Denv.USER=UAT -Dgroups=Sniff
My 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>
test 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);
}
}
ci-dessus fonctionne bien. En outre , si vous devez utiliser testng.xml
, vous pouvez spécifier le 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>
aussi, je préfère en utilisant @Parameters
au lieu de parameters
dans @Test()
comme ce dernier est déprécié.
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 cmd http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#groups
J'espère que ça aidera..
Edit 2:
Ok .. donc voici une autre option...Mettre En Œuvre IMethodInterceptor
Définissez votre coutume propriété. Utilisez-Dcustomproperty=groupthatneedstoberun dans votre appel en ligne de commande.
dans l'appel d'interception, scannez 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 écouteurs dans votre xml.
passe paramètre comme navigateur et autre peut être fait comme ci-dessous:
<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.
la façon la 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 des variables d'environnement ou d'éditer pom.xml à utiliser.
les buts et les options pour Invoke Maven 3 sous 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