Passing Parameters to Test Scripts Using TestNG
TestNG allows passing runtime values from testng.xml to your test methods using the @Parameters annotation.
Step 1 — Define parameter in testng.xml:
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testsuite">
<test name="sampletest">
<parameter name="a" value="welcome" />
<classes>
<class name="parameterization.Test1" />
</classes>
</test>
</suite>
Step 2 — Use @Parameters in Java test:
Java
package parameterization;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class Test1 {
@Parameters("a")
@Test
public void m1(String s) {
System.out.println("The value from xml file is: " + s);
// Output: The value from xml file is: welcome
}
}
Practical browser parameterization:
XML
<suite name="CrossBrowserSuite">
<test name="ChromeTest">
<parameter name="browser" value="chrome" />
<classes>
<class name="tests.BrowserTest" />
</classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox" />
<classes>
<class name="tests.BrowserTest" />
</classes>
</test>
</suite>
Java
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if (browser.equalsIgnoreCase("chrome")) {
driver = new ChromeDriver();
} else if (browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
}
}
Key rules:
- ✓Parameter name in
testng.xmlmust match the string in@Parameters("name") - ✓Multiple parameters:
@Parameters({"browser", "url"}) - ✓Optional parameters: use
@Optional("default value")if param may be absent
