How to pass java code a parameter from Maven for testing?


TestNG is a testing framework and can use Maven as build tool. It helps to maintain dependencies and their version at one place in pom.xml

Maven provides flexibility to run using surefire plugin. Surefire plugin has feature to pass paramaeter from pom.xml to TestNG class or any java code. To achieve this, surefire plugin has another tag named as systemPropertyVariables where user can pass n number of variables and assign the value to these variables at run time using command line.

In this article we will illustrate how to pass a parameter from maven to java code.

Approach/Algorithm to solve this problem

  • Step 1: Create a TestNG classes − NewTestngClass

  • Step 2: Write 2 @Test method in the class.

  • Step 3: Add systemPropertyVariable in pom.xml as shown in program code section. Variable is ${env.user}

  • Step 4: Now pass the value of the variable at run time in command.

    mvn test −Denv.user=UAT

  • Step 5: Now, verify whether the same value of the variable is accessed or not.

Example

The following code to show how to run only 1 test method from a large suite:

src/test/java/NewTest.java

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class NewTest {

    @Test()
    public void testCase1() {
        System.out.println("in test case 1 of NewTestngClass");
        System.out.println("Regression" +   System.getProperty("environment"));
    }

    @Parameters("environment")
    @Test()
    public void testCase2(String environment) {
        System.out.println("in test case 2 of NewTestngClass");
        System.out.println("Environment name is- "+environment);

    }
} 

pom.xml

This is a maven configuration file that is used to organize dependencies, plugins and run the TestNG test cases.

It is very handy when limited tests are needed to execute rather than full suite.

<?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>com.sample</groupId>
    <artifactId>TestNGProjectct</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                  <systemPropertyVariables>
                        <environment>${env.user}</environment>
                    </systemPropertyVariables>
  
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>          
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.3.0</version>
        </dependency>
    </dependencies>
</project>

Command to Run specific suite

Please note if multiple suits are required to exclude simply write all suits name separated by commas

mvn clean test -Denv.user=UAT

Output

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< com.sample:TestNGProjectct >---------------------
[INFO] Building TestNGProjectct 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestNGProjectct ---
[INFO] Deleting C:\Users\anandas\IdeaProjects\TestNGProjectct\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestNGProjectct ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ TestNGProjectct ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 8 source files to C:\Users\anandas\IdeaProjects\TestNGProjectct\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ TestNGProjectct ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ TestNGProjectct ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\anandas\IdeaProjects\TestNGProjectct\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ TestNGProjectct ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running newTest
in test case 1 of NewTestngClass
RegressionUAT
in test case 2 of NewTestngClass
Environment name is- UAT
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.614 s - in newTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.468 s
[INFO] Finished at: 2022-02-11T09:06:48+05:30
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0 

Updated on: 17-Aug-2023

719 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements