Search code examples
mavencommand-linetestngpom.xmlsurefire

How to pass java code a parameter from maven for testing


I need to pass on following values …

exeEvironment (Test environment) , testGroup (Group in testNG)

from Command-Line -> POM -> TestNG -> Test cases.

Based on these two posts ....

pass a java parameter from maven

How to pass parameters to guicified TestNG test from Surefire Maven plugin?

I did the following configuration ..

In surefire plugin, I tried following two options, none seem to work.

=====

(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>

In testNG.xml , can I use the the variable testGroup like …

<test name="Web Build Acceptance">
    <groups>
        <run>
            <include name="${testGroup} />
        </run>
    </groups>
    <classes>
        <class name="com.abc.pqr" />
    </classes>
</test>

This doesn't seem to work as well, do I need to define a parameter.


In the test cases , I tried to get he variables in following two ways …. (1)

testEnv = testContext.getSuite().getParameter("exeEnvironment");
testGroup = testContext.getSuite().getParameter("testGroup");

(2)

testEnv = System.getProperty("exeEnvironment");
testGroup = System.getProperty("testGroup");


Solution

  • This is the exact thing I was looking for my automation test and I got it working.

    Command Line argument

    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>
    

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

    The above works well. Additionally, if you need to use testng.xml, you can specify the suiteXmlFile like ...

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

    Also, I prefer using @Parameters instead of parameters in @Test() as the later is deprecated.