</>

Technology

TestNG

Difficulty

Beginner

Interview Question

How do you pass parameters from testng.xml to test methods using @Parameters?

Answer

@Parameters in TestNG

@Parameters lets you pass values from testng.xml into test methods or @Before*/@After* setup methods — without hardcoding environment-specific values in test code.

Step 1 — Define Parameters in testng.xml

XML
<suite name="Suite">
    <parameter name="env"      value="staging"/>
    <parameter name="baseUrl"  value="https://staging.automateqa.online"/>
    <parameter name="browser"  value="chrome"/>

    <test name="SmokeTests">
        <parameter name="emailUser" value="smoke@test.com"/>
        <parameter name="emailPass" value="smoke123"/>

        <classes>
            <class name="tests.LoginTest"/>
        </classes>
    </test>
</suite>

Step 2 — Read in Test Class

Java
public class LoginTest extends BaseTest {

    @Parameters({"browser"})
    @BeforeMethod
    public void setUp(String browser) {
        // browser = "chrome" from testng.xml
        initDriver(browser);
    }

    @Parameters({"baseUrl", "emailUser", "emailPass"})
    @Test
    public void loginTest(String baseUrl, String email, String password) {
        driver.get(baseUrl + "/login");
        driver.findElement(By.id("email")).sendKeys(email);
        driver.findElement(By.id("password")).sendKeys(password);
        driver.findElement(By.id("loginBtn")).click();
        Assert.assertTrue(driver.getTitle().contains("Dashboard"));
    }
}

@Optional — Default Values

Java
@Parameters({"browser"})
@BeforeMethod
public void setUp(@Optional("chrome") String browser) {
    // Uses "chrome" if "browser" parameter not defined in testng.xml
    initDriver(browser);
}

Multi-Environment testng.xml Files

XML
<!-- testng-staging.xml -->
<suite name="Staging Suite">
    <parameter name="baseUrl" value="https://staging.automateqa.online"/>
    <parameter name="env"     value="staging"/>
</suite>

<!-- testng-prod.xml -->
<suite name="Prod Suite">
    <parameter name="baseUrl" value="https://automateqa.online"/>
    <parameter name="env"     value="production"/>
</suite>

Run for specific environment:

Bash
mvn test -DsuiteXmlFile=testng-staging.xml
mvn test -DsuiteXmlFile=testng-prod.xml

Cross-Browser Matrix

XML
<suite name="CrossBrowserSuite" parallel="tests" thread-count="3">
    <test name="Chrome">
        <parameter name="browser" value="chrome"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>
    <test name="Firefox">
        <parameter name="browser" value="firefox"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>
    <test name="Edge">
        <parameter name="browser" value="edge"/>
        <classes><class name="tests.LoginTest"/></classes>
    </test>
</suite>

@Parameters vs @DataProvider

Aspect@Parameters@DataProvider
Data sourcetestng.xmlJava method (array)
Multiple data setsNoYes
Runtime overrideMaven -D flagsCode change needed
Use caseConfig values, env, browserFunctional data sets

Follow AutomateQA

Related Topics