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

20
demandé sur Community 2012-11-06 10:14:25

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é.

39
répondu KingArasan 2015-09-18 11:10:38

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.

3
répondu niharika_neo 2015-09-19 19:58:46

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;   
    }
2
répondu Tarun Gupta 2017-04-24 09:30:55

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")
1
répondu Praveen 2015-09-19 19:46:01

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
0
répondu Changgull Song 2016-01-28 17:52:20