TestNG provides a way to get the data from external sources like from excel/textfile/arrays which helps to prepare data driven framework in automation.
@Parameters – pass parameters from the testNG.xml
@dataProvider – Pass the parameters as a 2D array.
reference – https://testng.org/doc/documentation-main.html#parameters
In this post we will look into the testNG @Parameters
Let’s see the code implementation
@Parameters
package annotationpkg;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class parameters {@Test@Parameters({"browser", "url"})public void parameterTest(String browserName,String browserUrl) {System.out.println("Browser used : " + browserName);System.out.println("url under test : " + browserUrl);}}
and the testng.xml looks like:
<xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"><suite name="MySuite" parallel="none"><test name="MyTest1"><parameter name="browser" value="chrome"/><parameter name="url" value="https://qavbox.github.io/demo"/><classes><class name="annotationpkg.parameters"/></classes></test></suite>
As you can see above testng.xml, we have 3 parameter tags to pass to our method parameterTest(), and the method accepts as @parameters(…)
Parameters can be of data type like integer, character, string, boolean etc.
If you change the testng.xml file to below [don’t pass one parameter from the testng.xml], then we will get exception –
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" ><suite name="Suite1" verbose="1" ><test name="Regression1" ><!--parameter name="browser" value="firefox"/--><parameter name="url" value="https://qavbox.github.io/demo"/><classes><class name="testNgLearning.parameter.SampleParameterTest"/></classes><test><suite>
Output –
[Utils] [ERROR] [Error] org.testng.TestNGException:
Parameter 'browser' is required by @Test on method d_report but has not been marked @Optional or defined
To avoid this above error, either we will need to uncomment the browser parameter, or we need to use Optional keyword
public class parameters {@Test@Parameters({"browser", "url"})public void parameterTest(@Optional("chrome") String browserName,String browserUrl) {System.out.println("Browser used : " + browserName);System.out.println("url under test : " + browserUrl);}}
This above code will first check for the browser in testng.xml, if it’s not found then the default value it will take as chrome [@Optional(“chrome”) String browserName]
Now you can run above tesng.xml to get the output as
Browser used : chrome url under test : https://qavbox.github.io/demo
Hope this helps!