</>

Technology

TestNG

Difficulty

Intermediate

Interview Question

How can we pass parameters to a test script using TestNG?

Use @Parameters annotation in Java and define the parameter tag in testng.xml to pass external values to test methods.

Answer

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.xml must match the string in @Parameters("name")
  • Multiple parameters: @Parameters({"browser", "url"})
  • Optional parameters: use @Optional("default value") if param may be absent

Follow AutomateQA

Related Topics