Have a question?
Message sent Close
View Categories

TestNG Parameters

📄
filename.js
// Example of using a parameter in a test method

import org.testng.annotations.Parameters;

import org.testng.annotations.Test;

public class ParameterExample {

  @Test
  @Parameters("env")            // name of the XML parameter

  public void testEnv(String env) {

    System.out.println("Running tests against environment: " + env);

    // … use `env` to pick base URL, credentials, etc. …

  }

}

📄
filename.js
java -cp "bin:libs/*" org.testng.TestNG testng.xml

With Maven (Surefire):

📄
filename.js
<build>

  <plugins>

    <plugin>

      <artifactId>maven-surefire-plugin</artifactId>

      <configuration>

        <suiteXmlFiles>

          <suiteXmlFile>testng.xml</suiteXmlFile>

        </suiteXmlFiles>

      </configuration>

    </plugin>

  </plugins>

</build>

mvn test

📄
filename.js
Putting <parameter> directly under <suite> makes it available to all <test> blocks and classes:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">

<suite name="MySuite">

  <!-- Suite-level parameter -->

  <parameter name="env" value="staging"/>

  <parameter name="browser" value="chrome"/>

  <test name="SmokeTests">

    <classes>

      <class name="com.example.tests.ParameterExample"/>

    </classes>

  </test>

  <test name="RegressionTests">

    <classes>

      <class name="com.example.tests.ParameterExample"/>

    </classes>

  </test>

</suite>

📄
filename.js
<suite name="OverrideSuite">

  <!-- default values -->

  <parameter name="browser" value="chrome"/>

  <!-- Uses Chrome -->

  <test name="ChromeTests">

    <classes>

      <class name="com.example.tests.ParameterExample"/>

    </classes>

  </test>

  <!-- Overrides to Firefox -->

  <test name="FirefoxTests">

    <parameter name="browser" value="firefox"/>

    <classes>

      <class name="com.example.tests.ParameterExample"/>

    </classes>

  </test>

</suite>

📄
filename.js
import org.testng.annotations.Optional;

import org.testng.annotations.Parameters;

import org.testng.annotations.Test;

public class OptionalParameterExample {

  @Test
  @Parameters("timeout")

  public void timeoutTest(@Optional("30") int timeoutInSeconds) {

    System.out.println("Timeout is set to " + timeoutInSeconds + " seconds");

    // … use timeoutInSeconds …

  }

}

📄
filename.js
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">

<suite name="FullConfigSuite">

  <!-- Suite-level defaults -->

  <parameter name="env"     value="dev"/>

  <parameter name="browser" value="chrome"/>

  <test name="Smoke">

    <!-- inherits env=dev, browser=chrome -->

    <classes>

      <class name="com.example.tests.FullParameterExample"/>

    </classes>

  </test>

  <test name="CrossBrowser">

    <!-- override browser only -->

    <parameter name="browser" value="firefox"/>

    <classes>

      <class name="com.example.tests.FullParameterExample"/>

    </classes>

  </test>

</suite>

package com.example.tests;

import org.testng.annotations.Optional;

import org.testng.annotations.Parameters;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;

public class FullParameterExample {

  private String env;

  private String browser;

  private int retries;

  @BeforeClass
  @Parameters({"env","browser","retries"})

  public void setUp(String env,

                    String browser,

                    @Optional("2") int retries) {

    this.env = env;

    this.browser = browser;

    this.retries = retries;

    System.out.printf("Env=%s, Browser=%s, Retries=%d%n", env, browser, retries);

    // … initialize WebDriver based on browser …

  }

  @Test
  public void sampleTest() {

    System.out.println("Running test on " + env + " in " + browser);

    // … test logic …

  }

}