Hello Folks,
In this post we will learn an important concept of parameters in TestNG.
We know that we can create parameterised methods in a TestNG class and pass parameters to these methods through testng xml. We can pass parameters at four levels:
Parameter value at higher level will be overridden by value at lower level if same parameter is passed. For example: If we pass a parameter say “Param” with value say “value1” at suite level and also we pass value “value2” for same parameter “Param” at test level, then parameter “Param” will have value as “value2” at that test level.
We will see some examples below:
TestNG class:
package Parameters; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class ParameterTest { @Test @Parameters({"testParameters1","testParameters2"}) public void testMethod(String testParameters1, String testParameters2) { System.out.println("Paramters one for test method: "+testParameters1); System.out.println("Paramters two for test method: "+testParameters2); } }
Testng xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="testParameters1" value="testParameters 1 value" /> <parameter name="testParameters2" value="testParameters 2 value" /> <test thread-count="5" name="Test"> <classes> <class name="Parameters.ParameterTest"></class> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Output:
Suite level parameters values were used by test method.
Testng xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="testParameters1" value="testParameters 1 value" /> <parameter name="testParameters2" value="testParameters 2 value" /> <test thread-count="5" name="Test"> <parameter name="testParameters1" value="testParameters 1 test level value" /> <parameter name="testParameters2" value="testParameters 2 test level value" /> <classes> <class name="Parameters.ParameterTest"></class> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Note here that I am passing parameters values at both levels: Suite and test.
Output:
Parameters values at test level was used by test method. Value given at suite level was ignored.
Testng xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="testParameters1" value="testParameters 1 value" /> <parameter name="testParameters2" value="testParameters 2 value" /> <test thread-count="5" name="Test"> <parameter name="testParameters1" value="testParameters 1 test level value" /> <parameter name="testParameters2" value="testParameters 2 test level value" /> <classes> <class name="Parameters.ParameterTest"></class> <parameter name="testParameters1" value="testParameters 1 class level value" /> <parameter name="testParameters2" value="testParameters 2 class level value" /> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Output:
Class level parameters values were used by test method.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <parameter name="testParameters1" value="testParameters 1 value" /> <parameter name="testParameters2" value="testParameters 2 value" /> <test thread-count="5" name="Test"> <parameter name="testParameters1" value="testParameters 1 test level value" /> <parameter name="testParameters2" value="testParameters 2 test level value" /> <classes> <class name="Parameters.ParameterTest"> <parameter name="testParameters1" value="testParameters 1 class level value" /> <parameter name="testParameters2" value="testParameters 2 class level value" /> <methods> <!-- Including individual method --> <include name="testMethod"></include> <!-- Passing parameters for first method--> <parameter name="testParameters1" value="testParameters 1 method level value" /> <parameter name="testParameters2" value="testParameters 2 method level value" /> </methods> </class> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Output:
Parameter values at method level were used by test methods ignoring all other higher levels.
Conclusion:
You can notice in all scenarios that parameter value at lower level was used by test methods. Now you will be thinking where we can use this concept?
Example:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Test1"> <span style="color: #008000;"><parameter name="browser" value="chrome" /></span> <classes> <class name="Parameters.ParameterTest"> <methods> <include name="testMethod1"></include> <include name="testMethod2"></include> <include name="testMethod3"></include> <include name="testMethod4"></include> <include name="testMethod5"></include> </methods> </class> </classes> </test> <!-- Test --> <test thread-count="5" name="Test2"> <span style="color: #008000;"><parameter name="browser" value="firefox" /></span> <classes> <class name="Parameters.ParameterTest"> <methods> <include name="testMethod6"></include> <include name="testMethod7"></include> <include name="testMethod8"></include> <include name="testMethod9"></include> <include name="testMethod10"></include> </methods> </class> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
More about TestNG in upcoming posts. Stay tuned.
If you have any doubt, feel free to comment below.
If you like my posts, please like, comment, share and subscribe.
#ThanksForReading
#HappySelenium
My name is Amod Mahajan and I am an IT employee with 4+ years of experience in Software testing and staying in Bengaluru. My area of interest is Automation testing. I started from basics and went throw so many selenium tutorials. Thanks to Mukesh Otwani as his tutorials are easy and cover basics to advance. I have habit of exploring concepts by deep diving. I used to make notes. I thought of sharing my knowledge through posts and now I am here. #KeepLearning #ShareLearning
Let's start with a real time example. You must have heard about Facebook. To create an account of Facebook, you need…
This is a frequently asked interview question for API testing. All these terms are confusing to beginners as well as…
Hello folks, When we parametrize methods in a TestNG class, we must need to pass parameter values from testng xml.…
Problem statement: Write a Java program to reverse position of words in given string i.e. word at first position in…
Hello Programmers, "Java Program to Reverse Every Word of a String" is frequently asked programming interview questions to freshers and experienced. I…
Hello folks, TestNG allows us to create parameterized methods in a TestNG class. A TestNG class may contain more than…