web-dev-qa-db-fra.com

Comment passer du code Java à un paramètre de maven pour le tester

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

22
Girish

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.

40
KingArasan

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.

3
niharika_neo

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;   
    }
2
Tarun Gupta

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

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
0
Changgull Song